rustrust-compiler-plugin

How to get struct fields and fields type in a compiler plugin?


I want to generate a HashMap which use struct fields as key, and use usize integer as value.

pub struct Article {
    title: String,
    content: String,
    category: String,
    comments: Vec<Comment>
}

pub struct Comment {
    content: String
}

My expected output is:

{
    title: 0,
    content: 1,
    category: 2
    comments[].content: 3
}

My solution is impl my trait FieldsMapping for both Article and Comment:

pub trait FieldsMapping {
    fn get_fields_map(&self) -> HashMap<String, usize>;
}

I want to write a compiler plugin for custom derive FieldsMapping.

How I get all fields within compiler plugin? And how can I know that fields type is Vec or other?


Solution

  • You don't.

    Compiler plugins (i.e. procedural macros) are expanded before this information exists, so you can't access it. No, you can't delay expansion until types exist. No, if you turn it into a lint, you can't generate code, which then defeats the purpose of having a procedural macro.