1#![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}