From: Ian Jackson Date: Sat, 14 May 2022 00:50:55 +0000 (+0100) Subject: Provide toml_quote_string X-Git-Tag: otter-1.1.0~202 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=acced66e8edfe427f264b38921bb4200168301e2;p=otter.git Provide toml_quote_string Signed-off-by: Ian Jackson --- diff --git a/src/utils.rs b/src/utils.rs index 33da9663..d2b640bb 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -332,7 +332,30 @@ impl Result> // todo: DerefMut -//========== toml_merge ==================== +//========== toml ==================== + +// We reimplement this because the toml crate doesn't expose it, and +// looking at the github issues etc. for that crate isn't encuraging. +pub fn toml_quote_string(s: &str) -> String { + let mut o = String::new(); + for c in s.chars() { + match c { + '"' | '\\'=> { o.push('\\'); o.push(c); }, + c if (c < ' ' && c != '\t') || c == '\x7f' => { + write!(o, r#"\u{:04x}"#, c as u32).unwrap(); + continue; + } + c => o.push(c), + } + } + o +} + +#[test] +fn toml_quote_string_test(){ + assert_eq!(toml_quote_string(r#"w \ " ƒ."#), + r#"w \\ \" \u0007\u007fƒ."#); +} pub fn toml_merge<'u, S: 'u + AsRef,