diff --git a/Cargo.toml b/Cargo.toml index dc0a55c..f816088 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ endpoint-libs-requirement = ">=1.1.2" [dependencies] # Internal dependencies -endpoint-libs = "1.1.2" +endpoint-libs = { git = "https://github.com/pathscale/endpoint-libs.git", rev = "5824581c5f75d20a35ddcbad930c80de15af0342", version = "1.1.4" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eyre = "0.6" diff --git a/src/docs.rs b/src/docs.rs index 77a8e85..26e6426 100644 --- a/src/docs.rs +++ b/src/docs.rs @@ -1,14 +1,16 @@ -use crate::service::get_systemd_service; -use crate::Data; -use endpoint_libs::model::{Service, Type}; -use eyre::Context; -use itertools::Itertools; -use serde::{Deserialize, Serialize}; -use serde_json::json; use std::fs::{create_dir_all, File, OpenOptions}; use std::io::Write; use std::path::Path; +use endpoint_libs::model::{Field, Service, Type}; +use eyre::Context; +use serde::{Deserialize, Serialize}; +use serde_json::json; + +use crate::rust::ToRust; +use crate::service::get_systemd_service; +use crate::Data; + #[derive(Debug, Serialize, Deserialize)] struct Docs { services: Vec, @@ -42,28 +44,55 @@ pub fn gen_md_docs(data: &Data) -> eyre::Result<()> { writeln!( &mut docs_file, r#" -# {} Server -ID: {} -## Endpoints -|Method Code|Method Name|Parameters|Response|Description| -|-----------|-----------|----------|--------|-----------|"#, - s.name, s.id +# {name} Server ({id}) +## Endpoints"#, + name = s.name, + id = s.id )?; + for e in &s.endpoints { writeln!( &mut docs_file, - "|{}|{}|{}|{}|{}|", - e.code, - e.name, - e.parameters.iter().map(|x| x.name.to_string()).join(", "), - e.returns.iter().map(|x| x.name.to_string()).join(", "), - e.description + r#" +### {name} ({code}) + +{description}"#, + name = e.name, + code = e.code, + description = e.description )?; + + gen_fields_table(&mut docs_file, "Parameters", &e.parameters)?; + gen_fields_table(&mut docs_file, "Returns", &e.returns)?; } } Ok(()) } +fn gen_fields_table(docs_file: &mut File, header: &str, fields: &[Field]) -> eyre::Result<()> { + if fields.is_empty() { + return Ok(()); + } + + writeln!( + docs_file, + r#" +#### {header} + +|Name|Type|Description| +|----|----|-----------|"# + )?; + for field in fields { + writeln!( + docs_file, + "|{name}|`{type}``|{description}|", + name = field.name, description = field.description, + type = field.ty.to_rust_ref(true) )?; + } + + Ok(()) +} + pub fn gen_systemd_services(data: &Data, app_name: &str, user: &str) -> eyre::Result<()> { create_dir_all(data.project_root.join("etc").join("systemd"))?; diff --git a/src/rust.rs b/src/rust.rs index 4b62290..f85b85b 100644 --- a/src/rust.rs +++ b/src/rust.rs @@ -95,7 +95,7 @@ impl ToRust for Type { /// {} {} = {} "#, - x.comment, + x.description, if x.name.chars().last().unwrap().is_lowercase() { x.name.to_case(Case::Pascal) } else { @@ -233,10 +233,10 @@ pub fn gen_model_rs(data: &Data) -> eyre::Result<()> { .codes .into_iter() .map(|x| { - EnumVariant::new_with_comment( + EnumVariant::new_with_description( x.symbol.to_case(Case::Pascal), - x.code, format!("{} {}", x.source, x.message), + x.code, ) }) .collect(),