(define-module (community-garden edit) #:use-module (community-garden actors) #:use-module (goblins) #:use-module (goblins vrun) #:use-module (goblins ocapn ids) #:use-module (goblins ocapn captp) #:use-module (goblins ocapn netlayer onion) #:use-module (ice-9 match) #:export (edit-garden)) (define (edit-garden name garden-address) (define garden-sref (string->ocapn-id garden-address)) (define vat (spawn-vat)) (define-vat-run vat-run vat) (define onion-netlayer (vat-run (new-onion-netlayer))) (define mycapn (vat-run (spawn-mycapn onion-netlayer))) (define garden-vow (vat-run ($ mycapn 'enliven garden-sref))) (define approved-plants-vow (vat-run (<- garden-vow 'get-approved-plants))) (define gardener (vat-run (spawn ^gardener name garden-vow))) (define running? #t) (while running? (match (read) (('quit) (set! running? #f)) (('get-garden-name) (vat-run (on ($ gardener 'get-garden-name) (lambda (name) (format #t "~a\n" name))))) (('dig-up x y) (vat-run ($ gardener 'dig-up x y))) (('plant x y) (vat-run (on approved-plants-vow (match-lambda ((plant . _) ($ gardener 'plant plant x y)))))) (exp (format #t "unrecognized command: ~a\n" exp)))))