From 3301430c676e4af6b95d96b6408a66f9d2768653 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Sun, 8 Sep 2019 16:15:46 +0200 Subject: First version --- src/doxygen/builders.rs | 109 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/doxygen/builders.rs (limited to 'src/doxygen/builders.rs') diff --git a/src/doxygen/builders.rs b/src/doxygen/builders.rs new file mode 100644 index 0000000..9b60325 --- /dev/null +++ b/src/doxygen/builders.rs @@ -0,0 +1,109 @@ +use super::*; + +pub(super) fn builder_for(doxygen_kind: String) -> Box { + match doxygen_kind.as_str() { + "namespace" => Box::new(NameSpaceBuilder::default()), + "class" | "struct" => Box::new(ClassBuilder::default()), + _ => Box::new(UnhandledBuilder), + } +} + +#[derive(Debug, Default)] +struct NameSpaceBuilder { + name: Option, + members: Vec, + brief_description: Option, + detailed_description: Option, +} + +impl TypeBuilder for NameSpaceBuilder { + fn build(self: Box) -> DoxygenType { + let name = self.name.unwrap(); + + DoxygenType::NameSpace(NameSpace { + name, + members: self.members, + brief_description: self.brief_description.unwrap(), + detailed_description: self.detailed_description.unwrap(), + }) + } + + fn name(&mut self, value: String) { + self.name = Some(value); + } + + fn add_inner(&mut self, name: String, kind: String) { + self.members.push(name); + } + + fn add_member(&mut self, _section: String, _member: Member) { + panic!("Adding member in namespace?"); + } + + fn brief_description(&mut self, description: Description) { + self.brief_description = Some(description); + } + + fn detailed_description(&mut self, description: Description) { + self.brief_description = Some(description); + } +} + +#[derive(Debug, Default)] +struct UnhandledBuilder; + +impl TypeBuilder for UnhandledBuilder { + fn build(self: Box) -> DoxygenType { + DoxygenType::Unhandled + } + + fn name(&mut self, _value: String) {} + + fn add_inner(&mut self, _name: String, _kind: String) {} + fn add_member(&mut self, _section: String, _member: Member) {} + fn brief_description(&mut self, _description: Description) {} + fn detailed_description(&mut self, _description: Description) {} +} + +#[derive(Debug, Default)] +struct ClassBuilder { + name: Option, + inners: Vec<(String, String)>, + sections: HashMap>, + brief_description: Option, + detailed_description: Option, +} + +impl TypeBuilder for ClassBuilder { + fn build(self: Box) -> DoxygenType { + let name = self.name.unwrap(); + + DoxygenType::Class(Class { + name, + inners: self.inners, + sections: self.sections, + brief_description: self.brief_description.unwrap_or(Description::new()), + detailed_description: self.detailed_description.unwrap_or(Description::new()), + }) + } + + fn name(&mut self, value: String) { + self.name = Some(value); + } + + fn add_inner(&mut self, name: String, kind: String) { + self.inners.push((name, kind)); + } + + fn add_member(&mut self, section: String, member: Member) { + self.sections.entry(section).or_default().push(member); + } + + fn brief_description(&mut self, description: Description) { + self.brief_description = Some(description); + } + + fn detailed_description(&mut self, description: Description) { + self.brief_description = Some(description); + } +} -- cgit v1.2.3