Do Rust macros work inside trait definitions? -


i can build structs , enums using macros not traits. bug or how traits work missing? here simple example fails build:

macro_rules! fun{   () => { fn hello(); } }  macro_rules! full_fun{   () => { fn hello(){} } }  // fails with: // <anon>:13:8: 13:11 error: expected 1 of `const`, `extern`, `fn`, `type`, or `unsafe`, found `fun` // <anon>:13        fun!(); macro_rules! trait_macro{   ($name:ident) => {      pub trait $name {        fun!();      }  };  }  macro_rules! struct_macro{   ($name:ident) => {      pub struct $name;       impl $name {        full_fun!();      }  }; }  // can add functions impl struct_macro!{monster} // cannot add functions trait trait_macro!{monster}   fn main() {  } 

according the rust documentation on macros, macro can expanded as:

  • zero or more items
  • zero or more methods,
  • an expression,
  • a statement, or
  • a pattern.

your full_fun becomes method, think declaration inside trait doesn't count. (i haven't found exact reference, though).

even if were, wouldn't help: due macro hygiene rules, hello defined couldn't referenced elsewhere, unique identifier different other - ie fun!() macro not declaring same function implemented full_fun!().


Comments

Popular posts from this blog

sequelize.js - Sequelize group by with association includes id -

android - Robolectric "INTERNET permission is required" -

java - Android raising EPERM (Operation not permitted) when attempting to send UDP packet after network connection -