serde_single_or_vec
This crate provides the SingleOrVec
Type which allows
parsing either a single type T or a vector of type T using serde.
This is required when a server either returns an array
if there are multiple values or one value if there is only one.
Example
let json = r#"{
"single": 0,
"multiple": [
0,
1,
2
]
}"#;
let res: Response = from_str.unwrap;
assert_eq!;
Format
By default the SingleOrVec
Type deserializes its content either
to a single value or an array if it contains multiple values. To change
this behaviour, its possible to define the output format.
let json = "[0]";
let res: = from_str.unwrap;
assert_eq!;
let res: = from_str.unwrap;
assert_eq!;
Storage Backend
The default Backend is a Vec<T>
and thus always results in an allocation.
An alternativ is to use a Cow<'_, T>
as backend which only requires an allocation
for a single value.
Note that this is only valid when using or serializing this value, deserialisation always allocates due to serde#1852
let json = "[0,1,2]";
let res: = from_str.unwrap;
assert_eq!;
Custom Storage Type
Its also possible to implement Custom Storage Backends by using the Storage
Trait.
use ArrayVec;
let json = "[0,1,2]";
let res: = from_str.unwrap;
assert_eq!;
let json = "0";
let res: = from_str.unwrap;
assert_eq!;
no_std
It is possible to use this crate with no_std
, however, like serde, either std
or
alloc
is required.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
License: MIT OR Apache-2.0