pub mod decode;
pub mod encode;
pub mod escape;
pub mod mode;
pub mod unescape;
use crate::{
tree::{codec::mode::Escaper, value::node::IcalValueNode},
value::{IcalUnknownValue, IcalValue},
};
pub trait Codec<'v>: Sized {
fn decode(node: &'v IcalValueNode<'_>) -> Self;
fn encode(&self, escaper: Escaper) -> IcalValueNode<'static>;
}
impl<'v> Codec<'v> for IcalValue<'v> {
fn decode(node: &'v IcalValueNode<'_>) -> Self {
IcalValue::Unknown(IcalUnknownValue::decode(node))
}
fn encode(&self, escaper: Escaper) -> IcalValueNode<'static> {
match self {
IcalValue::Binary(v) => v.encode(escaper),
IcalValue::Boolean(v) => v.encode(escaper),
IcalValue::CalAddress(v) => v.encode(escaper),
IcalValue::Date(v) => v.encode(escaper),
IcalValue::DateTime(v) => v.encode(escaper),
IcalValue::DateTimeList(v) => v.encode(escaper),
IcalValue::Duration(v) => v.encode(escaper),
IcalValue::Float(v) => v.encode(escaper),
IcalValue::Geo(v) => v.encode(escaper),
IcalValue::Integer(v) => v.encode(escaper),
IcalValue::Period(v) => v.encode(escaper),
IcalValue::Recur(v) => v.encode(escaper),
IcalValue::RequestStatus(v) => v.encode(escaper),
IcalValue::Text(v) => v.encode(escaper),
IcalValue::TextList(v) => v.encode(escaper),
IcalValue::Time(v) => v.encode(escaper),
IcalValue::Uri(v) => v.encode(escaper),
IcalValue::UtcOffset(v) => v.encode(escaper),
IcalValue::Unknown(v) => v.encode(escaper),
}
}
}