src/cli/command.rs: move doc generator code to src/api_schema/format.rs
This commit is contained in:
parent
ef39bf95b3
commit
339ddfcbfa
@ -20,7 +20,7 @@ use crate::server::WorkerTask;
|
||||
|
||||
mod pxar;
|
||||
mod upload;
|
||||
mod backup;
|
||||
pub mod backup;
|
||||
|
||||
fn group_backups(backup_list: Vec<BackupInfo>) -> HashMap<String, Vec<BackupInfo>> {
|
||||
|
||||
|
@ -147,7 +147,7 @@ fn upgrade_to_backup_protocol(
|
||||
Ok(Box::new(futures::future::ok(response)))
|
||||
}
|
||||
|
||||
fn backup_api() -> Router {
|
||||
pub fn backup_api() -> Router {
|
||||
|
||||
let router = Router::new()
|
||||
.subdir(
|
||||
|
@ -17,3 +17,4 @@ pub mod registry;
|
||||
#[macro_use]
|
||||
pub mod router;
|
||||
pub mod config;
|
||||
pub mod format;
|
||||
|
113
src/api_schema/format.rs
Normal file
113
src/api_schema/format.rs
Normal file
@ -0,0 +1,113 @@
|
||||
use crate::api_schema::*;
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum ParameterDisplayStyle {
|
||||
Config,
|
||||
//SonfigSub,
|
||||
Arg,
|
||||
Fixed,
|
||||
}
|
||||
|
||||
/// CLI usage information format
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
pub enum DocumentationFormat {
|
||||
/// text, command line only (one line)
|
||||
Short,
|
||||
/// text, list all options
|
||||
Long,
|
||||
/// text, include description
|
||||
Full,
|
||||
/// like full, but in reStructuredText format
|
||||
ReST,
|
||||
}
|
||||
|
||||
pub fn get_schema_type_text(schema: &Schema, _style: ParameterDisplayStyle) -> String {
|
||||
|
||||
let type_text = match schema {
|
||||
Schema::Null => String::from("<null>"), // should not happen
|
||||
Schema::String(_) => String::from("<string>"),
|
||||
Schema::Boolean(_) => String::from("<boolean>"),
|
||||
Schema::Integer(integer_schema) => {
|
||||
match (integer_schema.minimum, integer_schema.maximum) {
|
||||
(Some(min), Some(max)) => format!("<integer> ({} - {})", min, max),
|
||||
(Some(min), None) => format!("<integer> ({} - N)", min),
|
||||
(None, Some(max)) => format!("<integer> (-N - {})", max),
|
||||
_ => String::from("<integer>"),
|
||||
}
|
||||
},
|
||||
Schema::Object(_) => String::from("<object>"),
|
||||
Schema::Array(_) => String::from("<array>"),
|
||||
};
|
||||
|
||||
type_text
|
||||
}
|
||||
|
||||
pub fn get_property_description(
|
||||
name: &str,
|
||||
schema: &Schema,
|
||||
style: ParameterDisplayStyle,
|
||||
format: DocumentationFormat,
|
||||
) -> String {
|
||||
|
||||
let type_text = get_schema_type_text(schema, style);
|
||||
|
||||
let (descr, default) = match schema {
|
||||
Schema::Null => ("null", None),
|
||||
Schema::String(ref schema) => (schema.description, schema.default.map(|v| v.to_owned())),
|
||||
Schema::Boolean(ref schema) => (schema.description, schema.default.map(|v| v.to_string())),
|
||||
Schema::Integer(ref schema) => (schema.description, schema.default.map(|v| v.to_string())),
|
||||
Schema::Object(ref schema) => (schema.description, None),
|
||||
Schema::Array(ref schema) => (schema.description, None),
|
||||
};
|
||||
|
||||
let default_text = match default {
|
||||
Some(text) => format!(" (default={})", text),
|
||||
None => String::new(),
|
||||
};
|
||||
|
||||
if format == DocumentationFormat::ReST {
|
||||
|
||||
let mut text = match style {
|
||||
ParameterDisplayStyle::Config => {
|
||||
format!(":``{} {}{}``: ", name, type_text, default_text)
|
||||
}
|
||||
ParameterDisplayStyle::Arg => {
|
||||
format!(":``--{} {}{}``: ", name, type_text, default_text)
|
||||
}
|
||||
ParameterDisplayStyle::Fixed => {
|
||||
format!(":``<{}> {}{}``: ", name, type_text, default_text)
|
||||
}
|
||||
};
|
||||
|
||||
text.push_str(descr);
|
||||
text.push('\n');
|
||||
text.push('\n');
|
||||
|
||||
text
|
||||
|
||||
} else {
|
||||
|
||||
let display_name = match style {
|
||||
ParameterDisplayStyle::Config => {
|
||||
format!("{}:", name)
|
||||
}
|
||||
ParameterDisplayStyle::Arg => {
|
||||
format!("--{}", name)
|
||||
}
|
||||
ParameterDisplayStyle::Fixed => {
|
||||
format!("<{}>", name)
|
||||
}
|
||||
};
|
||||
|
||||
// fixme: wrap text
|
||||
let mut text = format!(" {:-10} {}{}", display_name, type_text, default_text);
|
||||
let indent = " ";
|
||||
text.push('\n');
|
||||
text.push_str(indent);
|
||||
text.push_str(descr);
|
||||
text.push('\n');
|
||||
text.push('\n');
|
||||
|
||||
text
|
||||
}
|
||||
}
|
@ -4,116 +4,12 @@ use std::collections::HashSet;
|
||||
|
||||
use crate::api_schema::*;
|
||||
use crate::api_schema::router::*;
|
||||
use crate::api_schema::format::*;
|
||||
//use crate::api_schema::config::*;
|
||||
use super::environment::CliEnvironment;
|
||||
|
||||
use super::getopts;
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
enum ParameterDisplayStyle {
|
||||
//Config,
|
||||
//SonfigSub,
|
||||
Arg,
|
||||
Fixed,
|
||||
}
|
||||
|
||||
/// CLI usage information format
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
enum DocumentationFormat {
|
||||
/// text, command line only (one line)
|
||||
Short,
|
||||
/// text, list all options
|
||||
Long,
|
||||
/// text, include description
|
||||
Full,
|
||||
/// like full, but in reStructuredText format
|
||||
ReST,
|
||||
}
|
||||
|
||||
fn get_schema_type_text(schema: &Schema, _style: ParameterDisplayStyle) -> String {
|
||||
|
||||
let type_text = match schema {
|
||||
Schema::Null => String::from("<null>"), // should not happen
|
||||
Schema::String(_) => String::from("<string>"),
|
||||
Schema::Boolean(_) => String::from("<boolean>"),
|
||||
Schema::Integer(integer_schema) => {
|
||||
match (integer_schema.minimum, integer_schema.maximum) {
|
||||
(Some(min), Some(max)) => format!("<integer> ({} - {})", min, max),
|
||||
(Some(min), None) => format!("<integer> ({} - N)", min),
|
||||
(None, Some(max)) => format!("<integer> (-N - {})", max),
|
||||
_ => String::from("<integer>"),
|
||||
}
|
||||
},
|
||||
Schema::Object(_) => String::from("<object>"),
|
||||
Schema::Array(_) => String::from("<array>"),
|
||||
};
|
||||
|
||||
type_text
|
||||
}
|
||||
|
||||
fn get_property_description(
|
||||
name: &str,
|
||||
schema: &Schema,
|
||||
style: ParameterDisplayStyle,
|
||||
format: DocumentationFormat,
|
||||
) -> String {
|
||||
|
||||
let type_text = get_schema_type_text(schema, style);
|
||||
|
||||
let (descr, default) = match schema {
|
||||
Schema::Null => ("null", None),
|
||||
Schema::String(ref schema) => (schema.description, schema.default.map(|v| v.to_owned())),
|
||||
Schema::Boolean(ref schema) => (schema.description, schema.default.map(|v| v.to_string())),
|
||||
Schema::Integer(ref schema) => (schema.description, schema.default.map(|v| v.to_string())),
|
||||
Schema::Object(ref schema) => (schema.description, None),
|
||||
Schema::Array(ref schema) => (schema.description, None),
|
||||
};
|
||||
|
||||
let default_text = match default {
|
||||
Some(text) => format!(" (default={})", text),
|
||||
None => String::new(),
|
||||
};
|
||||
|
||||
if format == DocumentationFormat::ReST {
|
||||
|
||||
let mut text = match style {
|
||||
ParameterDisplayStyle::Arg => {
|
||||
format!(":``--{} {}{}``: ", name, type_text, default_text)
|
||||
}
|
||||
ParameterDisplayStyle::Fixed => {
|
||||
format!(":``<{}> {}{}``: ", name, type_text, default_text)
|
||||
}
|
||||
};
|
||||
|
||||
text.push_str(descr);
|
||||
text.push('\n');
|
||||
text.push('\n');
|
||||
|
||||
text
|
||||
|
||||
} else {
|
||||
|
||||
let display_name = match style {
|
||||
ParameterDisplayStyle::Arg => {
|
||||
format!("--{}", name)
|
||||
}
|
||||
ParameterDisplayStyle::Fixed => {
|
||||
format!("<{}>", name)
|
||||
}
|
||||
};
|
||||
|
||||
// fixme: wrap text
|
||||
let mut text = format!(" {:-10} {}{}", display_name, type_text, default_text);
|
||||
let indent = " ";
|
||||
text.push('\n');
|
||||
text.push_str(indent);
|
||||
text.push_str(descr);
|
||||
text.push('\n');
|
||||
text.push('\n');
|
||||
|
||||
text
|
||||
}
|
||||
}
|
||||
|
||||
fn generate_usage_str(
|
||||
prefix: &str,
|
||||
|
Loading…
Reference in New Issue
Block a user