|  | #![allow(nonstandard_style)] | 
|  | /// Generate 250 items that all match the query, starting with the longest. | 
|  | /// Those long items should be dropped from the result set, and the short ones | 
|  | /// should be shown instead. | 
|  | macro_rules! generate { | 
|  | ([$($x:ident),+], $y:tt, $z:tt) => { | 
|  | $( | 
|  | generate!(@ $x, $y, $z); | 
|  | )+ | 
|  | }; | 
|  | (@ $x:ident , [$($y:ident),+], $z:tt) => { | 
|  | pub struct $x; | 
|  | $( | 
|  | generate!(@@ $x, $y, $z); | 
|  | )+ | 
|  | }; | 
|  | (@@ $x:ident , $y:ident, [$($z:ident: $zt:ident),+]) => { | 
|  | impl $y { | 
|  | pub fn $x($($z: $zt,)+) {} | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | pub struct First; | 
|  | pub struct Second; | 
|  | pub struct Third; | 
|  | pub struct Fourth; | 
|  | pub struct Fifth; | 
|  |  | 
|  | generate!( | 
|  | [a, b, c, d, e], | 
|  | [a, b, c, d, e, f, g, h, i, j], | 
|  | [a: First, b: Second, c: Third, d: Fourth, e: Fifth] | 
|  | ); | 
|  |  | 
|  | generate!( | 
|  | [f, g, h, i, j], | 
|  | [a, b, c, d, e, f, g, h, i, j], | 
|  | [a: First, b: Second, c: Third, d: Fourth] | 
|  | ); | 
|  |  | 
|  | generate!( | 
|  | [k, l, m, n, o], | 
|  | [a, b, c, d, e, f, g, h, i, j], | 
|  | [a: First, b: Second, c: Third] | 
|  | ); | 
|  |  | 
|  | generate!( | 
|  | // reverse it, just to make sure they're alphabetized | 
|  | // in the result set when all else is equal | 
|  | [t, s, r, q, p], | 
|  | [a, b, c, d, e, f, g, h, i, j], | 
|  | [a: First, b: Second] | 
|  | ); | 
|  |  | 
|  | generate!( | 
|  | [u, v, w, x, y], | 
|  | [a, b, c, d, e, f, g, h, i, j], | 
|  | [a: First] | 
|  | ); |