/yaup

URL parameters serialization with comma separated sequences

Primary LanguageRustApache License 2.0Apache-2.0

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.