(define-module (bugafriend utils registry) #:use-module (goblins) #:use-module (goblins actor-lib methods) #:use-module (goblins ocapn captp) #:use-module (goblins ocapn netlayer prelay) #:use-module (goblins ocapn netlayer prelay-utils) #:use-module (ice-9 match) #:export (prelay-sref->mycapn-registry)) ;; Proposal for a registry object that bundles up a netlayer and mycapn into a single two-method capability ;; See https://community.spritely.institute/t/feedback-on-ocapn-netlayers-interface/407 (define (^mycapn-registry bcom netlayer netlayer-type) (define mycapn (spawn-mycapn netlayer)) (methods [(register obj) ($ mycapn 'register obj netlayer-type)] [(enliven id) ($ mycapn 'enliven id)])) (define (prelay-sref->mycapn-registry setup-sref) (on (fetch-and-spawn-prelay-netlayer setup-sref) (lambda (netlayer) (unless netlayer (error "Couldn't spawn netlayer.")) (spawn ^mycapn-registry netlayer 'prelay)) #:promise? #t))