use {
crate::{
semver_range::SemverRange,
specifier::{strip_semver_range, Specifier},
},
std::rc::Rc,
};
#[derive(Debug, PartialEq)]
pub struct Range {
pub raw: String,
pub node_range: Rc<node_semver::Range>,
pub node_version: Rc<node_semver::Version>,
pub semver_range: SemverRange,
pub semver_number: String,
}
impl Range {
pub fn create(raw: &str) -> Specifier {
let semver_range = SemverRange::parse(raw);
let semver_number = strip_semver_range(raw).to_string();
match (Specifier::new_node_range(raw), Specifier::new_node_version(&semver_number)) {
(Some(node_range), Some(node_version)) => Specifier::Range(Self {
raw: raw.to_string(),
node_range,
node_version,
semver_range,
semver_number,
}),
_ => Specifier::Unsupported(raw.to_string()),
}
}
}