use eyre::Result;
use crate::output::OutputFormat;
#[derive(Debug, clap::Subcommand)]
pub enum ComplianceCommand {
ScreenAddress {
#[arg(long)]
chain: String,
#[arg(long)]
address: String,
},
}
fn parse_chain(s: &str) -> Result<circle_compliance::models::screening::Chain> {
serde_json::from_str::<circle_compliance::models::screening::Chain>(&format!("\"{}\"", s))
.map_err(|e| eyre::eyre!("Unrecognised chain '{}': {e}", s))
}
pub(crate) async fn run(
cmd: ComplianceCommand,
api_key: &str,
base_url: &str,
output: OutputFormat,
) -> Result<()> {
let client = circle_compliance::ComplianceClient::with_base_url(api_key, base_url);
match cmd {
ComplianceCommand::ScreenAddress { chain, address } => {
use circle_compliance::models::screening::ScreenAddressRequest;
let req = ScreenAddressRequest {
idempotency_key: uuid::Uuid::new_v4().to_string(),
address,
chain: parse_chain(&chain)?,
};
let result = client.screen_address(&req).await.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
}
}