datasources 0.1.5

Async datasource interfaces, middleware, registry, and test doubles
Documentation
pub struct ReplaceConverter {
    search: String,
    replacement: String,
}

impl ReplaceConverter {
    pub fn new(search: impl Into<String>, replacement: impl Into<String>) -> Self {
        Self {
            search: search.into(),
            replacement: replacement.into(),
        }
    }

    pub fn convert(&self, from: &str) -> String {
        from.replace(&self.search, &self.replacement)
    }

    pub fn reverse_convert(&self, to: String) -> String {
        to.replace(&self.replacement, &self.search)
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn replaces_literals() {
        assert_eq!(
            ReplaceConverter::new("_", " ").convert("Ada_Lovelace"),
            "Ada Lovelace"
        );
        assert_eq!(
            ReplaceConverter::new("_", " ").reverse_convert("Ada Lovelace".into()),
            "Ada_Lovelace"
        );
    }
}