#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
use proc_macro::TokenStream;
use std::any::Any;
use syn::{parse_macro_input, DeriveInput, Data, DataStruct, Fields};
use quote::quote;
#[proc_macro_derive(Builder)]
pub fn derive(input: TokenStream) -> TokenStream {
let input = match ::syn::parse::<DeriveInput>(input) {
::syn::__private::Ok(data) => data,
::syn::__private::Err(err) => {
return ::syn::__private::TokenStream::from(err.to_compile_error());
}
};
let st_name = &input.ident;
let fields = match input.data {
Data::Struct(DataStruct { fields: Fields::Named(fields), .. }) => fields.named,
_ => {
::core::panicking::panic_fmt(
format_args!("this derive macro only works on structs with named fields"),
);
}
};
let builder_fields = &fields
.iter()
.map(|field| {
let field_name = &field.ident;
let field_type = &field.ty;
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&field_name, &mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "Option");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&field_type, &mut _s);
::quote::__private::push_gt(&mut _s);
_s
}
})
.collect::<Vec<_>>();
let expand = {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "pub");
::quote::__private::push_ident(&mut _s, "struct");
::quote::__private::push_ident(&mut _s, "CommandBuilder");
::quote::__private::push_group(
&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::ThereIsNoIteratorInRepetition;
#[allow(unused_mut)]
let (mut builder_fields, i) = builder_fields.quote_into_iter();
let has_iter = has_iter | i;
let _: ::quote::__private::HasIterator = has_iter;
while true {
let builder_fields = match builder_fields.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 {
::quote::__private::push_comma(&mut _s);
}
_i += 1;
::quote::ToTokens::to_tokens(&builder_fields, &mut _s);
}
}
_s
},
);
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(
&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "automatically_derived");
_s
},
);
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&st_name, &mut _s);
::quote::__private::push_group(
&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "pub");
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "builder");
::quote::__private::push_group(
&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new(),
);
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_ident(&mut _s, "CommandBuilder");
::quote::__private::push_group(
&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "CommandBuilder");
::quote::__private::push_group(
&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::ThereIsNoIteratorInRepetition;
#[allow(unused_mut)]
let (mut builder_fields, i) = builder_fields
.quote_into_iter();
let has_iter = has_iter | i;
let _: ::quote::__private::HasIterator = has_iter;
while true {
let builder_fields = match builder_fields.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 {
::quote::__private::push_comma(&mut _s);
}
_i += 1;
::quote::ToTokens::to_tokens(&builder_fields, &mut _s);
::quote::__private::push_colon(&mut _s);
::std::io::_print(
format_args!("{0}\n", "**************************************"),
);
};
TokenStream::from(expand)
}
const _: () = {
extern crate proc_macro;
#[rustc_proc_macro_decls]
#[used]
#[allow(deprecated)]
static _DECLS: &[proc_macro::bridge::client::ProcMacro] = &[
proc_macro::bridge::client::ProcMacro::custom_derive("Builder", &[], derive),
];
};