#serde-yaml #yaml-parser #serde #golang #compatibility

serde_yaml_with_quirks

YAML support for Serde, fork with quirks support

2 releases

0.8.24 Jun 5, 2022
0.8.17 Mar 27, 2021

#708 in Encoding

Download history 1153/week @ 2024-07-20 553/week @ 2024-07-27 691/week @ 2024-08-03 686/week @ 2024-08-10 1144/week @ 2024-08-17 731/week @ 2024-08-24 751/week @ 2024-08-31 1339/week @ 2024-09-07 1013/week @ 2024-09-14 789/week @ 2024-09-21 1260/week @ 2024-09-28 848/week @ 2024-10-05 482/week @ 2024-10-12 521/week @ 2024-10-19 324/week @ 2024-10-26 388/week @ 2024-11-02

1,779 downloads per month

MIT/Apache

175KB
4K SLoC

Serde YAML (with quirks)

This fork of serde-yaml implements golang-compatible octal parsing quirk, this feature was not accepted in upstream, but is required in jrsonnet for golang implementation compatibility

See here: https://github.com/dtolnay/serde-yaml/pull/225

This crate is a Rust library for using the Serde serialization framework with data in YAML file format.

This library does not reimplement a YAML parser; it uses yaml-rust which is a pure Rust YAML 1.2 implementation.

Dependency

[dependencies]
serde = "1.0"
serde_yaml = "0.8"

Release notes are available under GitHub releases.

Using Serde YAML

API documentation is available in rustdoc form but the general idea is:

use std::collections::BTreeMap;

fn main() -> Result<(), serde_yaml::Error> {
    // You have some type.
    let mut map = BTreeMap::new();
    map.insert("x".to_string(), 1.0);
    map.insert("y".to_string(), 2.0);

    // Serialize it to a YAML string.
    let s = serde_yaml::to_string(&map)?;
    assert_eq!(s, "---\nx: 1.0\ny: 2.0\n");

    // Deserialize it back to a Rust type.
    let deserialized_map: BTreeMap<String, f64> = serde_yaml::from_str(&s)?;
    assert_eq!(map, deserialized_map);
    Ok(())
}

It can also be used with Serde's derive macros to handle structs and enums defined by your program.

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.8"
use serde::{Serialize, Deserialize};

#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Point {
    x: f64,
    y: f64,
}

fn main() -> Result<(), serde_yaml::Error> {
    let point = Point { x: 1.0, y: 2.0 };

    let s = serde_yaml::to_string(&point)?;
    assert_eq!(s, "---\nx: 1.0\ny: 2.0\n");

    let deserialized_point: Point = serde_yaml::from_str(&s)?;
    assert_eq!(point, deserialized_point);
    Ok(())
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.5MB
~30K SLoC