Skip to content

Commit 50dcc41

Browse files
committed
adding targets
1 parent 2007731 commit 50dcc41

3 files changed

Lines changed: 42 additions & 4 deletions

File tree

rust/massql-cli/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ massql-engine = { path = "../massql-engine" }
1616
massql-translator = { path = "../massql-translator" }
1717
clap = { version = "4", features = ["derive"] }
1818
ryu = "1"
19+
serde = { version = "1", features = ["derive"] }
20+
serde_yaml = "0.9"
1921

2022
[dev-dependencies]
2123
serde_json = "1"

rust/massql-cli/src/main.rs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,14 @@ struct Args {
2424
/// Input mass-spec file (mzML currently; others TBD)
2525
filename: PathBuf,
2626

27-
/// MassQL query
28-
query: String,
27+
/// MassQL query (required unless `--query-yaml` is given).
28+
query: Option<String>,
29+
30+
/// Read the MassQL query from the `query:` field of a YAML file
31+
/// instead of the positional argument. Mutually exclusive with
32+
/// the positional `<QUERY>`.
33+
#[arg(long, conflicts_with = "query")]
34+
query_yaml: Option<PathBuf>,
2935

3036
/// Output TSV file (.tsv) or CSV (.csv) path. `.tsv` uses tab
3137
/// separator, otherwise comma.
@@ -56,11 +62,41 @@ struct Args {
5662
translate: bool,
5763
}
5864

65+
/// Narrow shape of what we pull out of the YAML file — we only care
66+
/// about the `query` key, but we allow unknown siblings so callers
67+
/// can pile whatever else they want in the file alongside it.
68+
#[derive(serde::Deserialize)]
69+
struct QueryYaml {
70+
query: String,
71+
}
72+
73+
fn resolve_query(args: &Args) -> Result<String, String> {
74+
if let Some(q) = &args.query {
75+
return Ok(q.clone());
76+
}
77+
if let Some(path) = &args.query_yaml {
78+
let text = std::fs::read_to_string(path)
79+
.map_err(|e| format!("read {}: {}", path.display(), e))?;
80+
let parsed: QueryYaml = serde_yaml::from_str(&text)
81+
.map_err(|e| format!("parse {} as YAML: {}", path.display(), e))?;
82+
return Ok(parsed.query);
83+
}
84+
Err("missing query: pass <QUERY> positionally or --query-yaml PATH".into())
85+
}
86+
5987
fn main() -> ExitCode {
6088
let args = Args::parse();
6189

90+
let query = match resolve_query(&args) {
91+
Ok(q) => q,
92+
Err(e) => {
93+
eprintln!("{}", e);
94+
return ExitCode::from(2);
95+
}
96+
};
97+
6298
if args.translate {
63-
match massql_translator::translate_query(&args.query, massql_translator::Lang::English) {
99+
match massql_translator::translate_query(&query, massql_translator::Lang::English) {
64100
Ok(s) => {
65101
println!("{}", s);
66102
return ExitCode::SUCCESS;
@@ -80,7 +116,7 @@ fn main() -> ExitCode {
80116
}
81117
};
82118

83-
let result = match process_query(&args.query, &dataset) {
119+
let result = match process_query(&query, &dataset) {
84120
Ok(r) => r,
85121
Err(e) => {
86122
eprintln!("query error: {}", e);

rust/target/release/massql

161 KB
Binary file not shown.

0 commit comments

Comments
 (0)