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