Fully qualified name for use in macro

I define a macro that generates code using a function defined in the same crate. I use the function's fully qualified name in order to be able to use it from any module:

mod a {
  fn f() { println!("hi"); }
}
mod b {
  #[macro_export]
  macro_rules! m { () => { crate::a::f(); }}
}
mod c {
  fn g() { crate::m!(); }
}

If I use that macro from another crate, I get a compiler error saying that there is no crate::a::f. That makes sense as far as it goes, but I'd like to be able to write macros that are usable in both crates.

I could refactor the code so that the macros are defined in a crate by themselves, but is there a less invasive solution?
Is there a way to write a fully qualified name that is resolved correctly both from the same crate and from another crate?

I believe you can say $crate to refer to the crate that defines the macro.

2 Likes

thank you!

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.