use serde::{Deserialize, Serialize};
use crate::{nuts::nut17::Params, pub_sub::SubId};
pub const JSON_RPC_VERSION: &str = "2.0";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WsRequest {
pub jsonrpc: String,
#[serde(flatten)]
pub method: WsMethod,
pub id: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "method", content = "params")]
pub enum WsMethod {
Subscribe(Params),
Unsubscribe(UnsubscribeMethod),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct UnsubscribeMethod {
#[serde(rename = "subId")]
pub sub_id: SubId,
}
#[derive(Debug, Clone, Serialize)]
pub struct WsErrorResponse {
code: i32,
message: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct WsResponse<T: Serialize + Sized> {
jsonrpc: String,
#[serde(skip_serializing_if = "Option::is_none")]
result: Option<T>,
#[serde(skip_serializing_if = "Option::is_none")]
error: Option<WsErrorResponse>,
id: usize,
}