naia_shared/messages/
request.rs1use std::marker::PhantomData;
2
3use crate::Message;
4
5pub trait Request: Message {
7 type Response: Response;
8}
9
10pub trait Response: Message {}
12
13#[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#[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}