refactor: Use itertools to simplify code

This commit is contained in:
2025-09-17 03:26:17 +02:00
parent a5f4b67216
commit 326af7ea83
3 changed files with 23 additions and 14 deletions

16
Cargo.lock generated
View File

@@ -29,6 +29,12 @@ version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8975ffdaa0ef3661bfe02dbdcc06c9f829dfafe6a3c474de366a8d5e44276921"
[[package]]
name = "either"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "encode_unicode"
version = "1.0.0"
@@ -74,6 +80,15 @@ dependencies = [
"similar",
]
[[package]]
name = "itertools"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.15"
@@ -100,6 +115,7 @@ name = "lua_typed_macro"
version = "0.1.0"
dependencies = [
"convert_case",
"itertools",
"proc-macro2",
"quote",
"syn",

View File

@@ -11,3 +11,4 @@ proc-macro2 = "1.0.101"
quote = "1.0.40"
syn = { version = "2.0.106", features = ["extra-traits"] }
convert_case = "0.8.0"
itertools = "0.14.0"

View File

@@ -3,6 +3,7 @@
use std::ops::Deref;
use convert_case::{Case, Casing};
use itertools::Itertools;
use proc_macro2::TokenStream as TokenStream2;
use quote::{ToTokens, quote};
use syn::{DataEnum, DataStruct, DeriveInput, LitStr, Token, parse_macro_input, spanned::Spanned};
@@ -244,24 +245,15 @@ impl ExtTaggedEnum {
fields,
})
})
.partition(|variant| variant.is_ok());
.partition_result();
if let Some(err) = err
.into_iter()
.map(|err| err.expect_err("Should only contain err results"))
.reduce(|mut acc, err| {
acc.combine(err);
acc
})
{
if let Some(err) = err.into_iter().reduce(|mut acc, err| {
acc.combine(err);
acc
}) {
return Err(err);
}
let variants = variants
.into_iter()
.map(|variant| variant.expect("Should only contain ok results"))
.collect();
Ok(Self { tag, variants })
}
}