ikki_config/
deserialize.rs1#![allow(dead_code)]
2
3use std::path::PathBuf;
4
5#[derive(Debug, Clone, knuffel::Decode)]
6pub struct KeyValue(
7 #[knuffel(argument)] pub String,
8 #[knuffel(argument)] pub String,
9);
10
11#[derive(Debug, Clone, knuffel::Decode)]
12pub struct Secret {
13 #[knuffel(property)]
14 pub id: String,
15 #[knuffel(property)]
16 pub src: PathBuf,
17}
18
19#[derive(Debug, Clone, knuffel::Decode)]
20pub struct Mount {
21 #[knuffel(property(name = "type"))]
22 pub mount_type: String,
23 #[knuffel(property)]
24 pub src: PathBuf,
25 #[knuffel(property)]
26 pub dest: PathBuf,
27}
28
29#[derive(Debug, Clone, knuffel::Decode)]
30pub struct Service {
31 #[knuffel(child, unwrap(arguments))]
32 pub ports: Option<Vec<String>>,
33 #[knuffel(children(name = "env"))]
34 pub env: Vec<KeyValue>,
35 #[knuffel(child, unwrap(argument))]
36 pub user: Option<String>,
37 #[knuffel(children(name = "mount"))]
38 pub mounts: Vec<Mount>,
39 #[knuffel(child, unwrap(arguments))]
40 pub networks: Option<Vec<String>>,
41}
42
43#[derive(Debug, knuffel::Decode)]
44pub struct BuildArg {
45 #[knuffel(arguments)]
46 pub values: Vec<String>,
47}
48
49#[derive(Debug, Clone, knuffel::Decode)]
50pub struct Image {
51 #[knuffel(property)]
52 pub path: Option<PathBuf>,
53 #[knuffel(property)]
54 pub file: Option<PathBuf>,
55 #[knuffel(property)]
56 pub output: Option<PathBuf>,
57 #[knuffel(property)]
58 pub pull: Option<String>,
59 #[knuffel(children(name = "build-arg"))]
60 pub build_args: Vec<KeyValue>,
61 #[knuffel(child)]
62 pub service: Option<Service>,
63 #[knuffel(child)]
64 pub secret: Option<Secret>,
65 #[knuffel(argument)]
66 pub name: String,
67}
68
69#[derive(Debug, knuffel::Decode)]
70pub struct Images {
71 #[knuffel(children(name = "image"))]
72 pub images: Vec<Image>,
73}
74
75#[derive(Debug, knuffel::Decode)]
76pub struct ImageConfig {
77 #[knuffel(child)]
78 pub images: Images,
79}
80
81impl ImageConfig {
82 pub fn image_names(&self) -> Vec<String> {
83 self.images
84 .images
85 .iter()
86 .map(|img| img.name.clone())
87 .collect()
88 }
89}
90
91pub fn parse_image_config(filename: &str, input: &str) -> Result<ImageConfig, knuffel::Error> {
92 knuffel::parse::<ImageConfig>(filename, input)
93}