62 lines
1.7 KiB
Rust
62 lines
1.7 KiB
Rust
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
pub struct Config {
|
|
pub layers: Vec<String>,
|
|
pub root_user: RootUser,
|
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
|
pub mounts: Vec<Mount>,
|
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
|
pub files: Vec<File>,
|
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
|
pub groups: Vec<Group>,
|
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
|
pub users: Vec<User>,
|
|
}
|
|
|
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
pub struct RootUser {
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub password_hash: Option<String>,
|
|
pub authorized_keys: Vec<String>,
|
|
}
|
|
|
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
pub struct Mount {
|
|
pub r#type: Option<String>,
|
|
pub dev: String,
|
|
pub path: String,
|
|
pub options: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
pub struct Group {
|
|
pub name: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub gid: Option<u32>,
|
|
}
|
|
|
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
pub struct User {
|
|
pub name: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub uid: Option<u32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub gid: Option<u32>,
|
|
}
|
|
|
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
pub struct File {
|
|
pub path: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub mode: Option<u32>,
|
|
#[serde(flatten)]
|
|
pub kind: FileKind,
|
|
}
|
|
|
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum FileKind {
|
|
Content(String),
|
|
Symlink(String),
|
|
Dir(bool),
|
|
}
|