use alloc::{borrow::Cow, vec::Vec};
use crate::{
prop::adr::ADR,
tree::{
codec::VcardCodec, line::VcardLine, param::lens::VcardParamLens, prop::lens::VcardPropLens,
},
value::adr::VcardAdr,
};
impl VcardPropLens for ADR {
type Target<'v> = VcardAdr<'v>;
type Cursor<'c, 'a>
= VcardAdrCursor<'c, 'a>
where
'a: 'c;
fn cursor<'c, 'a>(line: &'c mut VcardLine<'a>) -> VcardAdrCursor<'c, 'a> {
VcardAdrCursor { line }
}
}
pub struct VcardAdrCursor<'c, 'a> {
pub line: &'c mut VcardLine<'a>,
}
impl VcardAdrCursor<'_, '_> {
pub fn get(&self) -> VcardAdr<'_> {
VcardAdr::decode(&self.line.value)
}
pub fn po_box(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(0)
}
pub fn set_po_box<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(0, values);
}
pub fn extended(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(1)
}
pub fn set_extended<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(1, values);
}
pub fn street(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(2)
}
pub fn set_street<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(2, values);
}
pub fn locality(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(3)
}
pub fn set_locality<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(3, values);
}
pub fn region(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(4)
}
pub fn set_region<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(4, values);
}
pub fn postal_code(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(5)
}
pub fn set_postal_code<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(5, values);
}
pub fn country(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(6)
}
pub fn set_country<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(6, values);
}
pub fn room(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(7)
}
pub fn set_room<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(7, values);
}
pub fn apartment(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(8)
}
pub fn set_apartment<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(8, values);
}
pub fn floor(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(9)
}
pub fn set_floor<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(9, values);
}
pub fn street_number(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(10)
}
pub fn set_street_number<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(10, values);
}
pub fn street_name(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(11)
}
pub fn set_street_name<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(11, values);
}
pub fn building(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(12)
}
pub fn set_building<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(12, values);
}
pub fn block(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(13)
}
pub fn set_block<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(13, values);
}
pub fn subdistrict(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(14)
}
pub fn set_subdistrict<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(14, values);
}
pub fn district(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(15)
}
pub fn set_district<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(15, values);
}
pub fn landmark(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(16)
}
pub fn set_landmark<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(16, values);
}
pub fn direction(&self) -> Vec<Cow<'_, str>> {
self.line.value.decode_component_list(17)
}
pub fn set_direction<S: AsRef<str>>(&mut self, values: &[S]) {
self.line.value.set_component(17, values);
}
pub fn param<P: VcardParamLens>(&self) -> Option<P::Target<'_>> {
self.line.param::<P>()
}
}