Skip to main content

vcard/tree/value/
text.rs

1//! # Text value codec (RFC 6350 4.1)
2//!
3//! [`VcardCodec`] for a single text value and a comma-separated text list.
4
5use alloc::vec;
6
7use crate::{
8    tree::{
9        codec::{
10            VcardCodec,
11            encode::{encode_component, scalar_node},
12            mode::VcardEscaper,
13        },
14        value::node::VcardValueNode,
15    },
16    value::text::{VcardText, VcardTextList},
17};
18
19impl<'v> VcardCodec<'v> for VcardText<'v> {
20    fn decode(node: &'v VcardValueNode<'_>) -> Self {
21        VcardText(node.decode_scalar_at(0))
22    }
23
24    fn encode(&self, escaper: VcardEscaper) -> VcardValueNode<'static> {
25        scalar_node(&self.0, escaper)
26    }
27}
28
29impl<'v> VcardCodec<'v> for VcardTextList<'v> {
30    fn decode(node: &'v VcardValueNode<'_>) -> Self {
31        VcardTextList(node.decode_at(0))
32    }
33
34    fn encode(&self, escaper: VcardEscaper) -> VcardValueNode<'static> {
35        VcardValueNode::from_components(vec![encode_component(&self.0, escaper)], escaper)
36    }
37}