add prune logic
This commit is contained in:
parent
ac528d2156
commit
68e08bed4f
2 changed files with 41 additions and 0 deletions
|
@ -5,3 +5,4 @@
|
||||||
/// integrates into Aerogramme
|
/// integrates into Aerogramme
|
||||||
pub mod parser;
|
pub mod parser;
|
||||||
pub mod query;
|
pub mod query;
|
||||||
|
pub mod prune;
|
||||||
|
|
40
aero-ical/src/prune.rs
Normal file
40
aero-ical/src/prune.rs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
use icalendar::parser::{Component, Property};
|
||||||
|
use aero_dav::caltypes as cal;
|
||||||
|
|
||||||
|
pub fn component<'a>(src: &'a Component<'a>, prune: &cal::Comp) -> Option<Component<'a>> {
|
||||||
|
if src.name.as_str() != prune.name.as_str() {
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
|
||||||
|
let name = src.name.clone();
|
||||||
|
|
||||||
|
let properties = match &prune.prop_kind {
|
||||||
|
None => vec![],
|
||||||
|
Some(cal::PropKind::AllProp) => src.properties.clone(),
|
||||||
|
Some(cal::PropKind::Prop(l)) => src.properties.iter().filter_map(|prop| {
|
||||||
|
let sel_filt = match l.iter().find(|filt| filt.name.0.as_str() == prop.name.as_str()) {
|
||||||
|
Some(v) => v,
|
||||||
|
None => return None
|
||||||
|
};
|
||||||
|
|
||||||
|
match sel_filt.novalue {
|
||||||
|
None | Some(false) => Some(prop.clone()),
|
||||||
|
Some(true) => Some(Property {
|
||||||
|
name: prop.name.clone(),
|
||||||
|
params: prop.params.clone(),
|
||||||
|
val: "".into()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}).collect::<Vec<_>>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let components = match &prune.comp_kind {
|
||||||
|
None => vec![],
|
||||||
|
Some(cal::CompKind::AllComp) => src.components.clone(),
|
||||||
|
Some(cal::CompKind::Comp(many_inner_prune)) => src.components.iter().filter_map(|src_component| {
|
||||||
|
many_inner_prune.iter().find_map(|inner_prune| component(src_component, inner_prune))
|
||||||
|
}).collect::<Vec<_>>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Some(Component { name, properties, components })
|
||||||
|
}
|
Loading…
Reference in a new issue