:: :::: /hoon/plan/mar :: /? 310 /- plan-acct, plan-diff :: :::: ~fyr :: =, eyre =, html =, format |_ all/{{who/@txname loc/@txloc} acc/(map knot plan-acct)} :: ++ grow :: convert to =+ all |% ++ txt ^- wain :+ (cat 3 'User ' ?~(who 'of Urbit' who)) (cat 3 'Location ' ?~(loc %unknown loc)) %+ turn (sort ~(tap by acc) aor) |= {a/knot b/plan-acct} ^- cord %+ rap 3 :^ a ': ' usr.b ?~(url.b ~ [', ' (apix:en-purl u.url.b)]) :: ++ plan-json %- pairs:enjs :~ who+?~(who ~ s+who) loc+?~(loc ~ s+loc) acc+o+(~(run by acc) json-acct) == ++ json-acct :: helper |= a/plan-acct ^- json =/ url ?~(url.a ~ (tape:enjs (apix:en-purl u.url.a))) (pairs:enjs usr+s+usr.a url+url ~) -- ++ grab |% :: convert from ++ noun {{cord cord} (map knot plan-acct)} :: clam from %noun ++ txt |^ |= a/wain ^+ all ?> ?=({@t @t *} a) :- [(rash i.a user) (rash i.t.a location)] (malt (turn t.t.a |=(b/cord (rash b account)))) :: ++ user ;~(pfix (jest 'User ') (cook crip (star prn))) ++ knot %+ cook crip (plus ;~(pose nud low hig hep dot sig cab)) ++ location ;~(pfix (jest 'Location ') (cook crip (star prn))) ++ account ;~ plug knot ;~(pfix col ace knot) (punt ;~(pfix com ace aurf:de-purl)) == -- ++ mime |=({* a/octs} (txt (to-wain q.a))) :: XX mark translation -- ++ grad |% ++ form %plan-diff ++ diff |= neu/_all ^- plan-diff :: XXX map functions :+ ?:(=(-.all -.neu) ~ (some -.neu)) =< (malt `(list {knot $~})`(murn ~(tap by acc.all) .)) |= {a/knot *} ^- (unit {knot $~}) ?:((~(has by acc.neu) a) ~ (some [a ~])) =< (malt (murn ~(tap by acc.neu) .)) |= {a/knot b/plan-acct} ^- (unit {knot plan-acct}) ?: =([~ b] (~(get by acc.all) a)) ~ (some [a b]) :: ++ pact |= dif/plan-diff ^+ all :: XXX map functions :- (fall inf.dif -.all) =; neu (~(uni by neu) put.dif) =+ del=~(tap by del.dif) |- ^+ acc.all ?~ del acc.all $(del t.del, acc.all (~(del by acc.all) p.i.del)) :: ++ can-join |= {ali/plan-diff bob/plan-diff} ^- ? ?& !&(?=({{^ *} {^ *}} +<) !=(u.inf.ali u.inf.bob)) :: compatible info =(~ (~(int by `(map knot *)`del.ali) put.bob)) :: no del-put =(~ (~(int by `(map knot *)`put.ali) del.bob)) :: conflicts .= (~(int by put.ali) put.bob) :: and all put (~(int by put.bob) put.ali) :: values match == :: ++ join |= {ali/plan-diff bob/plan-diff} ^- (unit plan-diff) ?. (can-join ali bob) ~ %^ some (mate inf.ali inf.bob) (~(uni by del.ali) del.bob) (~(uni by put.ali) put.bob) -- --