use clap::{Parser, Subcommand};
use fql_deserialize::{parse_fauna_response, parse_expr, to_fql_string};
use fql_serialize::serialize_fql;
#[derive(Parser)]
#[clap(author, version, about, long_about = None)]
#[clap(propagate_version = true)]
struct Cli {
#[clap(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
SerializeFql { fql: String },
ParseFaunaResponse { response: String },
ParseExpr { expr: String },
ToFqlString { json: String },
}
fn main() {
let cli = Cli::parse();
match &cli.command {
Commands::SerializeFql { fql } => {
println!(
"{}",
serialize_fql(fql.as_str()).unwrap_or_else(|err| err.to_string())
)
}
Commands::ParseFaunaResponse { response } => {
println!(
"{}",
parse_fauna_response(response.as_str()).unwrap_or_else(|err| err.to_string())
)
}
Commands::ParseExpr { expr } => {
println!(
"{}",
parse_expr(expr.as_str()).unwrap_or_else(|err| err.to_string())
)
}
Commands::ToFqlString { json } => {
println!(
"{}",
to_fql_string(json.as_str()).unwrap_or_else(|err| err.to_string())
)
}
}
}