I found an example in the serde / bench project:
macro_rules! impl_nums {
($ty:ty, $dser_method:ident, $visitor_method:ident, $reader_method:ident) => {
fn $dser_method<V>(&mut self, mut visitor: V) -> Result<V::Value>
where V: Visitor
{
let value = try!(self.reader.$reader_method::<NativeEndian>());
visitor.$visitor_method(value)
}
};
}
impl_nums!(u16, deserialize_u16, visit_u16, read_u16);
impl_nums!(u32, deserialize_u32, visit_u32, read_u32);
....
, - concat_idents! github.