#byte #deserialize #human #serde #filesize #formatting

deserialize-file-size

一个用于灵活且健壮地反序列化文件大小输入的serde辅助函数

1个稳定版本

1.0.0 2022年10月8日

#1291 in 编码

MIT 许可证

9KB
104

deserialize-file-size

一个用于灵活且健壮地反序列化文件大小输入的serde辅助函数。

接受以下任一种格式

  1. 一个“人类可读”的大小字符串,例如“1k”、“5mb”、“12GiB”等。
  2. 以字节为单位的整数

示例

use serde::Deserialize;
use deserialize_file_size::deserialize_file_size;

#[derive(Deserialize, Debug, PartialEq)]
struct FileSize {
    #[serde(deserialize_with = "deserialize_file_size")]
    sz: usize,
}

let size_str = r#"{"sz": "42mb"}"#;
assert_eq!(
    serde_json::from_str::<FileSize>(size_str).unwrap(),
    FileSize { sz: 1024 * 1024 * 42 },
);

let int_bytes = r#"{"sz": 4096}"#;
assert_eq!(
    serde_json::from_str::<FileSize>(int_bytes).unwrap(),
    FileSize { sz: 4096 },
);

lib.rs:

一个用于灵活且健壮地反序列化文件大小输入的serde辅助函数。

接受以下任一种格式

  1. 一个“人类可读”的大小字符串,例如“1k”、“5mb”、“12GiB”等。
  2. 以字节为单位的整数

示例

use serde::Deserialize;
use deserialize_file_size::deserialize_file_size;

#[derive(Deserialize, Debug, PartialEq)]
struct FileSize {
    #[serde(deserialize_with = "deserialize_file_size")]
    sz: usize,
}

let size_str = r#"{"sz": "42mb"}"#;
assert_eq!(
    serde_json::from_str::<FileSize>(size_str).unwrap(),
    FileSize { sz: 1024 * 1024 * 42 },
);

let int_bytes = r#"{"sz": 4096}"#;
assert_eq!(
    serde_json::from_str::<FileSize>(int_bytes).unwrap(),
    FileSize { sz: 4096 },
);

依赖项

~0.5–1.1MB
~25K SLoC