Как вы читаете файл YAML в Rust? - PullRequest
0 голосов
/ 11 ноября 2018

Я ткнул в ящики serde-yaml и yaml-rust , но я не видел ни одного примера.

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

YAML-файл - это обычный (текстовый) файл, как и любой другой, который вы можете прочитать, используя пример в документации Rust . В частности, используя File::open(filename) и делая .read_to_string() в результате первого.

yaml-rust и serde-yaml предназначены для разбора и загрузки файлов YAML, и поскольку ваш вопрос не означает, что вы хотите это сделать, а только хотите читать файл, нет необходимости использовать эти библиотеки.

0 голосов
/ 01 марта 2019

В этом примере используется ящик yaml_rust

use std::fs::File;
use std::io::prelude::*;
use yaml_rust::yaml::{Hash, Yaml};
use yaml_rust::YamlLoader;

fn main() {
    println!("Hello, Yaml");
    let file = "./etc/my_yaml_file.yaml";
    load_file(file);
}

fn load_file(file: &str) {
    let mut file = File::open(file).expect("Unable to open file");
    let mut contents = String::new();

    file.read_to_string(&mut contents)
        .expect("Unable to read file");

    let docs = YamlLoader::load_from_str(&contents).unwrap();

    // iterate / process doc[s] ..
}
0 голосов
/ 11 ноября 2018

Документация serde-yaml имеет следующие 4 функции:

  • from_reader - десериализация экземпляра типа T из потока ввода-вывода YAML.
  • from_slice - десериализация экземпляра типа T из байтов текста YAML.
  • from_str - десериализация экземпляра типа T из строки текста YAML.
  • from_value - интерпретировать serde_yaml::Value как экземпляр типа T.

Используя from_reader в качестве примера:

extern crate serde_yaml;

fn main() -> Result<(), Box<std::error::Error>> {
    let f = std::fs::File::open("something.yaml")?;
    let d: String = serde_yaml::from_reader(f)?;
    println!("Read YAML string: {}", d);
    Ok(())
}

Вы можете десериализовать в типизированный проигравший Value, если вы не знаете свой формат, но обязательно прочитайте руководство Serde для получения полной информации о том, как это сделать. типизированная сериализация и десериализация.

Смотри также:

В общем, использование любого формата Serde во многом аналогично всем остальным.

...