From 787cc14b64f805489688efcb523fac4fa3225468 Mon Sep 17 00:00:00 2001 From: iliana etaoin Date: Wed, 17 May 2023 09:46:17 -0700 Subject: [PATCH] Move the crate generator to cargo-progenitor (#476) Co-authored-by: Adam Leventhal --- Cargo.lock | 24 ++++++++++++------ Cargo.toml | 1 + README.md | 12 +++++++-- cargo-progenitor/Cargo.toml | 26 ++++++++++++++++++++ {progenitor => cargo-progenitor}/build.rs | 0 {progenitor => cargo-progenitor}/src/main.rs | 9 ++++++- progenitor/Cargo.toml | 12 +-------- 7 files changed, 63 insertions(+), 21 deletions(-) create mode 100644 cargo-progenitor/Cargo.toml rename {progenitor => cargo-progenitor}/build.rs (100%) rename {progenitor => cargo-progenitor}/src/main.rs (98%) diff --git a/Cargo.lock b/Cargo.lock index 007db59..07d7fa2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -200,6 +200,23 @@ dependencies = [ "url", ] +[[package]] +name = "cargo-progenitor" +version = "0.3.0" +dependencies = [ + "anyhow", + "built", + "clap", + "openapiv3", + "progenitor", + "progenitor-client", + "progenitor-impl", + "project-root", + "rustfmt-wrapper", + "serde_json", + "serde_yaml", +] + [[package]] name = "cc" version = "1.0.72" @@ -1271,26 +1288,19 @@ dependencies = [ name = "progenitor" version = "0.3.0" dependencies = [ - "anyhow", "base64", - "built", "chrono", - "clap", "futures", - "openapiv3", "percent-encoding", "progenitor-client", "progenitor-impl", "progenitor-macro", - "project-root", "rand", "regress", "reqwest", - "rustfmt-wrapper", "schemars", "serde", "serde_json", - "serde_yaml", "uuid", ] diff --git a/Cargo.toml b/Cargo.toml index 86711a7..2c02139 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = [ + "cargo-progenitor", "example-build", "example-macro", "example-wasm", diff --git a/README.md b/README.md index 84dfc88..4ee7284 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ however, the most manual way to use Progenitor. Usage: ``` -progenitor +cargo progenitor Options: -i INPUT OpenAPI definition document (JSON or YAML) @@ -161,7 +161,15 @@ Options: For example: -`cargo run --bin progenitor -- -i sample_openapi/keeper.json -o keeper -n keeper -v 0.1.0` +``` +cargo install cargo-progenitor +cargo progenitor -i sample_openapi/keeper.json -o keeper -n keeper -v 0.1.0 +``` + +... or within the repo: +``` +cargo run --bin cargo-progenitor -- progenitor -i sample_openapi/keeper.json -o keeper -n keeper -v 0.1.0 +``` This will produce a package in the specified directory. diff --git a/cargo-progenitor/Cargo.toml b/cargo-progenitor/Cargo.toml new file mode 100644 index 0000000..38b8051 --- /dev/null +++ b/cargo-progenitor/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "cargo-progenitor" +version = "0.3.0" +edition = "2021" +license = "MPL-2.0" +description = "A cargo command to generate a Rust client SDK from OpenAPI" +repository = "https://github.com/oxidecomputer/progenitor.git" +readme = "../README.md" +keywords = ["openapi", "openapiv3", "sdk", "generator"] +categories = ["api-bindings", "development-tools::cargo-plugins"] +build = "build.rs" + +[dependencies] +progenitor = { version = "0.3.0", path = "../progenitor" } +progenitor-client = { version = "0.3.0", path = "../progenitor-client" } +progenitor-impl = { version = "0.3.0", path = "../progenitor-impl" } +anyhow = "1.0" +clap = { version = "4.2.7", features = ["derive"] } +openapiv3 = "1.0.2" +rustfmt-wrapper = "0.2.0" +serde_json = "1.0" +serde_yaml = "0.9" + +[build-dependencies] +built = { version = "0.6", features = ["git2"] } +project-root = "0.2" diff --git a/progenitor/build.rs b/cargo-progenitor/build.rs similarity index 100% rename from progenitor/build.rs rename to cargo-progenitor/build.rs diff --git a/progenitor/src/main.rs b/cargo-progenitor/src/main.rs similarity index 98% rename from progenitor/src/main.rs rename to cargo-progenitor/src/main.rs index ce2083a..70dc949 100644 --- a/progenitor/src/main.rs +++ b/cargo-progenitor/src/main.rs @@ -23,6 +23,13 @@ fn release_is_unstable() -> bool { !built_info::PKG_VERSION_PRE.is_empty() || built_info::GIT_VERSION.is_some() } +#[derive(Parser)] +#[command(name = "cargo")] +#[command(bin_name = "cargo")] +enum CargoCli { + Progenitor(Args), +} + #[derive(Parser)] struct Args { /// OpenAPI definition document (JSON or YAML) @@ -111,7 +118,7 @@ where } fn main() -> Result<()> { - let args = Args::parse(); + let CargoCli::Progenitor(args) = CargoCli::parse(); let api = load_api(&args.input)?; let mut builder = Generator::new( diff --git a/progenitor/Cargo.toml b/progenitor/Cargo.toml index e6b6d1e..63a46db 100644 --- a/progenitor/Cargo.toml +++ b/progenitor/Cargo.toml @@ -8,23 +8,12 @@ repository = "https://github.com/oxidecomputer/progenitor.git" readme = "../README.md" keywords = ["openapi", "openapiv3", "sdk", "generator", "proc_macro"] categories = ["api-bindings", "compilers"] -build = "build.rs" [dependencies] progenitor-client = { version = "0.3.0", path = "../progenitor-client" } progenitor-impl = { version = "0.3.0", path = "../progenitor-impl" } progenitor-macro = { version = "0.3.0", path = "../progenitor-macro" } -anyhow = "1.0" -openapiv3 = "1.0.0" -rustfmt-wrapper = "0.2.0" -serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -serde_yaml = "0.9" -clap = { version = "4.2.7", features = ["derive"] } - -[build-dependencies] -built = { version = "0.6", features = ["git2"] } -project-root = "0.2" [dev-dependencies] base64 = "0.21" @@ -35,4 +24,5 @@ rand = "0.8" regress = "0.6.0" reqwest = { version = "0.11.17", features = ["json", "stream"] } schemars = { version = "0.8.12", features = ["uuid1"] } +serde = { version = "1.0", features = ["derive"] } uuid = { version = "1.3", features = ["serde", "v4"] }