erd_rs 0.1.0

A command line utility that take Rust code as the source of truth to produce a entity relation diagram markdown file (e.g., mermaid.js file).
Documentation
use super::{ClassDiagramFormater, Vis};

pub struct MMDFormater();

impl ClassDiagramFormater for MMDFormater {
    fn format_class(&self, name: String) -> String {
        format!(" class {name} {{")
    }

    fn format_field(&self, vis: String, name: String, ty: String) -> String {
        format!("  {vis}{ty} {name}")
    }

    fn format_link(
        &self,
        clazz1: String,
        cardinality1: String,
        clazz2: String,
        cardinality2: String,
        label: String,
    ) -> String {
        format!(" {clazz1} \"{cardinality1}\" -- \"{cardinality2}\" {clazz2} : {label}")
    }

    fn format_class_end(&self) -> String {
        " }".to_string()
    }

    fn format_fn(
        &self,
        clazz: String,
        vis: String,
        method_name: String,
        inputs: Vec<(String, String)>,
        output: String,
    ) -> String {
        let inputs = inputs
            .into_iter()
            .map(|i| i.0)
            .collect::<Vec<String>>()
            .join(", ");
        format!(" {clazz}: {vis}{method_name}({inputs}) {output}")
    }

    fn format_vis(&self, vis: super::Vis) -> String {
        {
            match vis {
                Vis::Public => "+",
                Vis::Internal => "~",
                Vis::Protected => "#",
                Vis::Private => "-",
            }
            .to_string()
        }
    }
}