|
1 | 1 | use crate::stable_hasher; |
2 | | -use rustc_serialize::{ |
3 | | - opaque::{self, EncodeResult, FileEncodeResult}, |
4 | | - Decodable, Decoder, Encodable, Encoder, |
5 | | -}; |
| 2 | +use rustc_serialize::{Decodable, Encodable}; |
6 | 3 | use std::hash::{Hash, Hasher}; |
7 | 4 | use std::mem::{self, MaybeUninit}; |
8 | 5 |
|
@@ -63,16 +60,6 @@ impl Fingerprint { |
63 | 60 | pub fn to_hex(&self) -> String { |
64 | 61 | format!("{:x}{:x}", self.0, self.1) |
65 | 62 | } |
66 | | - |
67 | | - pub fn decode_opaque(decoder: &mut opaque::Decoder<'_>) -> Result<Fingerprint, String> { |
68 | | - let mut bytes: [MaybeUninit<u8>; 16] = MaybeUninit::uninit_array(); |
69 | | - |
70 | | - decoder.read_raw_bytes(&mut bytes)?; |
71 | | - |
72 | | - let [l, r]: [u64; 2] = unsafe { mem::transmute(bytes) }; |
73 | | - |
74 | | - Ok(Fingerprint(u64::from_le(l), u64::from_le(r))) |
75 | | - } |
76 | 63 | } |
77 | 64 |
|
78 | 65 | impl std::fmt::Display for Fingerprint { |
@@ -130,55 +117,22 @@ impl stable_hasher::StableHasherResult for Fingerprint { |
130 | 117 | impl_stable_hash_via_hash!(Fingerprint); |
131 | 118 |
|
132 | 119 | impl<E: rustc_serialize::Encoder> Encodable<E> for Fingerprint { |
| 120 | + #[inline] |
133 | 121 | fn encode(&self, s: &mut E) -> Result<(), E::Error> { |
134 | | - s.encode_fingerprint(self) |
| 122 | + let bytes: [u8; 16] = unsafe { mem::transmute([self.0.to_le(), self.1.to_le()]) }; |
| 123 | + s.emit_raw_bytes(&bytes)?; |
| 124 | + Ok(()) |
135 | 125 | } |
136 | 126 | } |
137 | 127 |
|
138 | 128 | impl<D: rustc_serialize::Decoder> Decodable<D> for Fingerprint { |
| 129 | + #[inline] |
139 | 130 | fn decode(d: &mut D) -> Result<Self, D::Error> { |
140 | | - d.decode_fingerprint() |
141 | | - } |
142 | | -} |
143 | | - |
144 | | -pub trait FingerprintEncoder: rustc_serialize::Encoder { |
145 | | - fn encode_fingerprint(&mut self, f: &Fingerprint) -> Result<(), Self::Error>; |
146 | | -} |
147 | | - |
148 | | -pub trait FingerprintDecoder: rustc_serialize::Decoder { |
149 | | - fn decode_fingerprint(&mut self) -> Result<Fingerprint, Self::Error>; |
150 | | -} |
151 | | - |
152 | | -impl<E: rustc_serialize::Encoder> FingerprintEncoder for E { |
153 | | - default fn encode_fingerprint(&mut self, _: &Fingerprint) -> Result<(), E::Error> { |
154 | | - panic!("Cannot encode `Fingerprint` with `{}`", std::any::type_name::<E>()); |
155 | | - } |
156 | | -} |
157 | | - |
158 | | -impl FingerprintEncoder for opaque::Encoder { |
159 | | - fn encode_fingerprint(&mut self, f: &Fingerprint) -> EncodeResult { |
160 | | - let bytes: [u8; 16] = unsafe { mem::transmute([f.0.to_le(), f.1.to_le()]) }; |
161 | | - self.emit_raw_bytes(&bytes)?; |
162 | | - Ok(()) |
163 | | - } |
164 | | -} |
165 | | - |
166 | | -impl FingerprintEncoder for opaque::FileEncoder { |
167 | | - fn encode_fingerprint(&mut self, f: &Fingerprint) -> FileEncodeResult { |
168 | | - let bytes: [u8; 16] = unsafe { mem::transmute([f.0.to_le(), f.1.to_le()]) }; |
169 | | - self.emit_raw_bytes(&bytes) |
170 | | - } |
171 | | -} |
172 | | - |
173 | | -impl<D: rustc_serialize::Decoder> FingerprintDecoder for D { |
174 | | - default fn decode_fingerprint(&mut self) -> Result<Fingerprint, D::Error> { |
175 | | - panic!("Cannot decode `Fingerprint` with `{}`", std::any::type_name::<D>()); |
176 | | - } |
177 | | -} |
| 131 | + let mut bytes: [MaybeUninit<u8>; 16] = MaybeUninit::uninit_array(); |
| 132 | + d.read_raw_bytes(&mut bytes)?; |
178 | 133 |
|
179 | | -impl FingerprintDecoder for opaque::Decoder<'_> { |
180 | | - fn decode_fingerprint(&mut self) -> Result<Fingerprint, String> { |
181 | | - Fingerprint::decode_opaque(self) |
| 134 | + let [l, r]: [u64; 2] = unsafe { mem::transmute(bytes) }; |
| 135 | + Ok(Fingerprint(u64::from_le(l), u64::from_le(r))) |
182 | 136 | } |
183 | 137 | } |
184 | 138 |
|
|
0 commit comments