Skip to main content

ical/tree/param/
label.rs

1//! # LABEL parameter lens
2//!
3//! The `LABEL` parameter lens: the human-readable label (RFC 7986 6.4).
4
5use alloc::{borrow::Cow, string::ToString, vec};
6
7use crate::{
8    param::IcalParamKind,
9    tree::{
10        codec::unescape::unescape,
11        leaf::IcalLeaf,
12        param::{IcalParamLens, IcalParamNode},
13    },
14};
15
16/// The `LABEL` parameter lens.
17#[allow(non_camel_case_types)]
18pub struct LABEL;
19
20impl IcalParamLens for LABEL {
21    const KIND: IcalParamKind = IcalParamKind::Label;
22
23    type Target<'v> = Cow<'v, str>;
24
25    fn decode<'v>(param: &'v IcalParamNode<'_>) -> Cow<'v, str> {
26        param
27            .values
28            .first()
29            .map(|value| unescape(value.get()))
30            .unwrap_or_default()
31    }
32
33    fn encode(decoded: &Cow<'_, str>) -> IcalParamNode<'static> {
34        IcalParamNode {
35            name: IcalLeaf::from(Self::KIND.to_string()),
36            values: vec![IcalLeaf::from(decoded.to_string())],
37        }
38    }
39}