Skip to content

Commit 7a631e8

Browse files
committed
Use trait based clamping
1 parent 6fc79b1 commit 7a631e8

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

node-graph/gcore/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use core::future::Future;
99
#[cfg(feature = "log")]
1010
extern crate log;
1111
pub use crate as graphene_core;
12+
pub use num_traits;
1213

1314
#[cfg(feature = "reflections")]
1415
pub use ctor;

node-graph/node-macro/src/codegen.rs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -177,34 +177,25 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result<TokenStre
177177

178178
let min_max_args = fields.iter().map(|field| match field {
179179
ParsedField::Regular {
180-
pat_ident,
181-
number_min,
182-
number_max,
183-
ty,
184-
..
180+
pat_ident, number_min, number_max, ..
185181
} => {
186182
let name = &pat_ident.ident;
187-
let mut tokens = quote! {};
188-
let is_generic = matches!(ty, syn::Type::Path(p) if p.path.segments.first().map_or(false, |seg| seg.ident.to_string().chars().next().unwrap().is_uppercase()));
189-
if !is_generic {
190-
if let Some(min) = number_min {
191-
tokens = quote! {
192-
#tokens
193-
let #name = if #name < (#min as #ty) { (#min as #ty) } else { #name };
194-
};
195-
}
183+
let mut tokens = quote!();
184+
if let Some(min) = number_min {
185+
tokens.extend(quote! {
186+
let #name = #graphene_core::num_traits::clamp_min(#name, #graphene_core::num_traits::FromPrimitive::from_f64(#min).unwrap());
187+
});
188+
}
196189

197-
if let Some(max) = number_max {
198-
tokens = quote! {
199-
#tokens
200-
let #name = if #name > (#max as #ty) { (#max as #ty) } else { #name };
201-
};
202-
}
190+
if let Some(max) = number_max {
191+
tokens.extend(quote! {
192+
let #name = #graphene_core::num_traits::clamp_max(#name, #graphene_core::num_traits::FromPrimitive::from_f64(#max).unwrap());
193+
});
203194
}
204195
tokens
205196
}
206197
ParsedField::Node { .. } => {
207-
quote! {}
198+
quote!()
208199
}
209200
});
210201

@@ -270,7 +261,7 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result<TokenStre
270261
fn eval(&'n self, __input: #input_type) -> Self::Output {
271262
Box::pin(async move {
272263
#(#eval_args)*
273-
#(#min_max_args)*
264+
#(#min_max_args)*
274265
self::#fn_name(__input #(, #field_names)*) #await_keyword
275266
})
276267
}

0 commit comments

Comments
 (0)