mod version;
use std::collections::{HashMap, hash_map::Entry};
pub use version::{Version, VersionError};
mod plan_version;
pub use plan_version::{PlanVersion, PlanVersionError};
use crate::{
parse::{Anchor, context::ContextError, proto::extensions::SimpleExtensionUrn},
urn::Urn,
};
pub mod extensions;
#[derive(Default)]
pub struct ExtensionAnchors {
simple_extensions: HashMap<Anchor<SimpleExtensionUrn>, Urn>,
}
impl super::Context for ExtensionAnchors {}
impl ExtensionAnchors {
pub fn add_simple_extension_urn(
&mut self,
simple_extension_urn: &SimpleExtensionUrn,
) -> Result<(), ContextError> {
let anchor = simple_extension_urn.anchor();
match self.simple_extensions.entry(anchor) {
Entry::Occupied(_) => Err(ContextError::DuplicateSimpleExtension(anchor)),
Entry::Vacant(entry) => {
entry.insert(simple_extension_urn.urn().clone());
Ok(())
}
}
}
pub fn get_simple_extension_urn(&self, anchor: &Anchor<SimpleExtensionUrn>) -> Option<&Urn> {
self.simple_extensions.get(anchor)
}
}