|
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