X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Fstring.rs;h=6949c936e00e575ad8b4a848e61ee892a65b3eca;hb=bedc2c64fcfe5fa5f85ded630e9ed2eb3c3651eb;hp=42eb96f5bf6076b471f0d72fc0ef66e4f4d0bafa;hpb=8d8ee55463612dc5e1661657d7eb2b1a1e8271cc;p=rust-lightning diff --git a/lightning/src/util/string.rs b/lightning/src/util/string.rs index 42eb96f5..6949c936 100644 --- a/lightning/src/util/string.rs +++ b/lightning/src/util/string.rs @@ -9,7 +9,34 @@ //! Utilities for strings. +use alloc::string::String; use core::fmt; +use crate::io::{self, Read}; +use crate::ln::msgs; +use crate::util::ser::{Writeable, Writer, Readable}; + +/// Struct to `Display` fields in a safe way using `PrintableString` +#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Default)] +pub struct UntrustedString(pub String); + +impl Writeable for UntrustedString { + fn write(&self, w: &mut W) -> Result<(), io::Error> { + self.0.write(w) + } +} + +impl Readable for UntrustedString { + fn read(r: &mut R) -> Result { + let s: String = Readable::read(r)?; + Ok(Self(s)) + } +} + +impl fmt::Display for UntrustedString { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + PrintableString(&self.0).fmt(f) + } +} /// A string that displays only printable characters, replacing control characters with /// [`core::char::REPLACEMENT_CHARACTER`].