Skip to main content

ical/tree/value/
datetime.rs

1//! # Date and time value codecs (RFC 5545 3.3.4, 3.3.5, 3.3.12)
2//!
3//! [`Codec`] for the DATE, DATE-TIME and TIME values, each kept as raw text.
4
5use alloc::vec;
6
7use crate::{
8    tree::{
9        codec::{
10            Codec,
11            encode::{encode_component, scalar_node},
12            mode::Escaper,
13        },
14        value::node::IcalValueNode,
15    },
16    value::datetime::{IcalDate, IcalDateTime, IcalDateTimeList, IcalTime},
17};
18
19impl<'v> Codec<'v> for IcalDate<'v> {
20    fn decode(node: &'v IcalValueNode<'_>) -> Self {
21        IcalDate(node.decode())
22    }
23
24    fn encode(&self, escaper: Escaper) -> IcalValueNode<'static> {
25        scalar_node(&self.0, escaper)
26    }
27}
28impl<'v> Codec<'v> for IcalDateTimeList<'v> {
29    fn decode(node: &'v IcalValueNode<'_>) -> Self {
30        IcalDateTimeList(node.decode_list())
31    }
32
33    fn encode(&self, escaper: Escaper) -> IcalValueNode<'static> {
34        IcalValueNode::from_components(vec![encode_component(&self.0, escaper)], escaper)
35    }
36}
37
38impl<'v> Codec<'v> for IcalDateTime<'v> {
39    fn decode(node: &'v IcalValueNode<'_>) -> Self {
40        IcalDateTime(node.decode())
41    }
42
43    fn encode(&self, escaper: Escaper) -> IcalValueNode<'static> {
44        scalar_node(&self.0, escaper)
45    }
46}
47impl<'v> Codec<'v> for IcalTime<'v> {
48    fn decode(node: &'v IcalValueNode<'_>) -> Self {
49        IcalTime(node.decode())
50    }
51
52    fn encode(&self, escaper: Escaper) -> IcalValueNode<'static> {
53        scalar_node(&self.0, escaper)
54    }
55}