use super::definitions::Definitions;
use super::{DefinitionDoc, ShapeNode};
use crate::schema::{Ordered, Shape};
#[derive(Debug, Clone, PartialEq, crate::Schema)]
pub struct ShapeDoc {
pub root: ShapeNode,
pub defs: Ordered<DefinitionDoc>,
}
impl ShapeDoc {
#[must_use]
pub fn of(shape: &Shape) -> ShapeDoc {
let mut defs = Definitions::default();
let root = ShapeNode::of(shape, &mut defs);
ShapeDoc {
root,
defs: defs.finish(),
}
}
#[must_use]
pub fn definition(&self, name: &str) -> Option<&DefinitionDoc> {
self.defs.0.iter().find(|(n, _)| n == name).map(|(_, d)| d)
}
}