Expand description
Rust library for using the Serde serialization framework with data in YAML file format. (This project is forked from serde-yaml and maintained by dbt Labs.)
§Examples
use std::collections::BTreeMap;
fn main() -> Result<(), dbt_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 yaml = dbt_yaml::to_string(&map)?;
assert_eq!(yaml, "x: 1.0\ny: 2.0\n");
// Deserialize it back to a Rust type.
let deserialized_map: BTreeMap<String, f64> = dbt_yaml::from_str(&yaml)?;
assert_eq!(map, deserialized_map);
Ok(())
}§Using Serde derive
It can also be used with Serde’s derive macros to handle structs and enums defined in your program.
Structs serialize in the obvious way:
use serde::{Serialize as _, Deserialize as _};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Point {
x: f64,
y: f64,
}
fn main() -> Result<(), dbt_yaml::Error> {
let point = Point { x: 1.0, y: 2.0 };
let yaml = dbt_yaml::to_string(&point)?;
assert_eq!(yaml, "x: 1.0\ny: 2.0\n");
let deserialized_point: Point = dbt_yaml::from_str(&yaml)?;
assert_eq!(point, deserialized_point);
Ok(())
}Enums serialize using YAML’s !tag syntax to identify the variant name.
use serde::{Serialize as _, Deserialize as _};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum Enum {
Unit,
Newtype(usize),
Tuple(usize, usize, usize),
Struct { x: f64, y: f64 },
}
fn main() -> Result<(), dbt_yaml::Error> {
let yaml = "
- !Newtype 1
- !Tuple [0, 0, 0]
- !Struct {x: 1.0, y: 2.0}
";
let values: Vec<Enum> = dbt_yaml::from_str(yaml).unwrap();
assert_eq!(values[0], Enum::Newtype(1));
assert_eq!(values[1], Enum::Tuple(0, 0, 0));
assert_eq!(values[2], Enum::Struct { x: 1.0, y: 2.0 });
// The last two in YAML's block style instead:
let yaml = "
- !Tuple
- 0
- 0
- 0
- !Struct
x: 1.0
y: 2.0
";
let values: Vec<Enum> = dbt_yaml::from_str(yaml).unwrap();
assert_eq!(values[0], Enum::Tuple(0, 0, 0));
assert_eq!(values[1], Enum::Struct { x: 1.0, y: 2.0 });
// Variants with no data can be written using !Tag or just the string name.
let yaml = "
- Unit # serialization produces this one
- !Unit
";
let values: Vec<Enum> = dbt_yaml::from_str(yaml).unwrap();
assert_eq!(values[0], Enum::Unit);
assert_eq!(values[1], Enum::Unit);
Ok(())
}Modules§
- __
private - Private API for internally tagged unit variant deserialization.
- mapping
- A YAML mapping and its iterator types.
- path
- Path to the current value in the input.
- spanned
- The
- value
- The Value enum, a loosely typed way of representing any valid YAML value.
- with
- Customizations to use with Serde’s
#[serde(with = …)]attribute.
Structs§
- Deserializer
- A structure that deserializes YAML into Rust values.
- Error
- An error that happened serializing or deserializing YAML data.
- Mapping
- A YAML mapping in which the keys and values are both
dbt_yaml::Value. - Marker
- A location in the source string.
- Number
- Represents a YAML number, whether integer or floating point.
- Serializer
- A structure for serializing Rust values into YAML.
- Span
- A source span.
- Spanned
- A wrapper type that can be used to capture the source location of a deserialized value.
- Verbatim
- A wrapper type that protects the inner value from being transformed by the
field_transformerwhen deserialized by theValue::into_typedmethod. - WhyNot
- An opaque type that captures the reason why a deserialization to a
ShouldBe<T>failed.
Enums§
- Path
- A structured representation of a path to the current value in the input,
like
dependencies.serde.typo1. - Should
Be - Represents a value that “should be” deserialized to type
T, or provides information about why it failed to. - Value
- Represents any valid YAML value.
Traits§
- Index
- A type that can be used to index into a
dbt_yaml::Value. See thegetandget_mutmethods ofValue.
Functions§
- from_
reader - Deserialize an instance of type
Tfrom an IO stream of YAML. - from_
slice - Deserialize an instance of type
Tfrom bytes of YAML text. - from_
str - Deserialize an instance of type
Tfrom a string of YAML text. - from_
value - Interpret a
dbt_yaml::Valueas an instance of typeT. - reset_
marker - Reset the source location marker.
- set_
marker - Set the current source location marker.
- to_
string - Serialize the given data structure as a String of YAML.
- to_
value - Convert a
Tintodbt_yaml::Valuewhich is an enum that can represent any valid YAML data. - to_
writer - Serialize the given data structure as YAML into the IO stream.
Type Aliases§
- Result
- Alias for a
Resultwith the error typedbt_yaml::Error. - Sequence
- A YAML sequence in which the elements are
dbt_yaml::Value.