use crate::output::OutputFormat;
use camino::Utf8PathBuf;
use clap::{Args, Subcommand};
#[derive(Args)]
pub struct QueryArgs {
#[arg(long)]
pub repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
pub scope: String,
#[arg(long, value_parser = parse_freshness)]
pub freshness: Option<provenance_store::operations::read_policy::FreshnessPolicy>,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
pub format: OutputFormat,
}
#[derive(Subcommand)]
pub enum SdkCommand {
CheckStatement {
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
Info {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
Plan {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
scope: String,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
Apply {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
scope: String,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
BeginVerification {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
scope: String,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
CompleteVerification {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
scope: String,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
VerificationRuns {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
scope: String,
#[arg(long)]
rule: Option<String>,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
Get {
#[command(flatten)]
query: QueryArgs,
},
Search {
#[command(flatten)]
query: QueryArgs,
},
Neighbors {
#[command(flatten)]
query: QueryArgs,
},
Trace {
#[command(flatten)]
query: QueryArgs,
},
Impact {
#[command(flatten)]
query: QueryArgs,
},
Evidence {
#[command(flatten)]
query: QueryArgs,
},
Stale {
#[command(flatten)]
query: QueryArgs,
},
ResolveSymbol {
#[command(flatten)]
query: QueryArgs,
},
VerificationBindings {
#[arg(long)]
repo: Option<Utf8PathBuf>,
#[arg(long, default_value = "default")]
scope: String,
#[arg(long)]
rule: Option<String>,
#[arg(long, value_enum, default_value_t = OutputFormat::Json)]
format: OutputFormat,
},
}
fn parse_freshness(
value: &str,
) -> Result<provenance_store::operations::read_policy::FreshnessPolicy, String> {
serde_json::from_value(serde_json::Value::String(value.to_owned()))
.map_err(|_| "must be one of catch_up, annotate_only, refuse_stale".to_owned())
}