use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize)]
pub struct ValidateRequest {
#[serde(rename = "from")]
pub from: String,
pub to: String,
pub data: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(rename = "guardrailId", skip_serializing_if = "Option::is_none")]
pub guardrail_id: Option<String>,
#[serde(rename = "chainId", skip_serializing_if = "Option::is_none")]
pub chain_id: Option<u64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ValidationCheck {
pub name: String,
pub passed: bool,
pub details: String,
pub severity: Severity,
}
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum Severity {
Info,
Warning,
Critical,
}
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "UPPERCASE")]
pub enum ValidationResult {
Pass,
Fail,
Pending,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ValidateResponse {
#[serde(rename = "validationId")]
pub validation_id: String,
pub result: ValidationResult,
pub reason: String,
#[serde(rename = "evidenceUri")]
pub evidence_uri: String,
pub safe: bool,
#[serde(default)]
pub checks: Vec<ValidationCheck>,
#[serde(rename = "chainId")]
pub chain_id: u64,
#[serde(default)]
pub authenticated: bool,
#[serde(default)]
pub tier: String,
#[serde(default)]
pub backend: String,
#[serde(rename = "onChainRecorded", default)]
pub on_chain_recorded: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AgentStats {
#[serde(rename = "totalValidations")]
pub total_validations: u64,
#[serde(rename = "passedValidations")]
pub passed_validations: u64,
#[serde(rename = "failedValidations")]
pub failed_validations: u64,
#[serde(rename = "passRate")]
pub pass_rate: f64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AgentRegistration {
pub name: Option<String>,
#[serde(rename = "registeredAt")]
pub registered_at: String,
}
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum VerificationStatus {
Verified,
Registered,
Unverified,
Unknown,
}
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum TrustTier {
Diamond,
Gold,
Silver,
Bronze,
Unverified,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AgentCheckResponse {
pub wallet: String,
#[serde(rename = "isRegistered")]
pub is_registered: bool,
#[serde(rename = "verificationStatus")]
pub verification_status: VerificationStatus,
#[serde(rename = "verificationMessage")]
pub verification_message: String,
#[serde(rename = "trustScore")]
pub trust_score: u8,
pub tier: TrustTier,
#[serde(rename = "tierEmoji")]
pub tier_emoji: String,
#[serde(rename = "tierName")]
pub tier_name: String,
pub stats: AgentStats,
pub registration: Option<AgentRegistration>,
pub recommendation: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EvidenceTransaction {
#[serde(rename = "from")]
pub from: String,
pub to: String,
pub data: String,
pub value: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EvidenceResult {
pub status: ValidationResult,
pub reason: String,
pub safe: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EvidenceAgent {
pub wallet: String,
pub name: Option<String>,
pub verified: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EvidenceProof {
pub authenticated: bool,
#[serde(rename = "onChainRecorded")]
pub on_chain_recorded: bool,
#[serde(rename = "batchId")]
pub batch_id: Option<String>,
#[serde(rename = "recordedAt")]
pub recorded_at: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EvidenceResponse {
#[serde(rename = "validationId")]
pub validation_id: String,
pub timestamp: String,
#[serde(rename = "chainId")]
pub chain_id: u64,
pub transaction: EvidenceTransaction,
pub result: EvidenceResult,
#[serde(rename = "guardrailId")]
pub guardrail_id: Option<String>,
pub agent: EvidenceAgent,
pub proof: EvidenceProof,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageResponse {
pub wallet: String,
pub tier: String,
pub validations_used: u64,
pub validations_limit: u64,
pub daily_spent_wei: String,
}