landscape/desk/sur/contacts.hoon
2023-07-13 12:46:25 -05:00

90 lines
2.0 KiB
Plaintext

/- e=epic, g=groups
|%
:: [compat] protocol-versioning scheme
::
:: adopted from :groups, slightly modified.
::
:: for our action/update marks, we
:: - *must* support our version (+okay)
:: - *should* support previous versions (especially actions)
:: - but *can't* support future versions
::
:: in the case of updates at unsupported protocol versions,
:: we backoff and subscribe for version changes (/epic).
:: (this alone is unlikely to help with future versions,
:: but perhaps our peer will downgrade. in the meantime,
:: we wait to be upgraded.)
::
+| %compat
++ okay `epic`0
++ mar
|%
++ base
|%
+$ act %contact-action
+$ upd %contact-update
--
::
++ act `mark`^~((rap 3 *act:base '-' (scot %ud okay) ~))
++ upd `mark`^~((rap 3 *upd:base '-' (scot %ud okay) ~))
--
::
+| %types
+$ contact
$: nickname=@t
bio=@t
status=@t
color=@ux
avatar=(unit @t)
cover=(unit @t)
groups=(set flag:g)
==
::
+$ foreign [for=$@(~ profile) sag=$@(~ saga)]
+$ profile [wen=@da con=$@(~ contact)]
+$ rolodex (map ship foreign)
::
+$ epic epic:e
+$ saga
$@ $? %want :: subscribing
%fail :: %want failed
%lost :: epic %fail
~ :: none intended
==
saga:e
::
+$ field
$% [%nickname nickname=@t]
[%bio bio=@t]
[%status status=@t]
[%color color=@ux]
[%avatar avatar=(unit @t)]
[%cover cover=(unit @t)]
[%add-group =flag:g]
[%del-group =flag:g]
==
::
+$ action
:: %anon: delete our profile
:: %edit: change our profile
:: %meet: track a peer
:: %heed: follow a peer
:: %drop: discard a peer
:: %snub: unfollow a peer
::
$% [%anon ~]
[%edit p=(list field)]
[%meet p=(list ship)]
[%heed p=(list ship)]
[%drop p=(list ship)]
[%snub p=(list ship)]
==
::
+$ update :: network
$% [%full profile]
==
::
+$ news :: local
[who=ship con=$@(~ contact)]
--