Строковое значение, прочитанное из файла toml, содержит дополнительные кавычки

Строковое значение, считанное из файла toml, содержит дополнительные кавычки:

  # Toml file
  string_key = "fdsafdsafdsfds"

Код:

let cfg_file_content = get_config_file_content();
let cfg_data: Value = toml::from_str(&cfg_file_content).expect("failed to parse toml");
cfg_data.as_table().unwrap();

//1
let val1 = cfg_data.get("string_key").unwrap();

// ====> \""fdsafdsafdsfds\""
// or String("fdsafdsafdsfds")



//2
let val = format!("value is: {}", val1);
println!("{:?}", val);

// ====> "value is: \"fdsafdsafdsfds\""

Как убрать эти дополнительные кавычки?

Ящик:

toml = "0.4.5"

person Community    schedule 06.01.2018    source источник


Ответы (1)


val1 – это перечисление Value toml, которое необходимо преобразовать это на ул:

let val = format!("value is: {}", val1.as_str().unwrap());

Но вы должны использовать контейнер serde, который сделает всю работу за вас.

Например:

extern crate toml;
#[macro_use]
extern crate serde_derive;

#[derive(Serialize, Deserialize, Debug)]
struct Foo {
    string_key: String,
}

fn main() {
    let foo: Foo = toml::from_str("string_key = \"fdsafdsafdsfds\"").unwrap();
    println!("{:?}", foo);

    // or
    use std::collections::BTreeMap;
    let foo: BTreeMap<String, String> = toml::from_str("string_key = \"fdsafdsafdsfds\"").unwrap();
    println!("{:?}", foo);
}
person Stargateur    schedule 06.01.2018
comment
вместо того, чтобы просто вызывать .as_str(), я должен использовать для этого ящик? - person ; 06.01.2018