Как написать собственный атрибут, который внедряет код в функцию

Я дошел до вызова пользовательского атрибута:

#[plugin_registrar]
pub fn registrar(reg: &mut rustc::plugin::Registry) {
  use syntax::parse::token::intern;
  use syntax::ext::base;

  // Register the `#[dummy]` attribute.
  reg.register_syntax_extension(intern("dummy"),
  base::ItemDecorator(dummy_expand));
}

// Decorator for `dummy` attribute
pub fn dummy_expand(context: &mut ext::base::ExtCtxt, span: codemap::Span, meta_item: Gc<ast::MetaItem>, item: Gc<ast::Item>, push: |Gc<ast::Item>|) {
  match item.node {
    ast::ItemFn(decl, ref style, ref abi, ref generics, block) => {
      trace!("{}", decl);
      // ...? Add something here.
    }
    _ => {
      context.span_err(span, "dummy is only permissiable on functions");
    }
  }
}

Вызывается через:

#![feature(phase)]

#[phase(plugin)]
extern crate dummy_ext;

#[test]
#[dummy]
fn hello() {
  println!("Put something above this...");
}

... и я видел несколько примеров вещей, которые используютquote_expr!( ... ) чтобы сделать это, но я не очень понимаю их.

Допустим, я хочу добавить это утверждение (или это выражение?) В начало любой теговой функции#[dummy]:

println!("dummy");

Как мне этого добиться?

Ответы на вопрос(1)

Ваш ответ на вопрос