proxmox-backup/src/bin/docgen.rs
2021-02-10 11:05:02 +01:00

69 lines
1.8 KiB
Rust

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<String>) {
let mut args = std::env::args();
let prefix = args.next().unwrap();
let prefix = prefix.rsplit('/').next().unwrap().to_string(); // without path
let args: Vec<String> = 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(())
}