summaryrefslogtreecommitdiff
path: root/community-garden/edit.scm
blob: bbfc0adbafc0c06e8e76e7936a73f88826760268 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(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 x y plant))))))
      (exp
       (format #t "unrecognized command: ~a\n" exp)))))