#query-parameters #hyper-http #query #params #query-string #hyper #http-framework

to-query-params

A procedural macro and trait for easy use of arbitrary structs as query parameters in Hyper

1 unstable release

0.0.4 Oct 18, 2023
0.0.3 Oct 18, 2023
0.0.2 Oct 17, 2023

#8 in #params

Download history 13/week @ 2024-08-31 1/week @ 2024-09-07 16/week @ 2024-09-21 25/week @ 2024-09-28 29/week @ 2024-10-05 21/week @ 2024-10-12 6/week @ 2024-10-19 3/week @ 2024-11-09 23/week @ 2024-11-16 5/week @ 2024-11-23 6/week @ 2024-11-30 28/week @ 2024-12-07 16/week @ 2024-12-14

59 downloads per month
Used in kraken-async-rs

MIT license

11KB
190 lines

to-query-params

A procedural macro and trait for converting arbitrary structs into Vec<(String, String)> for use as query parameters, originally intended for ease of use with the Hyper HTTP framework.

Query parameters can be url-encoded with the urlencoding crate by calling the to_encoded_params method, while the default to_query_params method does not url-encode parameters.

badge License: MIT

Usage:

use query_params::{ToQueryParams, QueryParams};

 // Eq and PartialEq are just for assertions
 #[derive(QueryParams, Debug, PartialEq, Eq)]
 struct ProductRequest {
     #[query(required)] // fields that aren't Option<T> must be marked as required
     id: i32,
     #[query(required, rename = "type")]
     product_type: String,
     min_price: Option<i32>,
     max_price: Option<i32>,
 }

 pub fn main() {
     let request = ProductRequest {
         id: 999,
         product_type: "accessory".to_string(),
         min_price: None,
         max_price: Some(100),
     };

     let expected = vec![
         ("id".into(), "999".into()), 
         ("type".into(), "accessory".into()), 
         ("max_price".into(), "100".into())
     ];
     
     let query_params = request.to_query_params();

     assert_eq!(expected, query_params);
 }

Dependencies

~230–670KB
~16K SLoC