#token #quote #derive #to-tokens

derive-quote-to-tokens

派生 quote::ToTokens

2个版本

0.1.1 2024年3月17日
0.1.0 2023年9月22日

1792进程宏

每月下载量 32
用于 4 个crate(2个直接使用)

Apache-2.0 OR MIT

7KB
101 代码行

#[derive(ToTokens)],对每个字段调用 quote::ToTokens。不多也不少。

use derive_quote_to_tokens::ToTokens;
use quote::{ToTokens, quote};
use proc_macro2::Span;
use syn::{Token, Ident};

#[derive(ToTokens)]
struct Tag {
    lt: Token![<],
    inner: Ident,
    gt: Token![>],
}

let tag = /* snip */
assert_eq!(
    tag.to_token_stream().to_string(),
    quote! { <main> }.to_string(),
);

枚举也适用。

#[derive(ToTokens)]
enum Arrow {
     Left(Token![<], Token![-]),
    Right(Token![-], Token![>]),
}

lib.rs:

#[derive(ToTokens)],对每个字段调用 quote::ToTokens。不多也不少。

use derive_quote_to_tokens::ToTokens;
use quote::{ToTokens, quote};
use proc_macro2::Span;
use syn::{Token, Ident};

#[derive(ToTokens)]
struct Tag {
    lt: Token![<],
    inner: Ident,
    gt: Token![>],
}

let tag = /* snip */
assert_eq!(
    tag.to_token_stream().to_string(),
    quote! { <main> }.to_string(),
);

枚举也适用。

#[derive(ToTokens)]
enum Arrow {
     Left(Token![<], Token![-]),
    Right(Token![-], Token![>]),
}

依赖项

~0.4–0.8MB
~20K SLoC