1use alloc::{borrow::Cow, string::ToString, vec};
7
8use crate::{
9 param::IcalParamKind,
10 tree::{
11 codec::{escape::escape_param, mode::Escaper, unescape::unescape_param},
12 leaf::IcalLeaf,
13 param::{lens::IcalParamLens, node::IcalParamNode},
14 },
15};
16
17#[allow(non_camel_case_types)]
19pub struct GAP;
20
21impl IcalParamLens for GAP {
22 const KIND: IcalParamKind = IcalParamKind::Gap;
23
24 type Target<'v> = Cow<'v, str>;
25
26 fn decode<'v>(param: &'v IcalParamNode<'_>) -> Cow<'v, str> {
27 param
28 .values
29 .first()
30 .map(|value| unescape_param(value.get(), param.escaper))
31 .unwrap_or_default()
32 }
33
34 fn encode(decoded: &Cow<'_, str>, escaper: Escaper) -> IcalParamNode<'static> {
35 IcalParamNode {
36 name: IcalLeaf::from(Self::KIND.to_string()),
37 values: vec![IcalLeaf::from(escape_param(decoded, escaper).into_owned())],
38 escaper,
39 }
40 }
41}