use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SimulationTransaction {
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
pub to: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gas: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gas_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_fee_per_gas: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_priority_fee_per_gas: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetChange {
pub asset_type: String,
pub change_type: String,
pub from: String,
pub to: String,
#[serde(default)]
pub amount: Option<String>,
#[serde(default)]
pub raw_amount: Option<String>,
#[serde(default)]
pub contract_address: Option<String>,
#[serde(default)]
pub token_id: Option<String>,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub symbol: Option<String>,
#[serde(default)]
pub decimals: Option<u8>,
#[serde(default)]
pub logo: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SimulateAssetChangesResponse {
pub changes: Vec<AssetChange>,
pub gas_used: Option<String>,
pub error: Option<SimulationError>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SimulationError {
pub message: String,
#[serde(default)]
pub revert_reason: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SimulateAssetChangesBundleResponse {
pub results: Vec<SimulateAssetChangesResponse>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ExecutionFormat {
Nested,
Flat,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DecodedCall {
pub name: Option<String>,
pub signature: Option<String>,
pub inputs: Option<serde_json::Value>,
pub outputs: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionCall {
#[serde(rename = "type")]
pub call_type: String,
pub from: String,
pub to: Option<String>,
pub value: Option<String>,
pub gas: Option<String>,
pub gas_used: Option<String>,
pub input: Option<String>,
pub output: Option<String>,
pub decoded: Option<DecodedCall>,
pub error: Option<String>,
pub revert_reason: Option<String>,
#[serde(default)]
pub calls: Vec<ExecutionCall>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DecodedLog {
pub name: Option<String>,
pub signature: Option<String>,
pub params: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionLog {
pub address: String,
pub topics: Vec<String>,
pub data: String,
pub decoded: Option<DecodedLog>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SimulateExecutionResponse {
pub calls: serde_json::Value,
pub logs: Vec<ExecutionLog>,
}