use super::v1;
use crate::rules::{self, Rule};
use crate::v2;
pub(crate) fn doc_links(links: &[v2::DocLink]) -> Vec<v1::DocLink> {
links
.iter()
.map(|link| v1::DocLink {
text: link.text.clone(),
offset: link.offset,
len: link.len,
target: link.target.clone(),
})
.collect()
}
pub(crate) fn model_rule(rule: &Rule) -> v1::Rule {
use v1::rule::Kind;
let kind = match rule {
Rule::Range { min, max } => Kind::Range(v1::rule::Range {
min: min.clone(),
max: max.clone(),
}),
Rule::Step(step) => Kind::Step(step.clone()),
Rule::Unit(unit) => Kind::Unit(unit.clone()),
Rule::Length { min, max } => Kind::Length(v1::rule::Length {
min: *min,
max: *max,
}),
Rule::Pattern(pattern) => Kind::Pattern(pattern.clone()),
Rule::CollectionBound { min, max } => Kind::CollectionBound(v1::rule::CollectionBound {
min: *min,
max: *max,
}),
Rule::Timing {
mode,
min_us,
max_us,
} => Kind::Timing(v1::rule::Timing {
mode: *mode as i32,
min_us: min_us.clone(),
max_us: max_us.clone(),
}),
Rule::ResponseBound { min_us, max_us } => Kind::ResponseBound(v1::rule::ResponseBound {
min_us: min_us.clone(),
max_us: max_us.clone(),
}),
Rule::Errors(names) => Kind::Errors(v1::rule::Errors {
names: names.clone(),
}),
Rule::Contract { kind, source } => Kind::Contract(v1::rule::Contract {
kind: *kind as i32,
source: source.clone(),
}),
};
v1::Rule {
kind: Some(kind),
text: rules::render(rule),
}
}
pub(crate) fn model_rules(
home: &v2::Package,
deps: &[&v2::Package],
item: rules::ItemRef<'_>,
) -> Vec<v1::Rule> {
rules::rules(home, deps, item)
.iter()
.map(model_rule)
.collect()
}