use std::collections::HashMap;
use uri::Uri;
use Result;
use error::{Error, ErrorType};
#[derive(Debug)]
pub struct Namespace {
prefix: String,
uri: Uri
}
impl Namespace {
pub fn new(prefix: String, uri: Uri) -> Namespace {
Namespace {
prefix: prefix,
uri: uri
}
}
pub fn prefix(&self) -> &String {
&self.prefix
}
pub fn uri(&self) -> &Uri {
&self.uri
}
}
#[derive(PartialEq, Debug)]
pub struct NamespaceStore {
namespaces: HashMap<String, Uri>
}
impl NamespaceStore {
pub fn new() -> NamespaceStore {
NamespaceStore {
namespaces: HashMap::new()
}
}
pub fn namespaces(&self) -> &HashMap<String, Uri> {
&self.namespaces
}
pub fn add(&mut self, ns: &Namespace) {
&self.namespaces.insert(ns.prefix().clone(), ns.uri.clone());
}
pub fn get_uri_by_prefix(&self, prefix: String) -> Result<&Uri> {
match self.namespaces.get(&prefix) {
Some(uri) => Ok(uri),
None => Err(Error::new(ErrorType::InvalidNamespace,
"Namespace does not exists for prefix: ".to_string() + &prefix.to_string()))
}
}
}