Skip to main content

vcard/tree/value/
datetime.rs

1//! # Date-and-or-time value codec (RFC 6350 4.3)
2//!
3//! [`VcardCodec`] for a date-and-or-time value (4.3.4) and a timestamp (4.3.5),
4//! each a single scalar kept as its raw text.
5
6use crate::{
7    tree::{
8        codec::{VcardCodec, encode::scalar_node, mode::VcardEscaper},
9        value::node::VcardValueNode,
10    },
11    value::datetime::{VcardDateAndOrTime, VcardTimestamp},
12};
13
14impl<'v> VcardCodec<'v> for VcardDateAndOrTime<'v> {
15    fn decode(node: &'v VcardValueNode<'_>) -> Self {
16        VcardDateAndOrTime(node.decode_scalar_at(0))
17    }
18
19    fn encode(&self, escaper: VcardEscaper) -> VcardValueNode<'static> {
20        scalar_node(&self.0, escaper)
21    }
22}
23
24impl<'v> VcardCodec<'v> for VcardTimestamp<'v> {
25    fn decode(node: &'v VcardValueNode<'_>) -> Self {
26        VcardTimestamp(node.decode_scalar_at(0))
27    }
28
29    fn encode(&self, escaper: VcardEscaper) -> VcardValueNode<'static> {
30        scalar_node(&self.0, escaper)
31    }
32}