X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Fstring.rs;h=6949c936e00e575ad8b4a848e61ee892a65b3eca;hb=e594021052e251659e33c0f5e82c7ec2b9e99c18;hp=1af04e085fd69318f7d4b24542cda63cd480203f;hpb=48bb9edba1cd4f6c876bb35f82b374f20502abfb;p=rust-lightning diff --git a/lightning/src/util/string.rs b/lightning/src/util/string.rs index 1af04e08..6949c936 100644 --- a/lightning/src/util/string.rs +++ b/lightning/src/util/string.rs @@ -9,10 +9,38 @@ //! 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`]. +#[derive(Debug, PartialEq)] pub struct PrintableString<'a>(pub &'a str); impl<'a> fmt::Display for PrintableString<'a> {