1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
/// `Filter` structure is a bit verbose to set up, and since it is used in many places /// `filter!` macro provides an ergononic way of creating it. /// `filter!` expects its arguments to be `ToString`. /// The first argument is the name field of the `Filter`, while the rest of them (if any) become the values. /// /// `Filter` structure is used in various `Ec2Client::describe_*()` calls. /// /// For example: /// ```no_run /// # use std::error::Error; /// # use rusoto_ec2::{filter, DescribeAvailabilityZonesRequest, Ec2, Ec2Client}; /// # use rusoto_core::Region; /// /// # #[tokio::main] /// # async fn main() -> Result<(), Box<dyn Error>> { /// let filter = filter!("region-name", "us-east-1"); /// let input = DescribeAvailabilityZonesRequest { /// filters: Some(vec![filter]), /// ..DescribeAvailabilityZonesRequest::default() /// }; /// /// let output = Ec2Client::new(Region::default()) /// .describe_availability_zones(input) /// .await?; /// # /// # Ok(()) /// # } /// ``` /// /// ``` /// # use rusoto_ec2::filter; /// let empty = filter!("empty"); /// let direct = rusoto_ec2::Filter { /// name: Some(String::from("empty")), /// values: Some(vec![]) /// }; /// /// assert_eq!(empty, direct); /// /// let single = filter!("owner", "bozo"); /// let direct = rusoto_ec2::Filter { /// name: Some(String::from("owner")), /// values: Some(vec![String::from("bozo")]) /// }; /// /// assert_eq!(single, direct); /// /// let list = filter!("groups", "sg-xxxxx", "sg-yyyyy"); /// let direct = rusoto_ec2::Filter { /// name: Some(String::from("groups")), /// values: Some( /// vec![ /// String::from("sg-xxxxx"), /// String::from("sg-yyyyy"), /// ]) /// }; /// /// assert_eq!(list, direct); /// ``` #[macro_export] macro_rules! filter { ($key:expr) => { $crate::Filter { name: Some($key.to_string()), values: Some(vec![]) } }; ($key:expr, $($value:expr),+) => { $crate::Filter { name: Some($key.to_string()), values: Some(vec![$($value.to_string()),+]) } } }