Serialize your structures as query parameters. I made this crate because I didn't find anything that matched the structure of the query parameters used in Meilisearch.
Specificities of this query parameters format:
- The crate writes the initial
?
if there are parameters to send. - You can only serialize structures that follow a "key-value" shape, like structures,
HashMap
,BTreeMap
, etc. - Sequences (arrays, vectors, tuples, etc) are comma-separated.
{ doggo: vec!["kefir", "echo"] }
serialize as?doggo=kefir,echo
. - Empty and
null
values are not ignored.{ doggo: Vec::new(), catto: None }
serialize as?doggo=&catto=null
. - Return an error if you try to serialize a structure with multiple levels of key-value structures (i.e., an object containing a
HashMap
for example).
#[derive(Debug, serde::Serialize)]
enum Filter { New, Registered, Blocked }
#[derive(Debug, serde::Serialize)]
struct Params {
cursor: Option<usize>,
per_page: Option<usize>,
username: String,
filter: Vec<Filter>,
}
let params = Params {
cursor: Some(42),
per_page: None,
username: String::from("tamo"),
filter: vec![Filter::New, Filter::Blocked],
};
assert_eq!(
yaup::to_string(¶ms).unwrap(),
"?cursor=42&per_page=null&username=tamo&filter=New,Blocked"
);
This was originally a fork of serde_url_params
which is still maintained.
Thanks, boxdot
, for the initial code.
Everything has been rewritten from scratch for the v0.3.0.
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or https://opensource.org/licenses/MIT)
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this document by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.