Skip to main content

pin_init_internal/
lib.rs

1// SPDX-License-Identifier: Apache-2.0 OR MIT
2
3// When fixdep scans this, it will find this string `CONFIG_RUSTC_VERSION_TEXT`
4// and thus add a dependency on `include/config/RUSTC_VERSION_TEXT`, which is
5// touched by Kconfig when the version string from the compiler changes.
6
7//! `pin-init` proc macros.
8
9// Documentation is done in the pin-init crate instead.
10#![allow(missing_docs)]
11
12use proc_macro::TokenStream;
13
14use crate::diagnostics::DiagCtxt;
15
16mod diagnostics;
17mod init;
18mod pin_data;
19mod pinned_drop;
20mod util;
21mod zeroable;
22
23#[proc_macro_attribute]
24pub fn pin_data(args: TokenStream, input: TokenStream) -> TokenStream {
25    DiagCtxt::for_item(|dcx| pin_data::expand_with_cfg(syn::parse(args)?, syn::parse(input)?, dcx))
26        .into()
27}
28
29#[proc_macro_attribute]
30pub fn pinned_drop(args: TokenStream, input: TokenStream) -> TokenStream {
31    DiagCtxt::for_item(|dcx| pinned_drop::pinned_drop(syn::parse(args)?, syn::parse(input)?, dcx))
32        .into()
33}
34
35#[proc_macro_derive(Zeroable)]
36pub fn derive_zeroable(input: TokenStream) -> TokenStream {
37    DiagCtxt::for_item(|dcx| zeroable::derive(syn::parse(input)?, dcx)).into()
38}
39
40#[proc_macro_derive(MaybeZeroable)]
41pub fn maybe_derive_zeroable(input: TokenStream) -> TokenStream {
42    DiagCtxt::for_item(|dcx| zeroable::maybe_derive(syn::parse(input)?, dcx)).into()
43}
44#[proc_macro]
45pub fn init(input: TokenStream) -> TokenStream {
46    DiagCtxt::for_expr(|dcx| {
47        init::expand_with_cfg(
48            syn::parse(input)?,
49            Some("::core::convert::Infallible"),
50            false,
51            dcx,
52        )
53    })
54    .into()
55}
56
57#[proc_macro]
58pub fn pin_init(input: TokenStream) -> TokenStream {
59    DiagCtxt::for_expr(|dcx| {
60        init::expand_with_cfg(
61            syn::parse(input)?,
62            Some("::core::convert::Infallible"),
63            true,
64            dcx,
65        )
66    })
67    .into()
68}