1 //! Trait for well-known wrapper types
2 
3 use protobuf::well_known_types::wrappers::BoolValue;
4 use protobuf::well_known_types::wrappers::BytesValue;
5 use protobuf::well_known_types::wrappers::DoubleValue;
6 use protobuf::well_known_types::wrappers::FloatValue;
7 use protobuf::well_known_types::wrappers::Int32Value;
8 use protobuf::well_known_types::wrappers::Int64Value;
9 use protobuf::well_known_types::wrappers::StringValue;
10 use protobuf::well_known_types::wrappers::UInt32Value;
11 use protobuf::well_known_types::wrappers::UInt64Value;
12 
13 /// Well-known wrapper types have single field.
14 /// This trait operations return pointers to that field.
15 pub(crate) trait WellKnownWrapper {
16     type Underlying;
17 
get_ref(&self) -> &Self::Underlying18     fn get_ref(&self) -> &Self::Underlying;
get_mut(&mut self) -> &mut Self::Underlying19     fn get_mut(&mut self) -> &mut Self::Underlying;
20 }
21 
22 impl WellKnownWrapper for DoubleValue {
23     type Underlying = f64;
24 
get_ref(&self) -> &f6425     fn get_ref(&self) -> &f64 {
26         &self.value
27     }
28 
get_mut(&mut self) -> &mut f6429     fn get_mut(&mut self) -> &mut f64 {
30         &mut self.value
31     }
32 }
33 
34 impl WellKnownWrapper for FloatValue {
35     type Underlying = f32;
36 
get_ref(&self) -> &f3237     fn get_ref(&self) -> &f32 {
38         &self.value
39     }
40 
get_mut(&mut self) -> &mut f3241     fn get_mut(&mut self) -> &mut f32 {
42         &mut self.value
43     }
44 }
45 
46 impl WellKnownWrapper for Int64Value {
47     type Underlying = i64;
48 
get_ref(&self) -> &i6449     fn get_ref(&self) -> &i64 {
50         &self.value
51     }
52 
get_mut(&mut self) -> &mut i6453     fn get_mut(&mut self) -> &mut i64 {
54         &mut self.value
55     }
56 }
57 
58 impl WellKnownWrapper for UInt64Value {
59     type Underlying = u64;
60 
get_ref(&self) -> &u6461     fn get_ref(&self) -> &u64 {
62         &self.value
63     }
64 
get_mut(&mut self) -> &mut u6465     fn get_mut(&mut self) -> &mut u64 {
66         &mut self.value
67     }
68 }
69 
70 impl WellKnownWrapper for Int32Value {
71     type Underlying = i32;
72 
get_ref(&self) -> &i3273     fn get_ref(&self) -> &i32 {
74         &self.value
75     }
76 
get_mut(&mut self) -> &mut i3277     fn get_mut(&mut self) -> &mut i32 {
78         &mut self.value
79     }
80 }
81 
82 impl WellKnownWrapper for UInt32Value {
83     type Underlying = u32;
84 
get_ref(&self) -> &u3285     fn get_ref(&self) -> &u32 {
86         &self.value
87     }
88 
get_mut(&mut self) -> &mut u3289     fn get_mut(&mut self) -> &mut u32 {
90         &mut self.value
91     }
92 }
93 
94 impl WellKnownWrapper for BoolValue {
95     type Underlying = bool;
96 
get_ref(&self) -> &bool97     fn get_ref(&self) -> &bool {
98         &self.value
99     }
100 
get_mut(&mut self) -> &mut bool101     fn get_mut(&mut self) -> &mut bool {
102         &mut self.value
103     }
104 }
105 
106 impl WellKnownWrapper for StringValue {
107     type Underlying = String;
108 
get_ref(&self) -> &String109     fn get_ref(&self) -> &String {
110         &self.value
111     }
112 
get_mut(&mut self) -> &mut String113     fn get_mut(&mut self) -> &mut String {
114         &mut self.value
115     }
116 }
117 
118 impl WellKnownWrapper for BytesValue {
119     type Underlying = Vec<u8>;
120 
get_ref(&self) -> &Vec<u8>121     fn get_ref(&self) -> &Vec<u8> {
122         &self.value
123     }
124 
get_mut(&mut self) -> &mut Vec<u8>125     fn get_mut(&mut self) -> &mut Vec<u8> {
126         &mut self.value
127     }
128 }
129