|
1 | | -use std::{fmt, slice}; |
| 1 | +use std::fmt; |
2 | 2 |
|
3 | 3 | use serde::de::value::{MapAccessDeserializer, MapDeserializer, SeqAccessDeserializer}; |
4 | 4 | use serde::de::{self, IntoDeserializer, SeqAccess, Visitor}; |
5 | 5 | use serde::{forward_to_deserialize_any, Deserialize, Deserializer}; |
6 | 6 |
|
7 | 7 | use super::Error; |
8 | | -use crate::serde::{i8_vec_to_u8_vec, u8_vec_to_i8_vec}; |
9 | | -use crate::{Compound, List, Value}; |
| 8 | +use crate::{i8_vec_into_u8_vec, u8_slice_as_i8_slice, u8_vec_into_i8_vec, Compound, List, Value}; |
10 | 9 |
|
11 | 10 | impl<'de> Deserialize<'de> for Value { |
12 | 11 | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
@@ -117,17 +116,14 @@ impl<'de> Deserialize<'de> for Value { |
117 | 116 | where |
118 | 117 | E: de::Error, |
119 | 118 | { |
120 | | - let slice: &[i8] = |
121 | | - unsafe { slice::from_raw_parts(v.as_ptr() as *const i8, v.len()) }; |
122 | | - |
123 | | - Ok(Value::ByteArray(slice.into())) |
| 119 | + Ok(Value::ByteArray(u8_slice_as_i8_slice(v).into())) |
124 | 120 | } |
125 | 121 |
|
126 | 122 | fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E> |
127 | 123 | where |
128 | 124 | E: de::Error, |
129 | 125 | { |
130 | | - Ok(Value::ByteArray(u8_vec_to_i8_vec(v))) |
| 126 | + Ok(Value::ByteArray(u8_vec_into_i8_vec(v))) |
131 | 127 | } |
132 | 128 |
|
133 | 129 | fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error> |
@@ -190,17 +186,14 @@ impl<'de> Deserialize<'de> for List { |
190 | 186 | where |
191 | 187 | E: de::Error, |
192 | 188 | { |
193 | | - Ok(List::Byte(u8_vec_to_i8_vec(v))) |
| 189 | + Ok(List::Byte(u8_vec_into_i8_vec(v))) |
194 | 190 | } |
195 | 191 |
|
196 | 192 | fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E> |
197 | 193 | where |
198 | 194 | E: de::Error, |
199 | 195 | { |
200 | | - let bytes: &[i8] = |
201 | | - unsafe { slice::from_raw_parts(v.as_ptr() as *const i8, v.len()) }; |
202 | | - |
203 | | - Ok(List::Byte(bytes.into())) |
| 196 | + Ok(List::Byte(u8_slice_as_i8_slice(v).into())) |
204 | 197 | } |
205 | 198 | } |
206 | 199 |
|
@@ -269,7 +262,7 @@ impl<'de> Deserializer<'de> for Value { |
269 | 262 | Value::Long(v) => visitor.visit_i64(v), |
270 | 263 | Value::Float(v) => visitor.visit_f32(v), |
271 | 264 | Value::Double(v) => visitor.visit_f64(v), |
272 | | - Value::ByteArray(v) => visitor.visit_byte_buf(i8_vec_to_u8_vec(v)), |
| 265 | + Value::ByteArray(v) => visitor.visit_byte_buf(i8_vec_into_u8_vec(v)), |
273 | 266 | Value::String(v) => visitor.visit_string(v), |
274 | 267 | Value::List(v) => v.deserialize_any(visitor), |
275 | 268 | Value::Compound(v) => v.into_deserializer().deserialize_any(visitor), |
@@ -347,7 +340,7 @@ impl<'de> Deserializer<'de> for List { |
347 | 340 |
|
348 | 341 | match self { |
349 | 342 | List::End => visitor.visit_seq(EndSeqAccess), |
350 | | - List::Byte(v) => visitor.visit_byte_buf(i8_vec_to_u8_vec(v)), |
| 343 | + List::Byte(v) => visitor.visit_byte_buf(i8_vec_into_u8_vec(v)), |
351 | 344 | List::Short(v) => v.into_deserializer().deserialize_any(visitor), |
352 | 345 | List::Int(v) => v.into_deserializer().deserialize_any(visitor), |
353 | 346 | List::Long(v) => v.into_deserializer().deserialize_any(visitor), |
|
0 commit comments