walletconnect-client 0.2.0

WASM library for walletconnect dApp connections
Documentation
use crate::metadata::{Empty, SessionDeletion, SessionEvent, SessionUpdate};

use super::{
    super::metadata::{Responder, SessionPropose, SessionRpcRequest, SessionSettlement},
    Serializable,
};
use crate::jwt::decode::MessageId;
use ethers::providers::JsonRpcError;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Error {
    pub code: i64,
    pub message: String,
    pub data: Option<serde_json::Value>,
}

impl Error {
    pub fn as_error_response(&self) -> JsonRpcError {
        JsonRpcError { code: self.code, message: self.message.clone(), data: self.data.clone() }
    }
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "method", content = "params")]
pub enum SessionParams {
    #[serde(rename = "wc_sessionPropose")]
    Propose(SessionPropose),
    #[serde(rename = "wc_sessionRequest")]
    Request(SessionRpcRequest),
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SessionResultParams {
    Responder(Responder),
    Error(SessionError),
    Boolean(bool),
    Response(serde_json::Value),
}

pub trait SessionPayload: Serializable {
    fn into_params(self) -> SessionParams;
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SessionRequest {
    pub id: MessageId,
    pub jsonrpc: String,

    #[serde(flatten)]
    pub params: SessionParams,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SessionMessage {
    Message(WalletRequest),
    Response(SessionResponse),
    Error(SessionError),
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SessionResponse {
    pub id: MessageId,
    pub jsonrpc: String,

    pub result: SessionResultParams,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SessionError {
    pub id: MessageId,
    pub jsonrpc: String,

    pub error: Error,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WalletRequest {
    pub id: MessageId,
    pub jsonrpc: String,

    #[serde(flatten)]
    pub params: WalletMessage,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "method", content = "params")]
pub enum WalletMessage {
    #[serde(rename = "wc_sessionSettle")]
    Settlement(SessionSettlement),
    #[serde(rename = "wc_sessionPing")]
    Ping(Empty),
    #[serde(rename = "wc_sessionUpdate")]
    Update(SessionUpdate),
    #[serde(rename = "wc_sessionEvent")]
    Event(SessionEvent),
    #[serde(rename = "wc_sessionDelete")]
    Delete(SessionDeletion),
}