Skip to main content

gq_cli/args/
input_query.rs

1use std::io::{BufReader, Read};
2
3use clap::Args;
4use clio::Input;
5
6#[derive(Debug, Args)]
7#[group(required = false, multiple = false)]
8pub struct InputQuery {
9    /// Inline query
10    #[clap(value_parser, default_value = "{}")]
11    query: String,
12
13    /// Load query from file
14    #[clap(long = "file", short = 'f', value_parser)]
15    query_file: Option<Input>,
16}
17
18impl TryFrom<InputQuery> for String {
19    type Error = clio::Error;
20
21    fn try_from(input_query: InputQuery) -> Result<Self, Self::Error> {
22        match input_query.query_file {
23            None => Ok(input_query.query),
24            Some(query_file) => {
25                let mut buffer = BufReader::new(query_file);
26                let mut query = String::new();
27                buffer.read_to_string(&mut query)?;
28                Ok(query)
29            }
30        }
31    }
32}