use substrate_data::schema::Found;
use substrate_data::{Kind, Path, Ref};
use crate::{Meaning, Res, kinds};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TagRef {
pub kind: String,
pub id: String,
}
pub fn content(refs: &[Found<Ref>]) -> impl Iterator<Item = &Found<Ref>> {
let domain = [
kinds::Tag::NAME,
kinds::Res::NAME,
kinds::Lang::NAME,
kinds::Image::NAME,
];
refs.iter()
.filter(move |f| !domain.contains(&f.value.kind.as_str()))
}
pub fn tags(refs: &[Found<Ref>]) -> Vec<Found<TagRef>> {
meanings(refs)
.filter_map(|(m, path)| match m {
Meaning::Tag(value) => Some(Found { value, path }),
_ => None,
})
.collect()
}
pub fn resources(refs: &[Found<Ref>]) -> Vec<Found<Res>> {
meanings(refs)
.filter_map(|(m, path)| match m {
Meaning::Res(value) => Some(Found { value, path }),
_ => None,
})
.collect()
}
fn meanings(refs: &[Found<Ref>]) -> impl Iterator<Item = (Meaning, Path)> + '_ {
refs.iter()
.filter_map(|f| Some((Meaning::of(f.value.clone())?, f.path.clone())))
}