Skip to main content

ical/tree/value/
geo.rs

1//! # GEO value codec (RFC 5545 3.8.1.6)
2//!
3//! [`Codec`] for the structured `GEO` value: a `latitude;longitude` pair of
4//! FLOATs, held as two `;`-separated components.
5
6use alloc::vec;
7
8use crate::{
9    tree::{
10        codec::{Codec, encode::encode_component, mode::Escaper},
11        value::IcalValueNode,
12    },
13    value::geo::IcalGeo,
14};
15
16impl<'v> Codec<'v> for IcalGeo<'v> {
17    fn decode(node: &'v IcalValueNode<'_>) -> Self {
18        IcalGeo {
19            latitude: node.decode_scalar_at(0),
20            longitude: node.decode_scalar_at(1),
21        }
22    }
23
24    fn encode(&self, escaper: Escaper) -> IcalValueNode<'static> {
25        IcalValueNode::from_components(
26            vec![
27                encode_component(&[self.latitude.as_ref()], escaper),
28                encode_component(&[self.longitude.as_ref()], escaper),
29            ],
30            escaper,
31        )
32    }
33}