///|
/// A native flowchart header and its shared flowchart-grammar statements.
pub struct Diagram {
 header : String
 direction : String?
 front_matter : String?
 directives : ReadOnlyArray[String]
 statements : ReadOnlyArray[@shared.Statement]
} derive(Eq, Debug)
///|
pub fn Diagram::new(statements : ArrayView[@shared.Statement], header? : String = "flowchart", direction? : String, front_matter? : String, directives? : ArrayView[String] = []) -> Diagram {
 {header,direction,front_matter,directives:ReadOnlyArray::from_array(directives),statements:ReadOnlyArray::from_array(statements)}
}
///|
pub fn Diagram::shared(self : Diagram) -> @shared.Diagram {
 @shared.Diagram::new(self.statements[:],direction?=self.direction,front_matter?=self.front_matter,directives=self.directives[:])
}
///|
pub extend Diagram with Eq::{equal,not_equal}
///|
pub extend Diagram with @debug.Debug::{to_repr}