use crate::handle::handle::TaskHandle;
use crate::tasks::request::TaskRequest;
use crate::tasks::response::TaskResponse;
use crate::tasks::TemplateMode;
use std::sync::Arc;
use serde::Deserialize;
#[derive(Deserialize,Debug)]
#[serde(deny_unknown_fields)]
pub struct FileAttributesInput {
pub owner: Option<String>,
pub group: Option<String>,
pub mode: Option<String>
}
#[derive(Deserialize,Debug)]
#[serde(deny_unknown_fields)]
pub struct FileAttributesEvaluated {
pub owner: Option<String>,
pub group: Option<String>,
pub mode: Option<String>
}
#[derive(Deserialize,Debug,Copy,Clone,PartialEq)]
pub enum Recurse {
No,
Yes
}
impl FileAttributesInput {
pub fn is_octal_string(mode: &String) -> bool {
let octal_no_prefix = str::replace(&mode, "0o", "");
return match i32::from_str_radix(&octal_no_prefix, 8) {
Ok(_x) => true,
Err(_y) => false
}
}
pub fn template(handle: &TaskHandle, request: &Arc<TaskRequest>, tm: TemplateMode, input: &Option<Self>) -> Result<Option<FileAttributesEvaluated>,Arc<TaskResponse>> {
if tm == TemplateMode::Off {
return Ok(None);
}
if input.is_none() {
return Ok(None);
}
let input2 = input.as_ref().unwrap();
let final_mode_value : Option<String>;
if input2.mode.is_some() {
let mode_input = input2.mode.as_ref().unwrap();
let templated_mode_string = handle.template.string(request, tm, &String::from("mode"), &mode_input)?;
if ! templated_mode_string.starts_with("0o") {
return Err(handle.response.is_failed(request, &String::from(
format!("(a) field (mode) must have an octal-prefixed value of form 0o755, was {}", templated_mode_string)
)));
}
let octal_no_prefix = str::replace(&templated_mode_string, "0o", "");
let decimal_mode = i32::from_str_radix(&octal_no_prefix, 8);
match decimal_mode {
Ok(_x) => {
final_mode_value = Some(octal_no_prefix);
},
Err(_y) => {
return Err(handle.response.is_failed(request, &String::from(
format!("(b) field (mode) must have an octal-prefixed value of form 0o755, was {}", templated_mode_string)
)));
}
};
} else {
final_mode_value = None;
}
return Ok(Some(FileAttributesEvaluated {
owner: handle.template.string_option_no_spaces(request, tm, &String::from("owner"), &input2.owner)?,
group: handle.template.string_option_no_spaces(request, tm, &String::from("group"), &input2.group)?,
mode: final_mode_value,
}));
}
}
impl FileAttributesEvaluated {
}