stratum_server/request.rs
1use crate::{
2 types::{GlobalVars, ID},
3 Frame,
4};
5
6pub struct StratumRequest<State> {
7 pub(crate) state: State,
8 pub(crate) values: Frame,
9 pub(crate) global_vars: GlobalVars,
10}
11
12impl<State> StratumRequest<State> {
13 /// Access application scoped state.
14 pub fn state(&self) -> &State {
15 &self.state
16 }
17
18 pub fn global_vars(&self) -> &GlobalVars {
19 &self.global_vars
20 }
21
22 // pub fn get_ex_message(&self) -> Option<ExMessageGeneric> {
23 // match &self.values {
24 // MessageValue::StratumV1(_) => None,
25 // MessageValue::ExMessage(msg) => Some(msg.clone()),
26 // }
27 // }
28
29 pub fn get_json<T: serde::de::DeserializeOwned>(
30 &self,
31 _name: &str,
32 ) -> Result<T, serde_json::Error> {
33 match &self.values {
34 Frame::V1(request) => Ok(serde_json::from_value(request.params.clone())?),
35 // MessageValue::ExMessage(_) => Err(serde::de::Error::custom(
36 // "wrong message type request".to_string(),
37 // )),
38 }
39 }
40
41 pub fn get_id(&self) -> Result<ID, serde_json::Error> {
42 match &self.values {
43 Frame::V1(request) => Ok(request.id.clone()),
44 // MessageValue::ExMessage(_) => Err(serde::de::Error::custom(
45 // "wrong message type request".to_string(),
46 // )),
47 }
48 }
49}