use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PartialUserOperationV06 {
pub sender: String,
pub nonce: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub init_code: Option<String>,
pub call_data: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub call_gas_limit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification_gas_limit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_verification_gas: 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>,
#[serde(skip_serializing_if = "Option::is_none")]
pub paymaster_and_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PartialUserOperationV07 {
pub sender: String,
pub nonce: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub factory: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub factory_data: Option<String>,
pub call_data: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub call_gas_limit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification_gas_limit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_verification_gas: 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, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Erc20Context {
pub token_address: String,
pub amount: String,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GasOverrides {
#[serde(skip_serializing_if = "Option::is_none")]
pub call_gas_limit: Option<GasOverride>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification_gas_limit: Option<GasOverride>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_verification_gas: Option<GasOverride>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_fee_per_gas: Option<GasOverride>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_priority_fee_per_gas: Option<GasOverride>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(untagged)]
pub enum GasOverride {
Fixed(String),
Multiplier { multiplier: f64 },
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GasSponsorshipResponseV06 {
pub paymaster_and_data: String,
pub call_gas_limit: String,
pub verification_gas_limit: String,
pub pre_verification_gas: String,
pub max_fee_per_gas: String,
pub max_priority_fee_per_gas: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GasSponsorshipResponseV07 {
pub paymaster: String,
pub paymaster_data: String,
pub paymaster_verification_gas_limit: String,
pub paymaster_post_op_gas_limit: String,
pub call_gas_limit: String,
pub verification_gas_limit: String,
pub pre_verification_gas: String,
pub max_fee_per_gas: String,
pub max_priority_fee_per_gas: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RequestPaymasterAndDataResponse {
pub paymaster_and_data: Option<String>,
pub paymaster: Option<String>,
pub paymaster_data: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PaymasterStubDataResponse {
pub sponsor: Option<SponsorInfo>,
pub paymaster: Option<String>,
pub paymaster_data: Option<String>,
pub paymaster_and_data: Option<String>,
pub paymaster_verification_gas_limit: Option<String>,
pub paymaster_post_op_gas_limit: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SponsorInfo {
pub name: String,
pub icon: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenQuoteResponse {
pub tokens_per_eth: String,
pub estimated_token_amount: String,
pub estimated_usd: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GasPolicy {
pub id: String,
pub name: String,
pub status: PolicyStatus,
pub rules: PolicyRules,
pub created_at: Option<String>,
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PolicyStatus {
Active,
Inactive,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PolicyRules {
#[serde(default)]
pub sender_allowlist: Vec<String>,
#[serde(default)]
pub sender_blocklist: Vec<String>,
#[serde(default)]
pub spending_limits: Option<SpendingLimits>,
pub start_time: Option<String>,
pub end_time: Option<String>,
pub webhook_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SpendingLimits {
pub max_spend_per_uo: Option<String>,
pub max_spend_per_sender: Option<String>,
pub max_count_per_sender: Option<u64>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreatePolicyRequest {
pub name: String,
pub rules: PolicyRules,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_id: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdatePolicyRequest {
pub rules: PolicyRules,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PolicyStats {
pub total_sponsored: u64,
pub total_spent: String,
pub unique_senders: u64,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Sponsorship {
pub user_op_hash: String,
pub sender: String,
pub tx_hash: Option<String>,
pub amount: String,
pub timestamp: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ListPoliciesResponse {
pub data: Vec<GasPolicy>,
pub page_info: Option<PageInfo>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PageInfo {
pub has_next_page: bool,
pub end_cursor: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ListSponsorshipsResponse {
pub data: Vec<Sponsorship>,
pub page_info: Option<PageInfo>,
}