vcard 0.4.11

A pure Rust implementation of vCard based on RFC 6350.
Documentation
use super::super::escaping::*;
use super::super::TEXT_RE;
use super::*;

use std::fmt::{self, Formatter};

validated_customized_regex_string!(pub Text, ref TEXT_RE);

validated_customized_regex_string!(pub Component, ref TEXT_RE);

impl Text {
    pub fn is_empty(&self) -> bool {
        self.as_str().is_empty()
    }
}

impl Value for Text {
    fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> {
        if self.is_empty() {
            return Ok(());
        }

        let c = escape_backslash(self.as_str());
        let c = escape_new_line(c.as_ref());
        let c = escape_tab(c.as_ref());
        let c = escape_comma(c.as_ref());

        f.write_str(c.as_ref())?;

        Ok(())
    }
}

impl Component {
    pub fn is_empty(&self) -> bool {
        self.as_str().is_empty()
    }
}

impl Value for Component {
    fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> {
        if self.is_empty() {
            return Ok(());
        }

        let c = escape_backslash(self.as_str());
        let c = escape_new_line(c.as_ref());
        let c = escape_tab(c.as_ref());
        let c = escape_comma(c.as_ref());
        let c = escape_semicolon(c.as_ref());

        f.write_str(c.as_ref())?;

        Ok(())
    }
}