dsf_core/service/
net.rs

1use crate::base::Base;
2use crate::error::Error;
3use crate::net::{Message, Request, RequestKind, Response, ResponseKind};
4use crate::service::Service;
5use crate::types::*;
6
7pub struct PublishOptions {}
8
9pub trait Net {
10    /// Generate a protocol request object from a request message
11    fn build_request(&self, request_id: u16, kind: RequestKind, flags: Flags) -> Base;
12
13    /// Generate a protocol response object from a response message (and it's associated request)
14    fn build_response(&self, request_id: u16, resp: ResponseKind, flags: Flags) -> Base;
15
16    /// Encode and sign a message
17    fn encode_message<T: AsRef<[u8]> + AsMut<[u8]>>(
18        &self,
19        msg: Message,
20        buff: T,
21    ) -> Result<usize, Error>;
22}
23
24impl Net for Service {
25    /// Generate a protocol request object from a request message
26    fn build_request(&self, request_id: u16, kind: RequestKind, flags: Flags) -> Base {
27        let req = Request::new(self.id.clone(), request_id, kind, flags);
28
29        req.into()
30    }
31
32    /// Generate a protocol response object from a response message (and it's associated request)
33    fn build_response(&self, request_id: u16, kind: ResponseKind, flags: Flags) -> Base {
34        let resp = Response::new(self.id.clone(), request_id, kind, flags);
35
36        resp.into()
37    }
38
39    /// Encode a message
40    fn encode_message<T: AsRef<[u8]> + AsMut<[u8]>>(
41        &self,
42        msg: Message,
43        buff: T,
44    ) -> Result<usize, Error> {
45        let mut b: Base = msg.into();
46
47        let n = b.encode(self.private_key.as_ref(), None, buff)?;
48
49        Ok(n)
50    }
51}