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