summaryrefslogtreecommitdiff
path: root/desk/lib/trill/gate.hoon
blob: ebb78b8e36117e6add9c8f9477b69b7dba91fbad (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/-  gate=trill-gate
|%
++  mask-lock
|=  =lock:gate  ^-  lock:gate
  :*  ?:  public.rank.lock    rank.lock    [~ %| %|]
      ?:  public.luk.lock     luk.lock     [~ %| %|]
      ?:  public.ship.lock    ship.lock    [~ %| %|]
      ?:  public.tags.lock    tags.lock    [~ %| %|]
      ?:  public.custom.lock  custom.lock  [~ %|]
  ==
++  can-access
|=  [=ship =lock:gate =bowl:gall]  ^-  ?
  ?^  fn.custom.lock  %-  u.fn.custom.lock  ship
  =/  in-luk  (~(has in caveats.ship.lock) ship)
  =/  fu  (sein:title our.bowl now.bowl ship)
  =/  ye  (sein:title our.bowl now.bowl fu)
  =/  ze  (sein:title our.bowl now.bowl ye)
  =/  in-ship   ?|
    (~(has in caveats.luk.lock) fu)
    (~(has in caveats.luk.lock) ye)
    (~(has in caveats.luk.lock) ze)
  ==
  =/  in-rank  (~(has in caveats.rank.lock) (clan:title ship))
  :: =/  in-tags  (~(has in (scry-pals-tags caveats.tags.lock)) ship)
  =/  can  |=  [pit=? has=?]  ^-  ?  ?:  pit  has  !has
  =/  as-ship  (can locked.ship.lock in-ship)
  =/  as-luk   (can locked.ship.lock in-luk)
  =/  as-rank  (can locked.ship.lock in-rank)
  ::=/  as-tags  (can locked.ship.lock in-tags)
  ?&(as-ship as-luk as-rank)

++  scry-pals-tags
|=  tags=(set @t)  ^-  (set @p)
  :: .^()
  ~
++  apply-change
|=  [=lock:gate =change:gate]  ^-  lock:gate
  ?-  -.change
    %set-rank    lock(rank +.change)
    %set-luk     lock(luk +.change)
    %set-ship    lock(ship +.change)
    %set-tags     lock(tags +.change)
    %set-custom  lock  ::TODO
  ==
++  open-all
|=  =lock:gate  ^-  lock:gate
  %=  lock
    rank  rank.lock(locked .n)
    luk   luk.lock(locked .n)
    ship  ship.lock(locked .n)
    tags  tags.lock(locked .n)
  ==
++  lock-all
|=  =lock:gate  ^-  lock:gate
%=  lock
rank  rank.lock(locked .y)
luk   luk.lock(locked .y)
ship  ship.lock(locked .y)
tags  tags.lock(locked .y)
==
++  toggle-rank
|=  [r=rank:title setting=[caveats=(set rank:title) locked=? public=?]]
  =/  new-caveats=(set rank:title)  ?:  locked.setting
  (~(put in caveats.setting) r)
  (~(del in caveats.setting) r)
  setting(caveats new-caveats)
++  toggle-ship
|=  [s=ship setting=[caveats=(set ship) locked=? public=?]]
  =/  new-caveats=(set ship)  ?:  locked.setting
  (~(put in caveats.setting) s)
  (~(del in caveats.setting) s)
  setting(caveats new-caveats)
++  toggle-tag
|=  [t=@t setting=[caveats=(set @t) locked=? public=?]]
  =/  new-caveats=(set @t)  ?:  locked.setting
  (~(put in caveats.setting) t)
  (~(del in caveats.setting) t)
  setting(caveats new-caveats)
--