urbit/tree/json.hook
2015-09-01 17:24:18 -07:00

75 lines
1.7 KiB
Plaintext

::
:::: /hook/json/tree
::
/? 314
/+ tree
/= gas /$ fuel
/= dat /^ tree-include
/: /===/tree-gen /%
/tree-include/
::
/= kid /^ (map span tree-include)
/: /===/tree-gen /% 2 /_
/tree-include/
!:
::::
::
|%
++ schema (dict ,[term $|(mark schema)])
++ dict |*(a=_,* $&([a (dict a)] a))
++ query
$% [%kids p=(list query)]
[%name %t]
[%path %t]
[%sect %j]
[%snip %r]
[%head %r]
[%body %r]
[%meta %j]
==
++ to-queries
|= a=schema ^- (list query)
?@(-.a [(to-query a) ~] [(to-query -.a) $(a +.a)])
::
++ to-query
|= a=[term $|(mark schema)]
~| invalid-query/a
?+ -.a ;;(query a)
%kids [%kids (to-queries ?@(+.a !! +.a))]
==
++ from-type :: XX holding out for noun odors
|= a=$%([%t p=cord] [%r p=json] [%j p=json])
?- -.a
%t [%s p.a]
%r p.a
%j p.a
==
++ from-queries
|= [bem=beam quy=(list query)]
=< (jobe (turn quy .))
|= a=query
:- -.a
?- -.a
%name (from-type +.a ?^(s.bem i.s.bem q.bem))
%path (from-type +.a (crip (spud (flop s.bem))))
%head (from-type +.a head.dat)
%snip (from-type +.a snip.dat)
%sect (from-type +.a sect.dat)
%meta (from-type +.a meta.dat)
%body (from-type +.a body.dat)
%kids ?< (~(has by (mo p.a)) %kids) :: XX recursion?
=< o/(~(urn by kid) .)
|= [dir=span dak=tree-include]
^^$(quy p.a, s.bem [dir s.bem], dat dak, kid ~)
==
--
!:
::::
::
[tree .]
^- json
=+ ^= schem
=+ seh=(fall (~(get by qix.gas) 'q') 'body.r')
~|(bad-noun/seh ;;(schema (rash seh read-schem)))
(from-queries bem.gas(s but.gas) (to-queries schem))