pb_mapper_core/
conn_id.rs1use std::fmt::{Debug, Display};
2use std::hash::Hash;
3use std::ops::AddAssign;
4
5#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub struct RemoteConnId(u32);
7
8#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
9pub struct LocalConnId(u32);
10
11impl LocalConnId {
12 pub const fn from_u32(data: u32) -> Self {
13 Self(data)
14 }
15}
16
17pub trait ConnIdTrait:
18 Copy + Clone + Debug + Display + Hash + PartialEq + Eq + PartialOrd + Ord + Default + Into<u32>
19{
20}
21
22pub trait ConnIdProvider<T: ConnIdTrait> {
23 fn get_next_id(&mut self) -> T;
24 fn is_valid_id(&self, id: &T) -> bool;
25}
26
27macro_rules! impl_tuple_from_primitive {
28 ($primitive_ty:ident, $tuple_ty:ident) => {
29 impl From<$primitive_ty> for $tuple_ty {
30 fn from(value: $primitive_ty) -> Self {
31 Self(value)
32 }
33 }
34 };
35}
36
37macro_rules! impl_primitive_from_tupe {
38 ($primitive_ty:ident, $tuple_ty:ident) => {
39 impl From<$tuple_ty> for $primitive_ty {
40 fn from(value: $tuple_ty) -> Self {
41 value.0
42 }
43 }
44 };
45}
46
47macro_rules! impl_tuple_add_assign_primitive {
48 ($primitive_ty:ident, $tuple_ty:ident) => {
49 impl AddAssign<$primitive_ty> for $tuple_ty {
50 fn add_assign(&mut self, rhs: $primitive_ty) {
51 self.0 += rhs
52 }
53 }
54 };
55}
56
57impl_tuple_from_primitive!(u32, RemoteConnId);
58
59impl_primitive_from_tupe!(u32, RemoteConnId);
60
61impl_tuple_add_assign_primitive!(u32, RemoteConnId);
62
63impl_tuple_from_primitive!(u32, LocalConnId);
64
65impl_primitive_from_tupe!(u32, LocalConnId);
66
67impl_tuple_add_assign_primitive!(u32, LocalConnId);
68
69impl Display for RemoteConnId {
70 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
71 write!(f, "RemoteConnId({})", self.0)
72 }
73}
74
75impl Display for LocalConnId {
76 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
77 write!(f, "LocalConnId({})", self.0)
78 }
79}
80
81impl ConnIdTrait for RemoteConnId {}
82impl ConnIdTrait for LocalConnId {}
83
84#[derive(Debug, Clone, Copy, Hash)]
85pub struct ConnId {
86 pub local_id: LocalConnId,
87 pub remote_id: RemoteConnId,
88}
89
90impl Display for ConnId {
91 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
92 write!(f, "`L-{}:R-{}`", self.local_id, self.remote_id)
93 }
94}