use serde::{Deserialize, Serialize}; use serde_json::Value; #[derive(Debug, Serialize, Deserialize)] pub struct Request { pub id: String, pub method: String, pub params: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct Response { pub id: String, pub result: Option, pub error: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct ErrorObj { pub code: i32, pub message: String, #[serde(skip_serializing_if = "Option::is_none")] pub data: Option, } #[derive(Debug, Serialize, Deserialize)] #[serde(tag = "event", content = "data")] pub enum ProgressEvent { Started, Message(String), Percent(f32), Finished, } impl Response { pub fn ok(id: impl Into, result: Value) -> Self { Self { id: id.into(), result: Some(result), error: None, } } pub fn err( id: impl Into, code: i32, message: impl Into, data: Option, ) -> Self { Self { id: id.into(), result: None, error: Some(ErrorObj { code, message: message.into(), data, }), } } }