slice-string 0.7.0

A String backed by a slice
Documentation
use crate::SliceString;
use ufmt_write::uWrite;

impl uWrite for SliceString<'_> {
    type Error = ();

    fn write_str(&mut self, s: &str) -> Result<(), Self::Error> {
        if self.capacity() < self.len() + s.len() {
            return Err(());
        }

        self.push_str(s);
        Ok(())
    }
}

#[cfg(test)]
mod tests {
    use ufmt::{derive::uDebug, uwrite};

    use crate::SliceString;

    #[derive(uDebug)]
    struct Pair {
        x: u32,
        y: u32,
    }

    #[test]
    fn test_string() {
        let a = 123;
        let b = Pair { x: 0, y: 1234 };

        let mut buf = [0u8; 32];
        let mut s = SliceString::new(&mut buf[..]);
        uwrite!(s, "{} -> {:?}", a, b).unwrap();

        assert_eq!(s, "123 -> Pair { x: 0, y: 1234 }");
    }

    #[test]
    fn test_string_err() {
        let p = Pair { x: 0, y: 1234 };
        let mut buf = [0u8; 4];
        let mut s = SliceString::new(&mut buf[..]);
        assert!(uwrite!(s, "{:?}", p).is_err());
    }
}