yaup

Crates.ioyaup
lib.rsyaup
version0.3.1
sourcesrc
created_at2022-06-21 17:55:50.959096
updated_at2024-06-10 10:06:36.645845
descriptionURL parameters serialization
homepage
repositoryhttps://github.com/meilisearch/yaup
max_upload_size
id610408
size45,314
Tamo (irevoire)

documentation

README

Yaup - Yet Another URL Params crate

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).

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(&params).unwrap(),
    "?cursor=42&per_page=null&username=tamo&filter=New,Blocked"
);

Thanks

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.

License

Contribution

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.

Commit count: 47

cargo fmt