naia_shared/messages/
request.rs

1use std::marker::PhantomData;
2
3use crate::Message;
4
5// Request
6pub trait Request: Message {
7    type Response: Response;
8}
9
10// Response
11pub trait Response: Message {}
12
13// ResponseSendKey
14#[derive(Clone, Eq, PartialEq, Hash)]
15pub struct ResponseSendKey<S: Response> {
16    response_id: GlobalResponseId,
17    phantom_s: PhantomData<S>,
18}
19
20impl<S: Response> ResponseSendKey<S> {
21    pub fn new(id: GlobalResponseId) -> Self {
22        Self {
23            response_id: id,
24            phantom_s: PhantomData,
25        }
26    }
27
28    pub fn response_id(&self) -> GlobalResponseId {
29        self.response_id
30    }
31}
32
33// ResponseReceiveKey
34#[derive(Clone, Eq, PartialEq, Hash, Copy)]
35pub struct ResponseReceiveKey<S: Response> {
36    request_id: GlobalRequestId,
37    phantom_s: PhantomData<S>,
38}
39
40impl<S: Response> ResponseReceiveKey<S> {
41    pub fn new(request_id: GlobalRequestId) -> Self {
42        Self {
43            request_id,
44            phantom_s: PhantomData,
45        }
46    }
47
48    pub fn request_id(&self) -> GlobalRequestId {
49        self.request_id
50    }
51}
52
53#[derive(Clone, Copy, Eq, Hash, PartialEq)]
54pub struct GlobalRequestId {
55    id: u64,
56}
57
58impl GlobalRequestId {
59    pub fn new(id: u64) -> Self {
60        Self { id }
61    }
62}
63
64#[derive(Clone, Copy, Eq, Hash, PartialEq)]
65pub struct GlobalResponseId {
66    id: u64,
67}
68
69impl GlobalResponseId {
70    pub fn new(id: u64) -> Self {
71        Self { id }
72    }
73}