(.module: [lux (#- type) [abstract [monad (#+ do)]] [control ["<>" parser ["" code (#+ Parser)]]] [data ["." text]] [world [net (#+ URL)]]] [// ["/" project] ["//." dependency]]) (def: group (Parser /.Group) .text) (def: name (Parser /.Name) .text) (def: version (Parser /.Version) .text) (def: artifact' (Parser /.Artifact) ($_ <>.and ..group ..name ..version)) (def: artifact (Parser /.Artifact) (.tuple ..artifact')) (def: url (Parser URL) .text) (def: scm (Parser /.SCM) ..url) (def: license (Parser /.License) (.tuple ($_ <>.and ..name ..url (<>.default #/.Repo (<>.or (.this! (' #repo)) (.this! (' #manual))))))) (def: organization (Parser /.Organization) (<| .form (<>.after (.this! (' #organization))) ($_ <>.and ..name ..url))) (def: developer' (Parser /.Developer) ($_ <>.and ..name ..url (<>.maybe ..organization) )) (def: developer (Parser /.Developer) (<| .form (<>.after (.this! (' #developer))) ..developer')) (def: contributor (Parser /.Contributor) (<| .form (<>.after (.this! (' #contributor))) ..developer')) (def: no-info /.Info {#/.url #.None #/.scm #.None #/.description #.None #/.licenses (list) #/.organization #.None #/.developers (list) #/.contributors (list)}) (def: (bundle tag parser) (All [a] (-> Code (Parser a) (Parser (List a)))) (.form (<>.after (.this! tag) (<>.some parser)))) (def: info (Parser /.Info) ($_ <>.and (<>.maybe ..url) (<>.maybe ..scm) (<>.maybe .text) (<>.default (list) (..bundle (' #licenses) ..license)) (<>.maybe ..organization) (<>.default (list) (..bundle (' #developers) ..developer)) (<>.default (list) (..bundle (' #contributors) ..contributor)) )) (def: repository (Parser /.Repository) ..url) (def: type (Parser //dependency.Type) .text) (def: dependency (Parser /.Dependency) (.tuple ($_ <>.and ..artifact' (<>.default //dependency.lux-library ..type) ))) (def: source (Parser /.Source) .text) (def: #export project (Parser /.Project) (<| .form (<>.after (.this! (' project:))) (`` ($_ <>.and ..artifact (<| (<>.default ..no-info) .form (<>.after (.this! (' #info))) ..info) (<| (<>.default (list)) (..bundle (' #repositories)) ..repository) (<| (<>.default (list)) (..bundle (' #dependencies)) ..dependency) (<| (<>.default (list "source")) (..bundle (' #sources)) ..source) ))))