use super::DefinitionDoc;
use crate::schema::Ordered;
#[derive(Debug, Default)]
pub(super) struct Definitions(Vec<(String, Option<DefinitionDoc>)>);
impl Definitions {
pub(super) fn has(&self, name: &str) -> bool {
self.0.iter().any(|(n, _)| n == name)
}
pub(super) fn reserve(&mut self, name: &str) {
self.0.push((name.to_owned(), None));
}
pub(super) fn set(&mut self, name: &str, definition: DefinitionDoc) {
if let Some(slot) = self.0.iter_mut().find(|(n, _)| n == name) {
slot.1 = Some(definition);
}
}
pub(super) fn finish(self) -> Ordered<DefinitionDoc> {
Ordered(
self.0
.into_iter()
.filter_map(|(name, d)| Some((name, d?)))
.collect(),
)
}
}