Skip to content

Commit 3fc9d96

Browse files
committed
Do not use clap parser
1 parent 762b91c commit 3fc9d96

File tree

3 files changed

+35
-130
lines changed

3 files changed

+35
-130
lines changed

Cargo.lock

Lines changed: 0 additions & 121 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ async-trait = { workspace = true }
4242
bytemuck = { workspace = true }
4343

4444
anyhow = { workspace = true }
45-
clap = { version = "^4.5", features = ["derive"] }
4645
tracing-subscriber = { version = "^0.3", features = ["env-filter"] }
4746

4847
jvm = { workspace = true }

src/main.rs

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
use std::{
2+
env,
23
io::{self, stderr},
34
path::{Path, PathBuf},
45
};
56

6-
use clap::{ArgGroup, Parser};
7+
use anyhow::bail;
78

89
use rust_java::{StartType, run};
910

10-
#[derive(Parser)]
11-
#[clap(group = ArgGroup::new("target").required(true).multiple(false))]
1211
struct Opts {
13-
#[arg(group = "target", name = "mainclass")]
14-
main_class: Option<PathBuf>,
15-
#[arg(long, group = "target", name = "jarfile")]
1612
jar: Option<PathBuf>,
17-
13+
main_class: Option<PathBuf>,
1814
args: Vec<String>,
1915
}
2016

@@ -33,7 +29,7 @@ pub fn main() -> anyhow::Result<()> {
3329
}
3430

3531
pub async fn async_main() -> anyhow::Result<()> {
36-
let opts = Opts::parse();
32+
let opts = parse_args()?;
3733

3834
let start_type = if opts.main_class.is_some() {
3935
StartType::Class(opts.main_class.as_ref().unwrap())
@@ -45,3 +41,34 @@ pub async fn async_main() -> anyhow::Result<()> {
4541

4642
Ok(())
4743
}
44+
45+
fn parse_args() -> anyhow::Result<Opts> {
46+
let mut args = env::args().skip(1); // skip program name
47+
let mut jar = None;
48+
let mut main_class = None;
49+
let mut rest_args = Vec::new();
50+
51+
if let Some(first) = args.next() {
52+
if first == "-jar" {
53+
// java -jar foo.jar [args...]
54+
if let Some(jar_path) = args.next() {
55+
jar = Some(jar_path.into());
56+
rest_args.extend(args);
57+
} else {
58+
bail!("Missing jar file after -jar");
59+
}
60+
} else {
61+
// java MainClass [args...]
62+
main_class = Some(first.into());
63+
rest_args.extend(args);
64+
}
65+
} else {
66+
bail!("No class or -jar specified");
67+
}
68+
69+
Ok(Opts {
70+
jar,
71+
main_class,
72+
args: rest_args,
73+
})
74+
}

0 commit comments

Comments
 (0)