use anyhow::{bail, Error}; use proxmox::api::{ format::*, section_config::*, }; use proxmox_backup::{ config, }; fn dump_section_config(config: &SectionConfig) -> String { let mut res = String::new(); let plugin_count = config.plugins().len(); for plugin in config.plugins().values() { let name = plugin.type_name(); let properties = plugin.properties(); let skip = match plugin.id_property() { Some(id) => vec![id], None => Vec::new(), }; if plugin_count > 1 { res.push_str(&format!("\n**Section type** \'``{}``\'\n\n", name)); } res.push_str(&dump_api_parameters(properties, "", ParameterDisplayStyle::Config, &skip)); } res } fn get_args() -> (String, Vec) { let mut args = std::env::args(); let prefix = args.next().unwrap(); let prefix = prefix.rsplit('/').next().unwrap().to_string(); // without path let args: Vec = args.collect(); (prefix, args) } fn main() -> Result<(), Error> { let (_prefix, args) = get_args(); if args.len() < 1 { bail!("missing arguments"); } for arg in args.iter() { match arg.as_ref() { "datastore.cfg" => println!("{}", dump_section_config(&config::datastore::CONFIG)), "tape.cfg" => println!("{}", dump_section_config(&config::drive::CONFIG)), "user.cfg" => println!("{}", dump_section_config(&config::user::CONFIG)), "remote.cfg" => println!("{}", dump_section_config(&config::remote::CONFIG)), "sync.cfg" => println!("{}", dump_section_config(&config::sync::CONFIG)), "media-pool.cfg" => println!("{}", dump_section_config(&config::media_pool::CONFIG)), _ => bail!("docgen: got unknown type"), } } Ok(()) }