/-  *invite-store
/+  resource
|%
++  slan  |=(mod=@tas |=(txt=@ta (need (slaw mod txt))))
::
++  seri                                              :::  serial
  =,  dejs:format
  ^-  $-(json serial)
  (cu (slan %uv) so)
::
++  invites-to-json
  |=  inv=invites
  ^-  json
  %-  pairs:enjs:format
  %+  turn  ~(tap by inv)
  |=  [=term =invitatory]
  ^-  [cord json]
  [term (invitatory-to-json invitatory)]
::
++  invitatory-to-json
  |=  =invitatory
  ^-  json
  =,  enjs:format
  %-  pairs
  %+  turn  ~(tap by invitatory)
  |=  [=serial =invite]
  ^-  [cord json]
  [(scot %uv serial) (invite-to-json invite)]
::
++  invite-to-json
  |=  =invite
  ^-  json
  =,  enjs:format
  %-  pairs
  :~  [%ship (ship ship.invite)]
      [%app [%s app.invite]]
      [%resource (enjs:resource resource.invite)]
      [%recipient (ship recipient.invite)]
      [%text [%s text.invite]]
  ==
::
++  update-to-json
  |=  upd=update
  =,  enjs:format
  ^-  json
  %+  frond  %invite-update
  %-  pairs
  :~
    ?:  =(%initial -.upd)
      ?>  ?=(%initial -.upd)
      [%initial (invites-to-json invites.upd)]
    ?:  =(%create -.upd)
      ?>  ?=(%create -.upd)
      [%create (pairs [%term s+term.upd]~)]
    ?:  =(%delete -.upd)
      ?>  ?=(%delete -.upd)
      [%delete (pairs [%term s+term.upd]~)]
    ?:  =(%accepted -.upd)
      ?>  ?=(%accepted -.upd)
      :-  %accepted
      %-  pairs
      :~  [%term s+term.upd]
          [%uid s+(scot %uv uid.upd)]
          [%invite (invite-to-json invite.upd)]
      ==
    ?:  =(%decline -.upd)
      ?>  ?=(%decline -.upd)
      :-  %decline
      %-  pairs
      :~  [%term s+term.upd]
          [%uid s+(scot %uv uid.upd)]
      ==
    ?:  =(%invite -.upd)
      ?>  ?=(%invite -.upd)
      :-  %invite
      %-  pairs
      :~  [%term s+term.upd]
          [%uid s+(scot %uv uid.upd)]
          [%invite (invite-to-json invite.upd)]
      ==
    ?:  =(%invitatory -.upd)
      ?>  ?=(%invitatory -.upd)
      :-  %invitatory
      (invitatory-to-json invitatory.upd)
    ::
    ::  %noop
    [*@t *json]
  ==
::
++  json-to-action
  |=  jon=json
  ^-  action
  =,  dejs:format
  =<  (parse-json jon)
  |%
  ++  parse-json
    %-  of
    :~  [%create so]
        [%delete so]
        [%invite invite]
        [%accept accept]
        [%decline decline]
    ==
  ::
  ++  invite
    %-  ot
    :~  [%term so]
        [%uid seri]
        [%invite invi]
    ==
  ::
  ++  accept
    %-  ot
    :~  [%term so]
        [%uid seri]
    ==
  ::
  ++  decline
    %-  ot
    :~  [%term so]
        [%uid seri]
    ==
  ::
  ++  invi
    %-  ot
    :~  [%ship (su ;~(pfix sig fed:ag))]
        [%app so]
        [%resource dejs:resource]
        [%recipient (su ;~(pfix sig fed:ag))]
        [%text so]
    ==
  --
--