Skip to content

Commit 8d807e2

Browse files
refactor(derive): remove hidden functions for matching enum variants to str
1 parent c930be5 commit 8d807e2

File tree

1 file changed

+23
-39
lines changed

1 file changed

+23
-39
lines changed

benzina-derive/src/enum_derive.rs

Lines changed: 23 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -155,40 +155,21 @@ impl ToTokens for Enum {
155155

156156
let from_bytes_arms = variants
157157
.iter()
158-
.map(|variant| variant.gen_from_bytes(*rename_all));
159-
let to_str_arms = variants
158+
.map(|variant| variant.gen_from_bytes(*rename_all))
159+
.collect::<Vec<_>>();
160+
let to_byte_str_arms = variants
160161
.iter()
161-
.map(|variant| variant.gen_to_str(*rename_all));
162-
163-
tokens.append_all(quote! {
164-
impl #ident {
165-
#[doc(hidden)]
166-
fn __benzina04_from_bytes(val: &[u8]) -> #crate_name::__private::std::option::Option<Self> {
167-
match val {
168-
#(#from_bytes_arms)*
169-
_ => #crate_name::__private::std::option::Option::None,
170-
}
171-
}
172-
173-
#[doc(hidden)]
174-
fn __benzina04_as_str(&self) -> &'static str {
175-
match self {
176-
#(#to_str_arms)*
177-
}
178-
}
179-
}
180-
});
162+
.map(|variant| variant.gen_to_byte_str(*rename_all))
163+
.collect::<Vec<_>>();
181164

182165
#[cfg(feature = "postgres")]
183166
tokens.append_all(quote! {
184167
#[automatically_derived]
185168
impl #crate_name::__private::diesel::deserialize::FromSql<#sql_type, #crate_name::__private::diesel::pg::Pg> for #ident {
186169
fn from_sql(bytes: #crate_name::__private::diesel::pg::PgValue<'_>) -> #crate_name::__private::diesel::deserialize::Result<Self> {
187-
match Self::__benzina04_from_bytes(bytes.as_bytes()) {
188-
#crate_name::__private::std::option::Option::Some(this) => {
189-
#crate_name::__private::std::result::Result::Ok(this)
190-
},
191-
#crate_name::__private::std::option::Option::None => {
170+
match bytes.as_bytes() {
171+
#(#from_bytes_arms)*
172+
_ => {
192173
#crate_name::__private::std::result::Result::Err(
193174
#crate_name::__private::std::convert::Into::into(
194175
"Unrecognized enum variant"
@@ -202,8 +183,10 @@ impl ToTokens for Enum {
202183
#[automatically_derived]
203184
impl #crate_name::__private::diesel::serialize::ToSql<#sql_type, #crate_name::__private::diesel::pg::Pg> for #ident {
204185
fn to_sql<'b>(&'b self, out: &mut #crate_name::__private::diesel::serialize::Output<'b, '_, #crate_name::__private::diesel::pg::Pg>) -> #crate_name::__private::diesel::serialize::Result {
205-
let sql_val = self.__benzina04_as_str();
206-
#crate_name::__private::std::io::Write::write_all(out, sql_val.as_bytes())?;
186+
let s = match self {
187+
#(#to_byte_str_arms)*
188+
};
189+
#crate_name::__private::std::io::Write::write_all(out, s)?;
207190

208191
#crate_name::__private::std::result::Result::Ok(
209192
#crate_name::__private::diesel::serialize::IsNull::No
@@ -217,11 +200,9 @@ impl ToTokens for Enum {
217200
#[automatically_derived]
218201
impl #crate_name::__private::diesel::deserialize::FromSql<#sql_type, #crate_name::__private::diesel::mysql::Mysql> for #ident {
219202
fn from_sql(bytes: #crate_name::__private::diesel::mysql::MysqlValue<'_>) -> #crate_name::__private::diesel::deserialize::Result<Self> {
220-
match Self::__benzina04_from_bytes(bytes.as_bytes()) {
221-
#crate_name::__private::std::option::Option::Some(this) => {
222-
#crate_name::__private::std::result::Result::Ok(this)
223-
},
224-
#crate_name::__private::std::option::Option::None => {
203+
match bytes.as_bytes() {
204+
#(#from_bytes_arms)*
205+
_ => {
225206
#crate_name::__private::std::result::Result::Err(
226207
#crate_name::__private::std::convert::Into::into(
227208
"Unrecognized enum variant"
@@ -235,8 +216,10 @@ impl ToTokens for Enum {
235216
#[automatically_derived]
236217
impl #crate_name::__private::diesel::serialize::ToSql<#sql_type, #crate_name::__private::diesel::mysql::Mysql> for #ident {
237218
fn to_sql<'b>(&'b self, out: &mut #crate_name::__private::diesel::serialize::Output<'b, '_, #crate_name::__private::diesel::mysql::Mysql>) -> #crate_name::__private::diesel::serialize::Result {
238-
let sql_val = self.__benzina04_as_str();
239-
#crate_name::__private::std::io::Write::write_all(out, sql_val.as_bytes())?;
219+
let s = match self {
220+
#(#to_byte_str_arms)*
221+
};
222+
#crate_name::__private::std::io::Write::write_all(out, s)?;
240223

241224
#crate_name::__private::std::result::Result::Ok(#crate_name::__private::diesel::serialize::IsNull::No)
242225
}
@@ -263,11 +246,11 @@ impl EnumVariant {
263246
let original_name_ident = Ident::new(original_name, *original_name_span);
264247
let rename_bytes = LitByteStr::new(rename.as_bytes(), *original_name_span);
265248
quote! {
266-
#rename_bytes => #crate_name::__private::std::option::Option::Some(Self::#original_name_ident),
249+
#rename_bytes => #crate_name::__private::std::result::Result::Ok(Self::#original_name_ident),
267250
}
268251
}
269252

270-
fn gen_to_str(&self, rename_rule: RenameRule) -> impl ToTokens {
253+
fn gen_to_byte_str(&self, rename_rule: RenameRule) -> impl ToTokens {
271254
let Self {
272255
original_name,
273256
original_name_span,
@@ -281,8 +264,9 @@ impl EnumVariant {
281264
.unwrap_or_else(|| rename_rule.format(original_name));
282265

283266
let original_name_ident = Ident::new(original_name, *original_name_span);
267+
let rename_bytes = LitByteStr::new(rename.as_bytes(), *original_name_span);
284268
quote! {
285-
Self::#original_name_ident => #rename,
269+
Self::#original_name_ident => #rename_bytes,
286270
}
287271
}
288272
}

0 commit comments

Comments
 (0)