Skip to content

Commit 8419d81

Browse files
committed
Parametrize needs_bounds_derive and collect_bounds with IS_ASYNC
1 parent 475a6ce commit 8419d81

File tree

4 files changed

+18
-54
lines changed

4 files changed

+18
-54
lines changed

borsh-derive/src/internals/attributes/field/mod.rs

+6-24
Original file line numberDiff line numberDiff line change
@@ -221,39 +221,21 @@ impl Attributes {
221221
Ok(result)
222222
}
223223

224-
pub(crate) fn needs_bounds_derive(&self, ty: BoundType) -> bool {
225-
let predicates = self.get_bounds(ty);
224+
pub(crate) fn needs_bounds_derive<const IS_ASYNC: bool>(&self, ty: BoundType) -> bool {
225+
let predicates = self.get_bounds::<IS_ASYNC>(ty);
226226
predicates.is_none()
227227
}
228228

229-
pub(crate) fn needs_async_bounds_derive(&self, ty: BoundType) -> bool {
230-
let predicates = self.get_async_bounds(ty);
231-
predicates.is_none()
232-
}
233-
234-
fn get_bounds(&self, ty: BoundType) -> Option<Vec<WherePredicate>> {
235-
let bounds = self.bounds.as_ref();
236-
bounds.and_then(|bounds| match ty {
237-
BoundType::Serialize => bounds.serialize.clone(),
238-
BoundType::Deserialize => bounds.deserialize.clone(),
239-
})
240-
}
241-
242-
fn get_async_bounds(&self, ty: BoundType) -> Option<Vec<WherePredicate>> {
243-
let bounds = self.async_bounds.as_ref();
229+
fn get_bounds<const IS_ASYNC: bool>(&self, ty: BoundType) -> Option<Vec<WherePredicate>> {
230+
let bounds = if IS_ASYNC { self.async_bounds.as_ref() } else { self.bounds.as_ref() };
244231
bounds.and_then(|bounds| match ty {
245232
BoundType::Serialize => bounds.serialize.clone(),
246233
BoundType::Deserialize => bounds.deserialize.clone(),
247234
})
248235
}
249236

250-
pub(crate) fn collect_bounds(&self, ty: BoundType) -> Vec<WherePredicate> {
251-
let predicates = self.get_bounds(ty);
252-
predicates.unwrap_or_default()
253-
}
254-
255-
pub(crate) fn collect_async_bounds(&self, ty: BoundType) -> Vec<WherePredicate> {
256-
let predicates = self.get_async_bounds(ty);
237+
pub(crate) fn collect_bounds<const IS_ASYNC: bool>(&self, ty: BoundType) -> Vec<WherePredicate> {
238+
let predicates = self.get_bounds::<IS_ASYNC>(ty);
257239
predicates.unwrap_or_default()
258240
}
259241
}

borsh-derive/src/internals/deserialize/mod.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,10 @@ fn process_field<const IS_ASYNC: bool>(
5151
) -> syn::Result<()> {
5252
let parsed = field::Attributes::parse(&field.attrs)?;
5353

54-
generics.overrides.extend(if IS_ASYNC {
55-
parsed.collect_async_bounds(BoundType::Deserialize)
56-
} else {
57-
parsed.collect_bounds(BoundType::Deserialize)
58-
});
59-
let needs_bounds_derive = if IS_ASYNC {
60-
parsed.needs_async_bounds_derive(BoundType::Deserialize)
61-
} else {
62-
parsed.needs_bounds_derive(BoundType::Deserialize)
63-
};
54+
generics
55+
.overrides
56+
.extend(parsed.collect_bounds::<IS_ASYNC>(BoundType::Deserialize));
57+
let needs_bounds_derive = parsed.needs_bounds_derive::<IS_ASYNC>(BoundType::Deserialize);
6458

6559
let field_name = field.ident.as_ref();
6660
let delta = if parsed.skip {

borsh-derive/src/internals/serialize/enums/mod.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -218,16 +218,10 @@ fn process_field<const IS_ASYNC: bool>(
218218
) -> syn::Result<()> {
219219
let parsed = field::Attributes::parse(&field.attrs)?;
220220

221-
let needs_bounds_derive = if IS_ASYNC {
222-
parsed.needs_async_bounds_derive(BoundType::Serialize)
223-
} else {
224-
parsed.needs_bounds_derive(BoundType::Serialize)
225-
};
226-
generics.overrides.extend(if IS_ASYNC {
227-
parsed.collect_async_bounds(BoundType::Serialize)
228-
} else {
229-
parsed.collect_bounds(BoundType::Serialize)
230-
});
221+
let needs_bounds_derive = parsed.needs_bounds_derive::<IS_ASYNC>(BoundType::Serialize);
222+
generics
223+
.overrides
224+
.extend(parsed.collect_bounds::<IS_ASYNC>(BoundType::Serialize));
231225

232226
let field_variant_header = field_id.enum_variant_header(parsed.skip);
233227
if let Some(field_variant_header) = field_variant_header {

borsh-derive/src/internals/serialize/structs/mod.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,10 @@ fn process_field<const IS_ASYNC: bool>(
8787
) -> syn::Result<()> {
8888
let parsed = field::Attributes::parse(&field.attrs)?;
8989

90-
let needs_bounds_derive = if IS_ASYNC {
91-
parsed.needs_async_bounds_derive(BoundType::Serialize)
92-
} else {
93-
parsed.needs_bounds_derive(BoundType::Serialize)
94-
};
95-
generics.overrides.extend(if IS_ASYNC {
96-
parsed.collect_async_bounds(BoundType::Serialize)
97-
} else {
98-
parsed.collect_bounds(BoundType::Serialize)
99-
});
90+
let needs_bounds_derive = parsed.needs_bounds_derive::<IS_ASYNC>(BoundType::Serialize);
91+
generics
92+
.overrides
93+
.extend(parsed.collect_bounds::<IS_ASYNC>(BoundType::Serialize));
10094

10195
if !parsed.skip {
10296
let delta = field_id.serialize_output::<IS_ASYNC>(

0 commit comments

Comments
 (0)