use crate::{
param::VcardParamKind,
prop::VcardPropKind,
tree::{
line::VcardLine,
prop::{cardinality::VcardPropCardinality, lens::VcardPropLens, spec::VcardPropSpec},
value::cursor::VcardValueCursor,
},
value::{VcardValueKind, language::VcardLanguageTag},
version::VcardVersion,
};
pub struct LANGUAGE;
impl VcardPropLens for LANGUAGE {
type Target<'v> = VcardLanguageTag<'v>;
type Cursor<'c, 'a>
= VcardValueCursor<'c, 'a>
where
'a: 'c;
fn cursor<'c, 'a>(line: &'c mut VcardLine<'a>) -> VcardValueCursor<'c, 'a> {
VcardValueCursor { line }
}
}
impl VcardPropSpec for LANGUAGE {
const KIND: VcardPropKind = VcardPropKind::Language;
fn allowed_versions() -> &'static [VcardVersion] {
&[VcardVersion::V4_0]
}
fn cardinality(_version: VcardVersion) -> VcardPropCardinality {
VcardPropCardinality::AtMostOne
}
fn allowed_values(_version: VcardVersion) -> &'static [VcardValueKind] {
&[VcardValueKind::LanguageTag]
}
fn allowed_params(_version: VcardVersion) -> &'static [VcardParamKind] {
&[VcardParamKind::Value]
}
}