Skip to main content

vcard/tree/value/
n.rs

1//! # N value codec (RFC 6350 6.2.2)
2//!
3//! [`VcardCodec`] for the structured name: five `;`-separated components.
4
5use alloc::vec;
6
7use crate::{
8    tree::{
9        codec::{VcardCodec, encode::encode_component, mode::VcardEscaper},
10        value::node::VcardValueNode,
11    },
12    value::n::VcardN,
13};
14
15impl<'v> VcardCodec<'v> for VcardN<'v> {
16    fn decode(node: &'v VcardValueNode<'_>) -> Self {
17        VcardN {
18            family: node.decode_at(0),
19            given: node.decode_at(1),
20            additional: node.decode_at(2),
21            prefixes: node.decode_at(3),
22            suffixes: node.decode_at(4),
23        }
24    }
25
26    fn encode(&self, escaper: VcardEscaper) -> VcardValueNode<'static> {
27        VcardValueNode::from_components(
28            vec![
29                encode_component(&self.family, escaper),
30                encode_component(&self.given, escaper),
31                encode_component(&self.additional, escaper),
32                encode_component(&self.prefixes, escaper),
33                encode_component(&self.suffixes, escaper),
34            ],
35            escaper,
36        )
37    }
38}