mod chains;
mod forward_request;
mod project;
mod trustblock_contracts;
pub use chains::Chains;
pub use forward_request::ForwardRequest;
pub use trustblock_contracts::TrustblockForwarder;
pub use project::Project;
use clap::ValueEnum;
use ethers::abi::Address;
use ethers::types::Bytes;
use serde::{ Deserialize, Serialize };
use strum::EnumIter;
use validator::Validate;
use std::convert::From;
#[derive(Clone, Copy, Debug, Deserialize, EnumIter, ValueEnum, Hash, Eq, PartialEq, Serialize)]
pub enum Tag {
#[serde(rename = "TOKEN")]
Token,
#[serde(rename = "FINANCE")]
Finance,
#[serde(rename = "COLLECTIBLES")]
Collectibles,
#[serde(rename = "GAMING")]
Gaming,
#[serde(rename = "GOVERNANCE")]
Governance,
#[serde(rename = "SOCIAL")]
Social,
#[serde(rename = "OTHER")]
Other,
}
#[derive(Clone, Copy, Debug, Deserialize, EnumIter, ValueEnum, Hash, Eq, PartialEq, Serialize)]
pub enum Status {
#[serde(rename = "FIXED")]
Fixed,
#[serde(rename = "NOT_APPLICABLE")]
NotApplicable,
#[serde(rename = "RISK_ACCEPTED")]
RiskAccepted,
}
#[derive(Clone, Copy, Debug, Deserialize, EnumIter, ValueEnum, Hash, Eq, PartialEq, Serialize)]
pub enum SeverityType {
#[serde(rename = "LOW")]
Low,
#[serde(rename = "MEDIUM")]
Medium,
#[serde(rename = "HIGH")]
High,
#[serde(rename = "CRITICAL")]
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WebhookRequest {
pub request: ForwardRequest,
#[serde(rename = "domainSeparator")]
pub domain_separator: Bytes,
#[serde(rename = "requestTypeHash")]
pub request_type_hash: Bytes,
#[serde(rename = "suffixData")]
pub suffix_data: Bytes,
pub signature: Bytes,
pub chain: String,
}
#[derive(Debug, Clone, Validate, Serialize, Deserialize)]
pub struct Contact {
#[validate(email)]
pub email: Option<String>,
}
#[derive(Debug, Clone, Serialize, Validate, Deserialize)]
pub struct Audit {
#[serde(skip_deserializing)]
pub chains: Vec<Chains>,
pub issues: Vec<Issue>,
pub tags: Vec<Tag>,
pub contracts: Vec<AuditContract>,
pub description: Description,
pub name: String,
#[serde(rename = "reportHash", skip_deserializing)]
pub report_hash: String,
#[validate(url)]
#[serde(rename = "reportFileUrl", skip_deserializing)]
pub report_file_url: String,
#[serde(rename = "projectId", skip_deserializing)]
pub project_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditContract {
pub chain: Chains,
#[serde(rename = "evmAddress")]
pub evm_address: Address,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct The0 {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Description {
pub summary: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Issue {
pub status: Status,
pub severity: SeverityType,
pub name: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ReportFile {
#[serde(rename = "0")]
pub the_0: The0,
}
#[derive(Debug, Clone, Validate, Serialize, Deserialize)]
pub struct Links {
#[validate(url)]
pub twitter: Option<String>,
#[validate(url)]
pub github: Option<String>,
#[validate(url)]
pub website: Option<String>,
}