diff options
Diffstat (limited to 'tvix/serde/examples/cfg-demo.rs')
-rw-r--r-- | tvix/serde/examples/cfg-demo.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tvix/serde/examples/cfg-demo.rs b/tvix/serde/examples/cfg-demo.rs new file mode 100644 index 000000000000..8d31c9fb0450 --- /dev/null +++ b/tvix/serde/examples/cfg-demo.rs @@ -0,0 +1,34 @@ +//! This program demonstrates how to use tvix_serde to deserialise +//! program configuration (or other data) from Nix code. +//! +//! This makes it possible to use Nix as an embedded config language. +//! For greater control over evaluation, and for features like adding +//! additional builtins, depending directly on tvix_eval would be +//! required. +use serde::Deserialize; +use std::collections::HashMap; + +#[derive(Debug, Deserialize)] +enum Flavour { + Tasty, + Okay, + Eww, +} + +#[derive(Debug, Deserialize)] +struct Data { + name: String, + foods: HashMap<String, Flavour>, +} + +fn main() { + // Get the content from wherever, read it from a file, receive it + // over the network - whatever floats your boat! We'll include it + // as a string. + let code = include_str!("foods.nix"); + + // Now you can use tvix_serde to deserialise the struct: + let foods: Data = tvix_serde::from_str(code).expect("deserialisation should succeed"); + + println!("These are the foods:\n{:#?}", foods); +} |