|
28 | 28 | //! ```
|
29 | 29 |
|
30 | 30 | mod parse;
|
31 |
| - |
32 |
| -#[cfg(feature = "arbitrary")] |
33 |
| -extern crate arbitrary; |
34 |
| -#[cfg(feature = "serde")] |
35 |
| -extern crate serde; |
36 |
| -#[cfg(feature = "serde")] |
37 |
| -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; |
38 | 31 | #[cfg(feature = "serde")]
|
39 |
| -use std::convert::TryFrom; |
| 32 | +mod serde; |
40 | 33 |
|
41 | 34 | use std::fmt::{self, Debug, Display, Formatter};
|
42 | 35 | use std::ops::{Add, AddAssign, Mul, MulAssign, Sub, SubAssign};
|
@@ -342,70 +335,6 @@ where
|
342 | 335 | }
|
343 | 336 | }
|
344 | 337 |
|
345 |
| -#[cfg(feature = "serde")] |
346 |
| -impl<'de> Deserialize<'de> for ByteSize { |
347 |
| - fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
348 |
| - where |
349 |
| - D: Deserializer<'de>, |
350 |
| - { |
351 |
| - struct ByteSizeVisitor; |
352 |
| - |
353 |
| - impl de::Visitor<'_> for ByteSizeVisitor { |
354 |
| - type Value = ByteSize; |
355 |
| - |
356 |
| - fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { |
357 |
| - formatter.write_str("an integer or string") |
358 |
| - } |
359 |
| - |
360 |
| - fn visit_i64<E: de::Error>(self, value: i64) -> Result<Self::Value, E> { |
361 |
| - if let Ok(val) = u64::try_from(value) { |
362 |
| - Ok(ByteSize(val)) |
363 |
| - } else { |
364 |
| - Err(E::invalid_value( |
365 |
| - de::Unexpected::Signed(value), |
366 |
| - &"integer overflow", |
367 |
| - )) |
368 |
| - } |
369 |
| - } |
370 |
| - |
371 |
| - fn visit_u64<E: de::Error>(self, value: u64) -> Result<Self::Value, E> { |
372 |
| - Ok(ByteSize(value)) |
373 |
| - } |
374 |
| - |
375 |
| - fn visit_str<E: de::Error>(self, value: &str) -> Result<Self::Value, E> { |
376 |
| - if let Ok(val) = value.parse() { |
377 |
| - Ok(val) |
378 |
| - } else { |
379 |
| - Err(E::invalid_value( |
380 |
| - de::Unexpected::Str(value), |
381 |
| - &"parsable string", |
382 |
| - )) |
383 |
| - } |
384 |
| - } |
385 |
| - } |
386 |
| - |
387 |
| - if deserializer.is_human_readable() { |
388 |
| - deserializer.deserialize_any(ByteSizeVisitor) |
389 |
| - } else { |
390 |
| - deserializer.deserialize_u64(ByteSizeVisitor) |
391 |
| - } |
392 |
| - } |
393 |
| -} |
394 |
| - |
395 |
| -#[cfg(feature = "serde")] |
396 |
| -impl Serialize for ByteSize { |
397 |
| - fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> |
398 |
| - where |
399 |
| - S: Serializer, |
400 |
| - { |
401 |
| - if serializer.is_human_readable() { |
402 |
| - <str>::serialize(self.to_string().as_str(), serializer) |
403 |
| - } else { |
404 |
| - self.0.serialize(serializer) |
405 |
| - } |
406 |
| - } |
407 |
| -} |
408 |
| - |
409 | 338 | #[cfg(test)]
|
410 | 339 | mod tests {
|
411 | 340 | use super::*;
|
@@ -537,36 +466,4 @@ mod tests {
|
537 | 466 | fn test_to_string() {
|
538 | 467 | assert_to_string("609.0 PB", ByteSize::pb(609), false);
|
539 | 468 | }
|
540 |
| - |
541 |
| - #[cfg(feature = "serde")] |
542 |
| - #[test] |
543 |
| - fn test_serde() { |
544 |
| - #[derive(Serialize, Deserialize)] |
545 |
| - struct S { |
546 |
| - x: ByteSize, |
547 |
| - } |
548 |
| - |
549 |
| - let s: S = serde_json::from_str(r#"{ "x": "5 B" }"#).unwrap(); |
550 |
| - assert_eq!(s.x, ByteSize(5)); |
551 |
| - |
552 |
| - let s: S = serde_json::from_str(r#"{ "x": 1048576 }"#).unwrap(); |
553 |
| - assert_eq!(s.x, "1 MiB".parse::<ByteSize>().unwrap()); |
554 |
| - |
555 |
| - let s: S = toml::from_str(r#"x = "2.5 MiB""#).unwrap(); |
556 |
| - assert_eq!(s.x, "2.5 MiB".parse::<ByteSize>().unwrap()); |
557 |
| - |
558 |
| - // i64 MAX |
559 |
| - let s: S = toml::from_str(r#"x = "9223372036854775807""#).unwrap(); |
560 |
| - assert_eq!(s.x, "9223372036854775807".parse::<ByteSize>().unwrap()); |
561 |
| - } |
562 |
| - |
563 |
| - #[test] |
564 |
| - #[cfg(feature = "serde")] |
565 |
| - fn test_serde_json() { |
566 |
| - let json = serde_json::to_string(&ByteSize::mib(1)).unwrap(); |
567 |
| - assert_eq!(json, "\"1.0 MiB\""); |
568 |
| - |
569 |
| - let deserialized: ByteSize = serde_json::from_str(&json).unwrap(); |
570 |
| - assert_eq!(deserialized.0, 1048576); |
571 |
| - } |
572 | 469 | }
|
0 commit comments