about summary refs log tree commit diff
path: root/tvix/serde/examples/cfg-demo.rs
blob: 5774a81f775274f4de9518c221361c81cb56c09d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//! 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,
}

#[allow(dead_code)]
#[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);
}