use super::*;
#[derive(Debug, Default, PartialEq, Eq, Clone)]
pub struct Venue {
pub(super) inner: InnerComponent,
}
impl Venue {
pub fn new() -> Self {
Default::default()
}
pub fn with_uid(uid: &str) -> Self {
Self::new().uid(uid).done()
}
pub fn done(&mut self) -> Self {
Venue {
inner: self.inner.done(),
}
}
pub fn street_address(&mut self, address: &str) -> &mut Self {
self.add_property("STREET-ADDRESS", address)
}
pub fn remove_street_address(&mut self) -> &mut Self {
self.remove_property("STREET-ADDRESS")
}
pub fn get_street_address(&self) -> Option<&str> {
self.property_value("STREET-ADDRESS")
}
pub fn extended_address(&mut self, address: &str) -> &mut Self {
self.add_property("EXTENDED-ADDRESS", address)
}
pub fn remove_extended_address(&mut self) -> &mut Self {
self.remove_property("EXTENDED-ADDRESS")
}
pub fn get_extended_address(&self) -> Option<&str> {
self.property_value("EXTENDED-ADDRESS")
}
pub fn locality(&mut self, locality: &str) -> &mut Self {
self.add_property("LOCALITY", locality)
}
pub fn remove_locality(&mut self) -> &mut Self {
self.remove_property("LOCALITY")
}
pub fn get_locality(&self) -> Option<&str> {
self.property_value("LOCALITY")
}
pub fn region(&mut self, region: &str) -> &mut Self {
self.add_property("REGION", region)
}
pub fn remove_region(&mut self) -> &mut Self {
self.remove_property("REGION")
}
pub fn get_region(&self) -> Option<&str> {
self.property_value("REGION")
}
pub fn country(&mut self, country: &str) -> &mut Self {
self.add_property("COUNTRY", country)
}
pub fn remove_country(&mut self) -> &mut Self {
self.remove_property("COUNTRY")
}
pub fn get_country(&self) -> Option<&str> {
self.property_value("COUNTRY")
}
pub fn postal_code(&mut self, postal_code: &str) -> &mut Self {
self.add_property("POSTAL-CODE", postal_code)
}
pub fn remove_postal_code(&mut self) -> &mut Self {
self.remove_property("POSTAL-CODE")
}
pub fn get_postal_code(&self) -> Option<&str> {
self.property_value("POSTAL-CODE")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn get_properties_unset() {
let venue = Venue::new();
assert_eq!(venue.get_street_address(), None);
assert_eq!(venue.get_extended_address(), None);
assert_eq!(venue.get_locality(), None);
assert_eq!(venue.get_region(), None);
assert_eq!(venue.get_country(), None);
assert_eq!(venue.get_postal_code(), None);
}
#[test]
fn get_properties_set() {
let venue = Venue::new()
.street_address("street address")
.extended_address("extended address")
.locality("locality")
.region("region")
.country("country")
.postal_code("postal code")
.done();
assert_eq!(venue.get_street_address(), Some("street address"));
assert_eq!(venue.get_extended_address(), Some("extended address"));
assert_eq!(venue.get_locality(), Some("locality"));
assert_eq!(venue.get_region(), Some("region"));
assert_eq!(venue.get_country(), Some("country"));
assert_eq!(venue.get_postal_code(), Some("postal code"));
}
#[test]
fn get_properties_remove() {
let mut venue = Venue::new()
.street_address("street address")
.extended_address("extended address")
.locality("locality")
.region("region")
.country("country")
.postal_code("postal code")
.done();
assert_eq!(venue.get_street_address(), Some("street address"));
assert_eq!(venue.get_extended_address(), Some("extended address"));
assert_eq!(venue.get_locality(), Some("locality"));
assert_eq!(venue.get_region(), Some("region"));
assert_eq!(venue.get_country(), Some("country"));
assert_eq!(venue.get_postal_code(), Some("postal code"));
venue
.remove_street_address()
.remove_extended_address()
.remove_locality()
.remove_region()
.remove_country()
.remove_postal_code();
assert_eq!(venue.get_street_address(), None);
assert_eq!(venue.get_extended_address(), None);
assert_eq!(venue.get_locality(), None);
assert_eq!(venue.get_region(), None);
assert_eq!(venue.get_country(), None);
assert_eq!(venue.get_postal_code(), None);
}
}