小编Akr*_*ime的帖子

为什么 Rust 找不到使用 proc_macro_attribute 生成的枚举的方法?

我正在尝试编写将接受 Rust 枚举的程序宏,例如

#[repr(u8)]
enum Ty {
    A,
    B
}
Run Code Online (Sandbox Code Playgroud)

并为枚举生成一个方法,让我将 u8 转换为允许的变体,如下所示

fn from_byte(byte: u8) -> Ty {
    match {
        0 => Ty::A,
        1 => Ty::B,
        _ => unreachable!()
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我使用proc_macrolib实现的。(没有外部库)

#![feature(proc_macro_diagnostic)]
#![feature(proc_macro_quote)]
extern crate proc_macro;

use proc_macro::{TokenStream, Diagnostic, Level, TokenTree, Ident, Group, Literal};
use proc_macro::quote;

fn report_error(tt: TokenTree, msg: &str) {
    Diagnostic::spanned(tt.span(), Level::Error, msg).emit();
}

fn variants_from_group(group: Group) -> Vec<Ident> {
    let mut iter = group.stream().into_iter();
    let mut res = vec![];
    while let Some(TokenTree::Ident(id)) = …
Run Code Online (Sandbox Code Playgroud)

enums rust rust-proc-macros

5
推荐指数
1
解决办法
340
查看次数

标签 统计

enums ×1

rust ×1

rust-proc-macros ×1