From 1a0fde95fc2403041f9f477f4220618ee916853b Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Wed, 24 Apr 2024 20:10:19 +0200 Subject: args: Argument parser Still getting used to rust --- Cargo.lock | 122 ++++++++++++++++++++++++ Cargo.toml | 1 + src/args.rs | 305 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 68 +++++++++++++- 4 files changed, 494 insertions(+), 2 deletions(-) create mode 100644 src/args.rs diff --git a/Cargo.lock b/Cargo.lock index 17137b9..4fc0c50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,128 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derive_builder" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0350b5cb0331628a5916d6c5c0b72e97393b8b6b03b47a9284f4e7f5a405ffd7" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" +dependencies = [ + "derive_builder_core", + "syn", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rrjvm" version = "0.0.1" +dependencies = [ + "derive_builder", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "2.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" diff --git a/Cargo.toml b/Cargo.toml index a10f1c0..955b96e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,4 @@ description = "Red Rocket JVM" license = "MIT" [dependencies] +derive_builder = "0.20.0" diff --git a/src/args.rs b/src/args.rs new file mode 100644 index 0000000..3cd9d8a --- /dev/null +++ b/src/args.rs @@ -0,0 +1,305 @@ +use derive_builder::Builder; +use std::collections::HashMap; + +#[allow(dead_code)] +pub enum ValueRequirement { + None, + Required(&'static str), + Optional(&'static str), +} + +#[derive(Builder)] +#[builder(pattern = "owned")] +pub struct Option { + #[builder(setter(into), default = "'\\0'")] + short: char, + long: &'static str, + #[builder(setter(into), default = "\"\"")] + description: &'static str, + #[builder(setter(name = "value"), default = "ValueRequirement::None")] + value_req: ValueRequirement, + #[builder(setter(skip))] + is_set: bool, + #[builder(setter(skip))] + value: std::option::Option, +} + +pub struct Options { + options: Vec