pub mod class_edge;
pub mod class_node;
mod configuration;
pub mod visibility;
use core::fmt::Display;
use class_edge::ClassEdge;
pub use class_edge::ClassEdgeBuilder;
use class_node::ClassNode;
pub use class_node::ClassNodeBuilder;
pub use configuration::ClassDiagramConfiguration;
use crate::{
shared::generic_diagram::{GenericDiagram, GenericDiagramBuilder},
traits::{configuration::Configuration, diagram::Diagram},
};
pub type ClassDiagram = GenericDiagram<ClassNode, ClassEdge, ClassDiagramConfiguration>;
pub type ClassDiagramBuilder =
GenericDiagramBuilder<ClassNode, ClassEdge, ClassDiagramConfiguration>;
impl Display for ClassDiagram {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
use crate::traits::TabbedDisplay;
self.fmt_tabbed(f, 0)
}
}
impl crate::traits::TabbedDisplay for ClassDiagram {
fn fmt_tabbed(&self, f: &mut core::fmt::Formatter<'_>, tab_count: usize) -> core::fmt::Result {
let indent = " ".repeat(tab_count * 2);
write!(f, "{}", self.configuration())?; writeln!(f, "{indent}classDiagram")?;
writeln!(f, "{indent} direction {}", self.configuration().direction())?;
for style_class in self.style_classes() {
style_class.fmt_tabbed(f, tab_count + 1)?;
}
for node in self.nodes() {
node.fmt_tabbed(f, tab_count + 1)?;
}
for edge in self.edges() {
edge.fmt_tabbed(f, tab_count + 1)?;
}
Ok(())
}
}