From acced66e8edfe427f264b38921bb4200168301e2 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 14 May 2022 01:50:55 +0100 Subject: [PATCH] Provide toml_quote_string Signed-off-by: Ian Jackson --- src/utils.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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, -- 2.30.2