use bytesize::ByteSize;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use super::Merge;
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema)]
pub struct CapabilityFileSystemV1 {
#[serde(default)]
pub volumes: Vec<FsVolumeConfig>,
}
impl Merge for CapabilityFileSystemV1 {
fn merge_extend(mut self, other: &Self) -> Self {
self.volumes.extend(other.volumes.clone());
self
}
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema)]
pub struct FsVolumeConfig {
pub name: String,
pub source: VolumeSourceV1,
pub mounts: Vec<VolumeMountV1>,
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum VolumeSourceV1 {
Shared(VolumeSourceShared),
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema)]
pub struct VolumeSourceShared {
pub id: Uuid,
#[schemars(with = "Option<String>")]
pub size: Option<ByteSize>,
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema)]
pub struct VolumeMountV1 {
pub mount_path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub sub_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permissions: Option<FsPermissionsV1>,
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema)]
pub struct FsPermissionsV1 {
#[serde(skip_serializing_if = "Option::is_none")]
pub read: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub delete: Option<bool>,
}