yes_parser 1.0.2

Your Extensible Script standard parser reads so you can write!
Documentation
use crate::{enums::Glyphs, utils::StringUtils};

pub struct KeyVal {
    pub key: Option<String>,
    pub val: String,
    key_contains_space: bool,
    value_contains_space: bool,
}

impl KeyVal {
    pub fn new(key: Option<String>, val: String) -> KeyVal {
        KeyVal {
            key_contains_space: match key {
                None => false,
                Some(ref k) => k.find(|x| x == Glyphs::Space.value() as char).is_some(),
            },
            value_contains_space: val.find(|x| x == Glyphs::Space.value() as char).is_some(),
            key,
            val,
        }
    }

    pub fn copy(other: &KeyVal) -> KeyVal {
        KeyVal::new(other.key.clone(), other.val.clone())
    }

    pub fn is_nameless(&self) -> bool {
        self.key == None
    }
}

impl ToString for KeyVal {
    fn to_string(&self) -> String {
        let v = match self.value_contains_space {
            true => {
                let mut clone = self.val.clone();
                clone.quote();
                clone
            }
            false => self.val.clone(),
        };

        if self.is_nameless() {
            return format!("{}", v);
        }

        let k = match self.key_contains_space {
            true => {
                let mut clone = self.key.clone().unwrap();
                clone.quote();
                clone
            }
            false => self.key.clone().unwrap(),
        };

        format!("{}={}", k, v)
    }
}