pub mod entity_relationship_edge;
pub mod entity_relationship_node;
use core::fmt::Display;
use entity_relationship_edge::EREdge;
pub use entity_relationship_edge::EREdgeBuilder;
use entity_relationship_node::ERNode;
pub use entity_relationship_node::{ERNodeBuilder, attribute::EntityRelationshipAttribute};
use crate::{
shared::{
generic_configuration::{GenericConfiguration, GenericConfigurationBuilder},
generic_diagram::{GenericDiagram, GenericDiagramBuilder},
},
traits::{configuration::Configuration, diagram::Diagram},
};
pub type ERDiagramConfiguration = GenericConfiguration;
pub type ERDiagramConfigurationBuilder = GenericConfigurationBuilder;
pub type ERDiagram = GenericDiagram<ERNode, EREdge, GenericConfiguration>;
pub type ERDiagramBuilder = GenericDiagramBuilder<ERNode, EREdge, GenericConfiguration>;
use core::fmt;
impl Display for ERDiagram {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
use crate::traits::TabbedDisplay;
self.fmt_tabbed(f, 0)
}
}
impl crate::traits::TabbedDisplay for ERDiagram {
fn fmt_tabbed(&self, f: &mut fmt::Formatter<'_>, tab_count: usize) -> fmt::Result {
let indent = " ".repeat(tab_count * 2);
write!(f, "{}", self.configuration())?;
writeln!(f, "{indent}erDiagram")?;
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(())
}
}