use std::collections::HashMap;
use crate::parser::{Result, Error};
#[derive(Debug)]
pub struct PathParser {
pub path: String,
pub values: Option<HashMap<String, String>>
}
impl PathParser {
pub fn parse(path: &str) -> Result<Self> {
if path.len() == 0 {
return Err(Error::InvalidFormat);
}
let parts: Vec<_> = path.split(':').collect();
if parts.len() > 2 {
return Err(Error::InvalidFormat);
}
let path = parts[0].to_string();
let values = match parts.get(1) {
Some(s) => {
let values: Vec<_> = s.split(',').collect();
let mut map = HashMap::new();
for val in values.iter() {
let parts: Vec<_> = val.split('=').collect();
if parts.len() != 2 {
return Err(Error::InvalidFormat);
}
map.insert(parts[0].to_string(), parts[1].to_string());
}
Some(map)
}
None => None
};
Ok(Self { path, values })
}
}
impl PartialEq for PathParser {
fn eq(&self, other: &Self) -> bool {
self.path == other.path
}
}
impl PartialEq<&str> for PathParser {
fn eq(&self, other: &&str) -> bool {
self.path == *other
}
}