1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use super::{Params, ValidationError, JSON_RPC_VERSION_STR};
use crate::jwt::decode::MessageId;
use serde::{Deserialize, Serialize};
/// Data structure representing a JSON RPC request.
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Request {
/// ID this message corresponds to.
pub id: MessageId,
/// The JSON RPC version.
pub jsonrpc: String,
/// The parameters required to fulfill this request.
#[serde(flatten)]
pub params: Params,
}
impl Request {
/// Create a new instance.
pub fn new(id: MessageId, params: Params) -> Self {
Self { id, jsonrpc: JSON_RPC_VERSION_STR.into(), params }
}
/// Validates the request payload.
pub fn validate(&self) -> Result<(), ValidationError> {
if !self.id.validate() {
return Err(ValidationError::RequestId);
}
if &self.jsonrpc != JSON_RPC_VERSION_STR {
return Err(ValidationError::JsonRpcVersion);
}
// match &self.params {
// Params::Subscribe(params) => params.validate(),
// Params::Unsubscribe(params) => params.validate(),
// Params::FetchMessages(params) => params.validate(),
// Params::BatchSubscribe(params) => params.validate(),
// Params::BatchUnsubscribe(params) => params.validate(),
// Params::BatchFetchMessages(params) => params.validate(),
// Params::Publish(params) => params.validate(),
// Params::BatchReceiveMessages(params) => params.validate(),
// Params::WatchRegister(params) => params.validate(),
// Params::WatchUnregister(params) => params.validate(),
// Params::Subscription(params) => params.validate(),
// }
Ok(())
}
}