mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 19:56:44 +01:00
proc: cleanup
This commit is contained in:
parent
a16603fbc8
commit
bcbcc387a2
2 changed files with 21 additions and 46 deletions
|
|
@ -202,7 +202,7 @@ impl ToTokens for CommandVariant {
|
||||||
out.append(Group::new(Delimiter::Parenthesis, {
|
out.append(Group::new(Delimiter::Parenthesis, {
|
||||||
let mut out = TokenStream2::new();
|
let mut out = TokenStream2::new();
|
||||||
for arg in args.iter() {
|
for arg in args.iter() {
|
||||||
if let FnArg::Typed(PatType { attrs, pat, colon_token, ty }) = arg {
|
if let FnArg::Typed(PatType { ty, .. }) = arg {
|
||||||
out.append(LitStr::new(
|
out.append(LitStr::new(
|
||||||
&format!("{}", quote! { #ty }),
|
&format!("{}", quote! { #ty }),
|
||||||
Span::call_site()
|
Span::call_site()
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,7 @@ pub(crate) struct ExposeDef(pub(crate) ExposeMeta, pub(crate) ExposeImpl);
|
||||||
pub(crate) struct ExposeMeta;
|
pub(crate) struct ExposeMeta;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub(crate) struct ExposeImpl {
|
pub(crate) struct ExposeImpl(ItemImpl, BTreeMap<ExposeType, BTreeMap<String, Ident>>);
|
||||||
block: ItemImpl,
|
|
||||||
exposed: BTreeMap<ExposeType, BTreeMap<String, Ident>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
struct ExposeArm(String, Ident);
|
struct ExposeArm(String, Ident);
|
||||||
|
|
@ -49,26 +46,22 @@ impl Parse for ExposeImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Self { block, exposed })
|
Ok(Self(block, exposed))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToTokens for ExposeDef {
|
impl ToTokens for ExposeDef {
|
||||||
fn to_tokens (&self, out: &mut TokenStream2) {
|
fn to_tokens (&self, out: &mut TokenStream2) {
|
||||||
let Self(meta, data) = self;
|
let Self(_meta, data) = self;
|
||||||
for token in quote! { #data } {
|
write_quote_to(out, quote! { #data });
|
||||||
out.append(token)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToTokens for ExposeImpl {
|
impl ToTokens for ExposeImpl {
|
||||||
fn to_tokens (&self, out: &mut TokenStream2) {
|
fn to_tokens (&self, out: &mut TokenStream2) {
|
||||||
let Self { block, exposed } = self;
|
let Self(block, exposed) = self;
|
||||||
let target = &self.block.self_ty;
|
let target = &block.self_ty;
|
||||||
for token in quote! { #block } {
|
write_quote_to(out, quote! { #block });
|
||||||
out.append(token);
|
|
||||||
}
|
|
||||||
for (t, variants) in exposed.iter() {
|
for (t, variants) in exposed.iter() {
|
||||||
let formatted_type = format!("{}", quote! { #t });
|
let formatted_type = format!("{}", quote! { #t });
|
||||||
let predefined = match formatted_type.as_str() {
|
let predefined = match formatted_type.as_str() {
|
||||||
|
|
@ -89,8 +82,8 @@ impl ToTokens for ExposeImpl {
|
||||||
},
|
},
|
||||||
_ => quote! {},
|
_ => quote! {},
|
||||||
};
|
};
|
||||||
let values = variants.iter().map(|(k, v)|ExposeArm(k.clone(), v.clone()));
|
let values = variants.iter().map(ExposeArm::from);
|
||||||
let trait_impl = quote! {
|
write_quote_to(out, quote! {
|
||||||
impl ::tengri::dsl::Context<#t> for #target {
|
impl ::tengri::dsl::Context<#t> for #target {
|
||||||
fn get (&self, dsl: &::tengri::dsl::Value) -> Option<#t> {
|
fn get (&self, dsl: &::tengri::dsl::Value) -> Option<#t> {
|
||||||
Some(match dsl {
|
Some(match dsl {
|
||||||
|
|
@ -100,10 +93,7 @@ impl ToTokens for ExposeImpl {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
for token in trait_impl {
|
|
||||||
out.append(token);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if exposed.len() > 0 {
|
if exposed.len() > 0 {
|
||||||
//panic!("{}", quote! {#out});
|
//panic!("{}", quote! {#out});
|
||||||
|
|
@ -111,34 +101,19 @@ impl ToTokens for ExposeImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<(&String, &Ident)> for ExposeArm {
|
||||||
|
fn from ((a, b): (&String, &Ident)) -> Self {
|
||||||
|
Self(a.clone(), b.clone())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl ToTokens for ExposeArm {
|
impl ToTokens for ExposeArm {
|
||||||
fn to_tokens (&self, out: &mut TokenStream2) {
|
fn to_tokens (&self, out: &mut TokenStream2) {
|
||||||
let Self(key, value) = self;
|
let Self(key, value) = self;
|
||||||
out.append(Punct::new(':', Joint));
|
let key = LitStr::new(&key, Span::call_site());
|
||||||
out.append(Punct::new(':', Alone));
|
write_quote_to(out, quote! {
|
||||||
out.append(Ident::new("tengri", Span::call_site()));
|
::tengri::dsl::Value::Sym(#key) => self.#value()
|
||||||
out.append(Punct::new(':', Joint));
|
})
|
||||||
out.append(Punct::new(':', Alone));
|
|
||||||
out.append(Ident::new("dsl", Span::call_site()));
|
|
||||||
out.append(Punct::new(':', Joint));
|
|
||||||
out.append(Punct::new(':', Alone));
|
|
||||||
out.append(Ident::new("Value", Span::call_site()));
|
|
||||||
out.append(Punct::new(':', Joint));
|
|
||||||
out.append(Punct::new(':', Alone));
|
|
||||||
out.append(Ident::new("Sym", Span::call_site()));
|
|
||||||
out.append(Group::new(Delimiter::Parenthesis, {
|
|
||||||
let mut out = TokenStream2::new();
|
|
||||||
out.append(LitStr::new(&key, Span::call_site()).token());
|
|
||||||
out
|
|
||||||
}));
|
|
||||||
out.append(Punct::new('=', Joint));
|
|
||||||
out.append(Punct::new('>', Alone));
|
|
||||||
out.append(Ident::new("self", Span::call_site()));
|
|
||||||
out.append(Punct::new('.', Alone));
|
|
||||||
for token in quote! { #value } {
|
|
||||||
out.append(token);
|
|
||||||
}
|
|
||||||
out.append(Group::new(Delimiter::Parenthesis, TokenStream2::new()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue