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 fn build_request(&self, request_id: u16, kind: RequestKind, flags: Flags) -> Base;
12
13 fn build_response(&self, request_id: u16, resp: ResponseKind, flags: Flags) -> Base;
15
16 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 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 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 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}