archive
/
md-pdf-rs
Archived
1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
md-pdf-rs/src/config/validate_types.rs

62 lines
1.7 KiB
Rust

use config::validate::{unwrap_group, ValidationResult};
use serde_yaml::Value;
fn check_root(config: Value) -> ValidationResult {
if !config.is_mapping() {
return Err("Config should be a mapping".into());
}
return Ok(());
}
fn check_input(config: Value) -> ValidationResult {
let input = config.get("input").unwrap();
if !input.is_sequence() {
return Err("Input must be sequence".into());
}
if input.as_sequence().into_iter().count() == 0 {
return Err("Must provide input files".into());
}
for input_file in input.as_sequence().unwrap() {
if !input_file.is_string() {
return Err("Input must be string".into());
}
}
return Ok(());
}
fn check_output(config: Value) -> ValidationResult {
let output = config.get("output").unwrap();
if !output.is_mapping() {
return Err("Output must be mapping".into());
}
if output.as_mapping().into_iter().count() == 0 {
return Err("Must provide output files".into());
}
for output_def in output.as_mapping().unwrap() {
if !output_def.0.is_string() {
return Err("Output keys must be strings".into());
}
if !output_def.1.is_string() {
return Err("Output values must be strings".into());
}
}
return Ok(());
}
fn check_title(config: Value) -> ValidationResult {
if !config.get("title").unwrap().is_string() {
return Err("Title should be a string".into());
}
return Ok(());
}
pub fn check_config_types(config: Value) -> ValidationResult {
return unwrap_group(config, vec![&check_root, &check_input, &check_output, &check_title]);
}