use serde::Serialize;
use devicemapper::{Sectors, ThinDevId};
use crate::engine::types::{DevUuid, FilesystemUuid};
pub trait Recordable<T: Serialize> {
fn record(&self) -> T;
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct PoolSave {
pub name: String,
pub backstore: BackstoreSave,
pub flex_devs: FlexDevsSave,
pub thinpool_dev: ThinPoolDevSave,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct BackstoreSave {
pub data_tier: DataTierSave,
pub cap: CapSave,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_tier: Option<CacheTierSave>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct DataTierSave {
pub blockdev: BlockDevSave,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct BlockDevSave {
pub allocs: Vec<Vec<BaseDevSave>>,
pub devs: Vec<BaseBlockDevSave>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct BaseDevSave {
pub parent: DevUuid,
pub start: Sectors,
pub length: Sectors,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct BaseBlockDevSave {
pub uuid: DevUuid,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_info: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hardware_info: Option<String>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CapSave {
pub allocs: Vec<(Sectors, Sectors)>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CacheTierSave {
pub blockdev: BlockDevSave,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FlexDevsSave {
pub meta_dev: Vec<(Sectors, Sectors)>,
pub thin_meta_dev: Vec<(Sectors, Sectors)>,
pub thin_data_dev: Vec<(Sectors, Sectors)>,
pub thin_meta_dev_spare: Vec<(Sectors, Sectors)>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct ThinPoolDevSave {
pub data_block_size: Sectors,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FilesystemSave {
pub name: String,
pub uuid: FilesystemUuid,
pub thin_id: ThinDevId,
pub size: Sectors,
pub created: u64, }