You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
731 B
37 lines
731 B
2 years ago
|
# deserialize-file-size
|
||
|
|
||
|
A serde helper function for deserializing file size input
|
||
|
flexibly and robustly.
|
||
|
|
||
|
Accepts either:
|
||
|
|
||
|
1) a "human" size string, e.g. "1k", "5mb", "12GiB", etc.
|
||
|
2) an integer number of bytes
|
||
|
|
||
|
## Example
|
||
|
|
||
|
```rust
|
||
|
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 },
|
||
|
);
|
||
|
```
|
||
|
|
||
|
|