use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq)]
pub struct LxcCreateVmRequest {
pub arch: Option<models::PveLxcArchEnum>,
pub bwlimit: Option<f64>,
pub cmode: Option<models::PveCmodeEnum>,
pub console: Option<models::PveBoolean>,
pub cores: Option<i32>,
pub cpulimit: Option<f64>,
pub cpuunits: Option<i32>,
pub debug: Option<models::PveBoolean>,
pub description: Option<String>,
pub entrypoint: Option<String>,
pub env: Option<String>,
pub features: Option<Box<models::PveFeaturesField>>,
pub force: Option<models::PveBoolean>,
pub ha_managed: Option<models::PveBoolean>,
pub hookscript: Option<String>,
pub hostname: Option<String>,
pub ignore_unpack_errors: Option<models::PveBoolean>,
pub lock: Option<models::PveLockEnum>,
pub memory: Option<i64>,
pub nameserver: Option<String>,
pub onboot: Option<models::PveBoolean>,
pub ostemplate: String,
pub ostype: Option<models::PveOstypeEnum>,
pub password: Option<String>,
pub pool: Option<String>,
pub protection: Option<models::PveBoolean>,
pub restore: Option<models::PveBoolean>,
pub rootfs: Option<Box<models::PveRootfsField>>,
pub searchdomain: Option<String>,
pub ssh_public_keys: Option<String>,
pub start: Option<models::PveBoolean>,
pub startup: Option<String>,
pub storage: Option<String>,
pub swap: Option<i64>,
pub tags: Option<String>,
pub template: Option<models::PveBoolean>,
pub timezone: Option<String>,
pub tty: Option<i32>,
pub unique: Option<models::PveBoolean>,
pub unprivileged: Option<models::PveBoolean>,
pub vmid: i32,
pub devs: Option<std::collections::HashMap<u32, models::PveDevField>>,
pub mps: Option<std::collections::HashMap<u32, models::PveMpField>>,
pub nets: Option<std::collections::HashMap<u32, models::PveNetField>>,
pub unuseds: Option<std::collections::HashMap<u32, models::PveUnusedField>>,
}
impl LxcCreateVmRequest {
pub fn new(ostemplate: String, vmid: i32) -> LxcCreateVmRequest {
LxcCreateVmRequest {
arch: None,
bwlimit: None,
cmode: None,
console: None,
cores: None,
cpulimit: None,
cpuunits: None,
debug: None,
description: None,
entrypoint: None,
env: None,
features: None,
force: None,
ha_managed: None,
hookscript: None,
hostname: None,
ignore_unpack_errors: None,
lock: None,
memory: None,
nameserver: None,
onboot: None,
ostemplate,
ostype: None,
password: None,
pool: None,
protection: None,
restore: None,
rootfs: None,
searchdomain: None,
ssh_public_keys: None,
start: None,
startup: None,
storage: None,
swap: None,
tags: None,
template: None,
timezone: None,
tty: None,
unique: None,
unprivileged: None,
vmid,
devs: None,
mps: None,
nets: None,
unuseds: None,
}
}
}
impl serde::Serialize for LxcCreateVmRequest {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::Error;
let mut map = serde_json::Map::new();
{
let _v = serde_json::to_value(&self.arch).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("arch".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.bwlimit).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("bwlimit".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.cmode).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("cmode".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.console).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("console".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.cores).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("cores".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.cpulimit).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("cpulimit".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.cpuunits).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("cpuunits".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.debug).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("debug".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.description).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("description".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.entrypoint).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("entrypoint".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.env).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("env".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.features).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("features".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.force).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("force".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.ha_managed).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("ha-managed".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.hookscript).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("hookscript".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.hostname).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("hostname".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.ignore_unpack_errors).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("ignore-unpack-errors".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.lock).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("lock".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.memory).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("memory".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.nameserver).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("nameserver".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.onboot).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("onboot".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.ostemplate).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("ostemplate".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.ostype).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("ostype".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.password).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("password".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.pool).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("pool".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.protection).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("protection".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.restore).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("restore".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.rootfs).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("rootfs".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.searchdomain).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("searchdomain".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.ssh_public_keys).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("ssh-public-keys".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.start).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("start".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.startup).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("startup".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.storage).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("storage".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.swap).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("swap".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.tags).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("tags".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.template).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("template".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.timezone).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("timezone".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.tty).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("tty".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.unique).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("unique".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.unprivileged).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("unprivileged".to_string(), _v);
}
}
{
let _v = serde_json::to_value(&self.vmid).map_err(Error::custom)?;
if !_v.is_null() {
map.insert("vmid".to_string(), _v);
}
}
if let Some(ref _m) = self.devs {
for (_idx, _val) in _m.iter() {
map.insert(format!("dev{}", _idx), serde_json::to_value(_val).map_err(Error::custom)?);
}
}
if let Some(ref _m) = self.mps {
for (_idx, _val) in _m.iter() {
map.insert(format!("mp{}", _idx), serde_json::to_value(_val).map_err(Error::custom)?);
}
}
if let Some(ref _m) = self.nets {
for (_idx, _val) in _m.iter() {
map.insert(format!("net{}", _idx), serde_json::to_value(_val).map_err(Error::custom)?);
}
}
if let Some(ref _m) = self.unuseds {
for (_idx, _val) in _m.iter() {
map.insert(format!("unused{}", _idx), serde_json::to_value(_val).map_err(Error::custom)?);
}
}
serde_json::Value::Object(map).serialize(serializer)
}
}
impl<'de> serde::Deserialize<'de> for LxcCreateVmRequest {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
use serde::de::Error;
let mut raw: serde_json::Map<String, serde_json::Value> =
serde::Deserialize::deserialize(deserializer)?;
let mut __devs: std::collections::HashMap<u32, models::PveDevField> = std::collections::HashMap::new();
{
let _prefix = "dev";
let _keys: Vec<String> = raw.keys()
.filter(|k| {
if let Some(_suffix) = k.strip_prefix(_prefix) {
!_suffix.is_empty() && _suffix.chars().all(|c| c.is_ascii_digit())
} else {
false
}
})
.cloned()
.collect();
for _key in _keys {
let _suffix = _key.strip_prefix(_prefix).unwrap();
let _idx: u32 = _suffix.parse().map_err(Error::custom)?;
let _value = raw.remove(&_key).unwrap();
let _item: models::PveDevField = serde_json::from_value(_value).map_err(Error::custom)?;
__devs.insert(_idx, _item);
}
}
let mut __mps: std::collections::HashMap<u32, models::PveMpField> = std::collections::HashMap::new();
{
let _prefix = "mp";
let _keys: Vec<String> = raw.keys()
.filter(|k| {
if let Some(_suffix) = k.strip_prefix(_prefix) {
!_suffix.is_empty() && _suffix.chars().all(|c| c.is_ascii_digit())
} else {
false
}
})
.cloned()
.collect();
for _key in _keys {
let _suffix = _key.strip_prefix(_prefix).unwrap();
let _idx: u32 = _suffix.parse().map_err(Error::custom)?;
let _value = raw.remove(&_key).unwrap();
let _item: models::PveMpField = serde_json::from_value(_value).map_err(Error::custom)?;
__mps.insert(_idx, _item);
}
}
let mut __nets: std::collections::HashMap<u32, models::PveNetField> = std::collections::HashMap::new();
{
let _prefix = "net";
let _keys: Vec<String> = raw.keys()
.filter(|k| {
if let Some(_suffix) = k.strip_prefix(_prefix) {
!_suffix.is_empty() && _suffix.chars().all(|c| c.is_ascii_digit())
} else {
false
}
})
.cloned()
.collect();
for _key in _keys {
let _suffix = _key.strip_prefix(_prefix).unwrap();
let _idx: u32 = _suffix.parse().map_err(Error::custom)?;
let _value = raw.remove(&_key).unwrap();
let _item: models::PveNetField = serde_json::from_value(_value).map_err(Error::custom)?;
__nets.insert(_idx, _item);
}
}
let mut __unuseds: std::collections::HashMap<u32, models::PveUnusedField> = std::collections::HashMap::new();
{
let _prefix = "unused";
let _keys: Vec<String> = raw.keys()
.filter(|k| {
if let Some(_suffix) = k.strip_prefix(_prefix) {
!_suffix.is_empty() && _suffix.chars().all(|c| c.is_ascii_digit())
} else {
false
}
})
.cloned()
.collect();
for _key in _keys {
let _suffix = _key.strip_prefix(_prefix).unwrap();
let _idx: u32 = _suffix.parse().map_err(Error::custom)?;
let _value = raw.remove(&_key).unwrap();
let _item: models::PveUnusedField = serde_json::from_value(_value).map_err(Error::custom)?;
__unuseds.insert(_idx, _item);
}
}
Ok(LxcCreateVmRequest {
arch: serde_json::from_value(raw.remove("arch").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
bwlimit: serde_json::from_value(raw.remove("bwlimit").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
cmode: serde_json::from_value(raw.remove("cmode").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
console: serde_json::from_value(raw.remove("console").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
cores: serde_json::from_value(raw.remove("cores").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
cpulimit: serde_json::from_value(raw.remove("cpulimit").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
cpuunits: serde_json::from_value(raw.remove("cpuunits").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
debug: serde_json::from_value(raw.remove("debug").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
description: serde_json::from_value(raw.remove("description").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
entrypoint: serde_json::from_value(raw.remove("entrypoint").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
env: serde_json::from_value(raw.remove("env").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
features: serde_json::from_value(raw.remove("features").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
force: serde_json::from_value(raw.remove("force").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
ha_managed: serde_json::from_value(raw.remove("ha-managed").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
hookscript: serde_json::from_value(raw.remove("hookscript").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
hostname: serde_json::from_value(raw.remove("hostname").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
ignore_unpack_errors: serde_json::from_value(raw.remove("ignore-unpack-errors").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
lock: serde_json::from_value(raw.remove("lock").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
memory: serde_json::from_value(raw.remove("memory").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
nameserver: serde_json::from_value(raw.remove("nameserver").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
onboot: serde_json::from_value(raw.remove("onboot").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
ostemplate: serde_json::from_value(raw.remove("ostemplate").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
ostype: serde_json::from_value(raw.remove("ostype").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
password: serde_json::from_value(raw.remove("password").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
pool: serde_json::from_value(raw.remove("pool").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
protection: serde_json::from_value(raw.remove("protection").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
restore: serde_json::from_value(raw.remove("restore").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
rootfs: serde_json::from_value(raw.remove("rootfs").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
searchdomain: serde_json::from_value(raw.remove("searchdomain").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
ssh_public_keys: serde_json::from_value(raw.remove("ssh-public-keys").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
start: serde_json::from_value(raw.remove("start").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
startup: serde_json::from_value(raw.remove("startup").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
storage: serde_json::from_value(raw.remove("storage").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
swap: serde_json::from_value(raw.remove("swap").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
tags: serde_json::from_value(raw.remove("tags").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
template: serde_json::from_value(raw.remove("template").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
timezone: serde_json::from_value(raw.remove("timezone").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
tty: serde_json::from_value(raw.remove("tty").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
unique: serde_json::from_value(raw.remove("unique").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
unprivileged: serde_json::from_value(raw.remove("unprivileged").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
vmid: serde_json::from_value(raw.remove("vmid").unwrap_or(serde_json::Value::Null)).map_err(Error::custom)?,
devs: if __devs.is_empty() { None } else { Some(__devs) },
mps: if __mps.is_empty() { None } else { Some(__mps) },
nets: if __nets.is_empty() { None } else { Some(__nets) },
unuseds: if __unuseds.is_empty() { None } else { Some(__unuseds) },
})
}
}