foundry_wallets/wallet_browser/
types.rs1use alloy_dyn_abi::TypedData;
2use alloy_primitives::{Address, Bytes, ChainId, TxHash};
3use alloy_rpc_types::TransactionRequest;
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Serialize, Deserialize, Debug)]
12#[serde(tag = "status", content = "data", rename_all = "lowercase")]
13pub(crate) enum BrowserApiResponse<T = ()> {
14 Ok(T),
15 Error { message: String },
16}
17
18impl BrowserApiResponse<()> {
19 pub fn ok() -> Self {
21 Self::Ok(())
22 }
23}
24
25impl<T> BrowserApiResponse<T> {
26 pub fn with_data(data: T) -> Self {
28 Self::Ok(data)
29 }
30
31 pub fn error(msg: impl Into<String>) -> Self {
33 Self::Error { message: msg.into() }
34 }
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39#[serde(deny_unknown_fields)]
40pub struct BrowserTransactionRequest {
41 pub id: Uuid,
43 pub request: TransactionRequest,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(deny_unknown_fields)]
50pub(crate) struct BrowserTransactionResponse {
51 pub id: Uuid,
53 pub hash: Option<TxHash>,
55 pub error: Option<String>,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
60#[serde(deny_unknown_fields)]
61pub enum SignType {
62 PersonalSign,
64 SignTypedDataV4,
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69#[serde(deny_unknown_fields)]
70pub struct SignRequest {
71 pub message: String,
73 pub address: Address,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
79#[serde(deny_unknown_fields, rename_all = "camelCase")]
80pub struct BrowserSignRequest {
81 pub id: Uuid,
83 pub sign_type: SignType,
85 pub request: SignRequest,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
91#[serde(deny_unknown_fields, rename_all = "camelCase")]
92pub struct BrowserSignTypedDataRequest {
93 pub id: Uuid,
95 pub address: Address,
97 pub typed_data: TypedData,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
103#[serde(deny_unknown_fields)]
104pub(crate) struct BrowserSignResponse {
105 pub id: Uuid,
107 pub signature: Option<Bytes>,
109 pub error: Option<String>,
111}
112
113#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
115pub struct Connection {
116 pub address: Address,
118 pub chain_id: ChainId,
120}
121
122impl Connection {
123 pub fn new(address: Address, chain_id: ChainId) -> Self {
125 Self { address, chain_id }
126 }
127}