#[doc = "The document model"]; type ast_id = int; type cratedoc = { topmod: moddoc, }; enum itemtag { modtag(moddoc), consttag(constdoc), fntag(fndoc), enumtag(enumdoc), restag(resdoc), ifacetag(ifacedoc), impltag(impldoc) } type moddoc = { id: ast_id, name: str, path: [str], brief: option, desc: option, // This box exists to break the structural recursion items: ~[itemtag] }; type constdoc = { id: ast_id, name: str, brief: option, desc: option, ty: option }; type fndoc = { id: ast_id, name: str, brief: option, desc: option, args: [argdoc], return: retdoc, failure: option, sig: option }; type argdoc = { name: str, desc: option, ty: option }; type retdoc = { desc: option, ty: option }; type enumdoc = { id: ast_id, name: str, brief: option, desc: option, variants: [variantdoc] }; type variantdoc = { name: str, desc: option, sig: option }; type resdoc = { id: ast_id, name: str, brief: option, desc: option, args: [argdoc], sig: option }; type ifacedoc = { id: ast_id, name: str, brief: option, desc: option, methods: [methoddoc] }; type methoddoc = { name: str, brief: option, desc: option, args: [argdoc], return: retdoc, failure: option, sig: option }; type impldoc = { id: ast_id, name: str, brief: option, desc: option, iface_ty: option, self_ty: option, methods: [methoddoc] }; #[doc = "Some helper methods on moddoc, mostly for testing"] impl util for moddoc { fn mods() -> [moddoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { modtag(moddoc) { some(moddoc) } _ { none } } } } fn fns() -> [fndoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { fntag(fndoc) { some(fndoc) } _ { none } } } } fn consts() -> [constdoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { consttag(constdoc) { some(constdoc) } _ { none } } } } fn enums() -> [enumdoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { enumtag(enumdoc) { some(enumdoc) } _ { none } } } } fn resources() -> [resdoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { restag(resdoc) { some(resdoc) } _ { none } } } } fn ifaces() -> [ifacedoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { ifacetag(ifacedoc) { some(ifacedoc) } _ { none } } } } fn impls() -> [impldoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { impltag(impldoc) { some(impldoc) } _ { none } } } } } #[doc = "Helper methods on itemtag"] impl util for itemtag { fn name() -> str { alt self { doc::modtag({name, _}) { name } doc::fntag({name, _}) { name } doc::consttag({name, _}) { name } doc::enumtag({name, _}) { name } doc::restag({name, _}) { name } doc::ifacetag({name, _}) { name } doc::impltag({name, _}) { name } } } }