use crate::{param::VcardParamKind, tree::param::node::VcardParamNode};
pub trait VcardParamLens {
const KIND: VcardParamKind;
type Target<'v>;
fn decode<'v>(param: &'v VcardParamNode<'_>) -> Self::Target<'v>;
fn encode(decoded: &Self::Target<'_>) -> VcardParamNode<'static>;
}
#[cfg(test)]
mod tests {
use alloc::{borrow::Cow, string::ToString, vec};
use crate::tree::param::{
language::LANGUAGE, lens::VcardParamLens, node::VcardParamNode, pid::PID,
};
#[test]
fn decodes_a_list_parameter_through_its_lens() {
let node = VcardParamNode::parse("PID=1,2");
assert_eq!(
PID::decode(&node),
vec![Cow::Borrowed("1"), Cow::Borrowed("2")],
);
}
#[test]
fn encodes_a_scalar_parameter_through_its_lens() {
let node = LANGUAGE::encode(&Cow::Borrowed("en"));
assert_eq!(node.to_string(), "LANGUAGE=en");
}
}