use {crate::specifier::Specifier, std::rc::Rc};
#[derive(Debug, PartialEq)]
pub struct Exact {
pub raw: String,
pub node_version: Rc<node_semver::Version>,
pub node_range: Rc<node_semver::Range>,
}
impl Exact {
pub fn create(raw: &str) -> Specifier {
let version_without_equals = raw.strip_prefix('=').unwrap_or(raw);
match Specifier::new_node_version(version_without_equals) {
Some(node_version) => {
let node_range = Specifier::new_node_range(version_without_equals).unwrap_or_else(|| {
Rc::new(node_semver::Range::parse(version_without_equals).unwrap())
});
Specifier::Exact(Self {
raw: raw.to_string(),
node_version,
node_range,
})
}
None => Specifier::Unsupported(raw.to_string()),
}
}
}