X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Fstring.rs;h=ab12486a0d8ebfbac985dd3289b8e6dbeb23f3f2;hb=3a9fe209e104e048921ad50be77a80b18a98b45c;hp=42eb96f5bf6076b471f0d72fc0ef66e4f4d0bafa;hpb=384c4dc7753e4b7ac53ea380e52809babd8f0f9b;p=rust-lightning diff --git a/lightning/src/util/string.rs b/lightning/src/util/string.rs index 42eb96f5..ab12486a 100644 --- a/lightning/src/util/string.rs +++ b/lightning/src/util/string.rs @@ -10,6 +10,35 @@ //! Utilities for strings. use core::fmt; +use crate::io::{self, Read}; +use crate::ln::msgs; +use crate::util::ser::{Writeable, Writer, Readable}; + +#[allow(unused_imports)] +use crate::prelude::*; + +/// 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`].