use crate::{
tree::{codec::mode::Escaper, value::VcardValueNode},
value::{VcardUnknownValue, VcardValue},
};
pub mod decode;
pub mod encode;
pub mod escape;
pub mod mode;
pub mod unescape;
pub trait Codec<'v>: Sized {
fn decode(node: &'v VcardValueNode<'_>) -> Self;
fn encode(&self, escaper: Escaper) -> VcardValueNode<'static>;
}
impl<'v> Codec<'v> for VcardValue<'v> {
fn decode(node: &'v VcardValueNode<'_>) -> Self {
VcardValue::Unknown(VcardUnknownValue::decode(node))
}
fn encode(&self, escaper: Escaper) -> VcardValueNode<'static> {
match self {
VcardValue::Text(v) => v.encode(escaper),
VcardValue::TextList(v) => v.encode(escaper),
VcardValue::Uri(v) => v.encode(escaper),
VcardValue::DateAndOrTime(v) => v.encode(escaper),
VcardValue::Timestamp(v) => v.encode(escaper),
VcardValue::LanguageTag(v) => v.encode(escaper),
VcardValue::UtcOffset(v) => v.encode(escaper),
VcardValue::N(v) => v.encode(escaper),
VcardValue::Adr(v) => v.encode(escaper),
VcardValue::Binary(v) => v.encode(escaper),
VcardValue::Gender(v) => v.encode(escaper),
VcardValue::Geo(v) => v.encode(escaper),
VcardValue::Org(v) => v.encode(escaper),
VcardValue::ClientPidMap(v) => v.encode(escaper),
VcardValue::Unknown(v) => v.encode(escaper),
}
}
}