use crate::{
param::VcardParamKind,
prop::VcardPropKind,
tree::{
line::VcardLine,
prop::{lens::VcardPropLens, spec::VcardPropSpec},
value::cursor::VcardValueCursor,
},
value::{VcardValue, VcardValueKind},
version::VcardVersion,
};
pub struct GEO;
impl VcardPropLens for GEO {
type Target<'v> = VcardValue<'v>;
type Cursor<'c, 'a>
= VcardValueCursor<'c, 'a>
where
'a: 'c;
fn decode<'v>(line: &'v VcardLine<'_>, version: VcardVersion) -> VcardValue<'v> {
line.decode_value(VcardPropKind::Geo, version)
}
fn cursor<'c, 'a>(line: &'c mut VcardLine<'a>) -> VcardValueCursor<'c, 'a> {
VcardValueCursor { line }
}
}
impl VcardPropSpec for GEO {
const KIND: VcardPropKind = VcardPropKind::Geo;
fn allowed_values(version: VcardVersion) -> &'static [VcardValueKind] {
match version {
VcardVersion::V4_0 => &[VcardValueKind::Uri],
_ => &[VcardValueKind::Geo],
}
}
fn allowed_params(_version: VcardVersion) -> &'static [VcardParamKind] {
&[
VcardParamKind::Pid,
VcardParamKind::Pref,
VcardParamKind::Type,
VcardParamKind::MediaType,
VcardParamKind::AltId,
VcardParamKind::Value,
]
}
}