Rename ArgList::push
methods to with
and add new push
methods which take &mut self
(#16567)
# Objective The `ArgList::push` family of methods consume `self` and return a new `ArgList` which means they can't be used with `&mut ArgList` references. ```rust fn foo(args: &mut ArgList) { args.push_owned(47_i32); // doesn't work :( } ``` It's typical for `push` methods on other existing types to take `&mut self`. ## Solution Renamed the existing push methods to `with_arg`, `with_ref` etc and added new `push` methods which take `&mut self`. ## Migration Guide Uses of the `ArgList::push` methods should be replaced with the `with` counterpart. <details> | old | new | | --- | --- | | push_arg | with_arg | | push_ref | with_ref | | push_mut | with_mut | | push_owned | with_owned | | push_boxed | with_boxed | </details>
This commit is contained in:
parent
514a35c656
commit
15f00278e7
@ -65,7 +65,7 @@ fn call(c: &mut Criterion) {
|
|||||||
.bench_function("function", |b| {
|
.bench_function("function", |b| {
|
||||||
let add = add.into_function();
|
let add = add.into_function();
|
||||||
b.iter_batched(
|
b.iter_batched(
|
||||||
|| ArgList::new().push_owned(75_i32).push_owned(25_i32),
|
|| ArgList::new().with_owned(75_i32).with_owned(25_i32),
|
||||||
|args| add.call(args),
|
|args| add.call(args),
|
||||||
BatchSize::SmallInput,
|
BatchSize::SmallInput,
|
||||||
);
|
);
|
||||||
@ -74,7 +74,7 @@ fn call(c: &mut Criterion) {
|
|||||||
let capture = 25;
|
let capture = 25;
|
||||||
let add = (|a: i32| a + capture).into_function();
|
let add = (|a: i32| a + capture).into_function();
|
||||||
b.iter_batched(
|
b.iter_batched(
|
||||||
|| ArgList::new().push_owned(75_i32),
|
|| ArgList::new().with_owned(75_i32),
|
||||||
|args| add.call(args),
|
|args| add.call(args),
|
||||||
BatchSize::SmallInput,
|
BatchSize::SmallInput,
|
||||||
);
|
);
|
||||||
@ -83,7 +83,7 @@ fn call(c: &mut Criterion) {
|
|||||||
let mut capture = 25;
|
let mut capture = 25;
|
||||||
let mut add = (|a: i32| capture += a).into_function_mut();
|
let mut add = (|a: i32| capture += a).into_function_mut();
|
||||||
b.iter_batched(
|
b.iter_batched(
|
||||||
|| ArgList::new().push_owned(75_i32),
|
|| ArgList::new().with_owned(75_i32),
|
||||||
|args| add.call(args),
|
|args| add.call(args),
|
||||||
BatchSize::SmallInput,
|
BatchSize::SmallInput,
|
||||||
);
|
);
|
||||||
@ -246,7 +246,7 @@ fn call_overload(c: &mut Criterion) {
|
|||||||
|| {
|
|| {
|
||||||
(
|
(
|
||||||
simple::<i8>.into_function().with_overload(simple::<i16>),
|
simple::<i8>.into_function().with_overload(simple::<i16>),
|
||||||
ArgList::new().push_owned(75_i8).push_owned(25_i8),
|
ArgList::new().with_owned(75_i8).with_owned(25_i8),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|(func, args)| func.call(args),
|
|(func, args)| func.call(args),
|
||||||
@ -263,16 +263,16 @@ fn call_overload(c: &mut Criterion) {
|
|||||||
complex::<i16, i32, i64, i128, u8, u16, u32, u64, u128, i8>,
|
complex::<i16, i32, i64, i128, u8, u16, u32, u64, u128, i8>,
|
||||||
),
|
),
|
||||||
ArgList::new()
|
ArgList::new()
|
||||||
.push_owned(1_i8)
|
.with_owned(1_i8)
|
||||||
.push_owned(2_i16)
|
.with_owned(2_i16)
|
||||||
.push_owned(3_i32)
|
.with_owned(3_i32)
|
||||||
.push_owned(4_i64)
|
.with_owned(4_i64)
|
||||||
.push_owned(5_i128)
|
.with_owned(5_i128)
|
||||||
.push_owned(6_u8)
|
.with_owned(6_u8)
|
||||||
.push_owned(7_u16)
|
.with_owned(7_u16)
|
||||||
.push_owned(8_u32)
|
.with_owned(8_u32)
|
||||||
.push_owned(9_u64)
|
.with_owned(9_u64)
|
||||||
.push_owned(10_u128),
|
.with_owned(10_u128),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|(func, args)| func.call(args),
|
|(func, args)| func.call(args),
|
||||||
@ -288,7 +288,7 @@ fn call_overload(c: &mut Criterion) {
|
|||||||
.with_overload(simple::<i16>)
|
.with_overload(simple::<i16>)
|
||||||
.with_overload(simple::<i32>)
|
.with_overload(simple::<i32>)
|
||||||
.with_overload(simple::<i64>),
|
.with_overload(simple::<i64>),
|
||||||
ArgList::new().push_owned(75_i32).push_owned(25_i32),
|
ArgList::new().with_owned(75_i32).with_owned(25_i32),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|(func, args)| func.call(args),
|
|(func, args)| func.call(args),
|
||||||
@ -311,16 +311,16 @@ fn call_overload(c: &mut Criterion) {
|
|||||||
complex::<i64, i128, u8, u16, u32, u64, u128, i8, i16, i32>,
|
complex::<i64, i128, u8, u16, u32, u64, u128, i8, i16, i32>,
|
||||||
),
|
),
|
||||||
ArgList::new()
|
ArgList::new()
|
||||||
.push_owned(1_i32)
|
.with_owned(1_i32)
|
||||||
.push_owned(2_i64)
|
.with_owned(2_i64)
|
||||||
.push_owned(3_i128)
|
.with_owned(3_i128)
|
||||||
.push_owned(4_u8)
|
.with_owned(4_u8)
|
||||||
.push_owned(5_u16)
|
.with_owned(5_u16)
|
||||||
.push_owned(6_u32)
|
.with_owned(6_u32)
|
||||||
.push_owned(7_u64)
|
.with_owned(7_u64)
|
||||||
.push_owned(8_u128)
|
.with_owned(8_u128)
|
||||||
.push_owned(9_i8)
|
.with_owned(9_i8)
|
||||||
.push_owned(10_i16),
|
.with_owned(10_i16),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|(func, args)| func.call(args),
|
|(func, args)| func.call(args),
|
||||||
@ -342,7 +342,7 @@ fn call_overload(c: &mut Criterion) {
|
|||||||
.with_overload(simple::<u32>)
|
.with_overload(simple::<u32>)
|
||||||
.with_overload(simple::<u64>)
|
.with_overload(simple::<u64>)
|
||||||
.with_overload(simple::<u128>),
|
.with_overload(simple::<u128>),
|
||||||
ArgList::new().push_owned(75_u8).push_owned(25_u8),
|
ArgList::new().with_owned(75_u8).with_owned(25_u8),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|(func, args)| func.call(args),
|
|(func, args)| func.call(args),
|
||||||
@ -383,16 +383,16 @@ fn call_overload(c: &mut Criterion) {
|
|||||||
complex::<u128, i8, i16, i32, i64, i128, u8, u16, u32, u64>,
|
complex::<u128, i8, i16, i32, i64, i128, u8, u16, u32, u64>,
|
||||||
),
|
),
|
||||||
ArgList::new()
|
ArgList::new()
|
||||||
.push_owned(1_u8)
|
.with_owned(1_u8)
|
||||||
.push_owned(2_u16)
|
.with_owned(2_u16)
|
||||||
.push_owned(3_u32)
|
.with_owned(3_u32)
|
||||||
.push_owned(4_u64)
|
.with_owned(4_u64)
|
||||||
.push_owned(5_u128)
|
.with_owned(5_u128)
|
||||||
.push_owned(6_i8)
|
.with_owned(6_i8)
|
||||||
.push_owned(7_i16)
|
.with_owned(7_i16)
|
||||||
.push_owned(8_i32)
|
.with_owned(8_i32)
|
||||||
.push_owned(9_i64)
|
.with_owned(9_i64)
|
||||||
.push_owned(10_i128),
|
.with_owned(10_i128),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|(func, args)| func.call(args),
|
|(func, args)| func.call(args),
|
||||||
|
@ -52,7 +52,7 @@ impl<'a> Arg<'a> {
|
|||||||
/// let a = 1u32;
|
/// let a = 1u32;
|
||||||
/// let b = 2u32;
|
/// let b = 2u32;
|
||||||
/// let mut c = 3u32;
|
/// let mut c = 3u32;
|
||||||
/// let mut args = ArgList::new().push_owned(a).push_ref(&b).push_mut(&mut c);
|
/// let mut args = ArgList::new().with_owned(a).with_ref(&b).with_mut(&mut c);
|
||||||
///
|
///
|
||||||
/// let a = args.take::<u32>().unwrap();
|
/// let a = args.take::<u32>().unwrap();
|
||||||
/// assert_eq!(a, 1);
|
/// assert_eq!(a, 1);
|
||||||
@ -78,7 +78,7 @@ impl<'a> Arg<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let value = 123u32;
|
/// let value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_owned(value);
|
/// let mut args = ArgList::new().with_owned(value);
|
||||||
/// let value = args.take_owned::<u32>().unwrap();
|
/// let value = args.take_owned::<u32>().unwrap();
|
||||||
/// assert_eq!(value, 123);
|
/// assert_eq!(value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -113,7 +113,7 @@ impl<'a> Arg<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let value = 123u32;
|
/// let value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_ref(&value);
|
/// let mut args = ArgList::new().with_ref(&value);
|
||||||
/// let value = args.take_ref::<u32>().unwrap();
|
/// let value = args.take_ref::<u32>().unwrap();
|
||||||
/// assert_eq!(*value, 123);
|
/// assert_eq!(*value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -152,7 +152,7 @@ impl<'a> Arg<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let mut value = 123u32;
|
/// let mut value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_mut(&mut value);
|
/// let mut args = ArgList::new().with_mut(&mut value);
|
||||||
/// let value = args.take_mut::<u32>().unwrap();
|
/// let value = args.take_mut::<u32>().unwrap();
|
||||||
/// assert_eq!(*value, 123);
|
/// assert_eq!(*value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -21,15 +21,15 @@ use alloc::{
|
|||||||
/// let mut baz = 789;
|
/// let mut baz = 789;
|
||||||
/// let args = ArgList::new()
|
/// let args = ArgList::new()
|
||||||
/// // Push an owned argument
|
/// // Push an owned argument
|
||||||
/// .push_owned(foo)
|
/// .with_owned(foo)
|
||||||
/// // Push an owned and boxed argument
|
/// // Push an owned and boxed argument
|
||||||
/// .push_boxed(Box::new(foo))
|
/// .with_boxed(Box::new(foo))
|
||||||
/// // Push a reference argument
|
/// // Push a reference argument
|
||||||
/// .push_ref(&bar)
|
/// .with_ref(&bar)
|
||||||
/// // Push a mutable reference argument
|
/// // Push a mutable reference argument
|
||||||
/// .push_mut(&mut baz)
|
/// .with_mut(&mut baz)
|
||||||
/// // Push a manually constructed argument
|
/// // Push a manually constructed argument
|
||||||
/// .push_arg(ArgValue::Ref(&3.14));
|
/// .with_arg(ArgValue::Ref(&3.14));
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// [arguments]: Arg
|
/// [arguments]: Arg
|
||||||
@ -58,7 +58,7 @@ impl<'a> ArgList<'a> {
|
|||||||
///
|
///
|
||||||
/// If an argument was previously removed from the beginning of the list,
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
/// this method will also re-index the list.
|
/// this method will also re-index the list.
|
||||||
pub fn push_arg(mut self, arg: ArgValue<'a>) -> Self {
|
pub fn push_arg(&mut self, arg: ArgValue<'a>) {
|
||||||
if self.needs_reindex {
|
if self.needs_reindex {
|
||||||
for (index, arg) in self.list.iter_mut().enumerate() {
|
for (index, arg) in self.list.iter_mut().enumerate() {
|
||||||
arg.set_index(index);
|
arg.set_index(index);
|
||||||
@ -68,6 +68,46 @@ impl<'a> ArgList<'a> {
|
|||||||
|
|
||||||
let index = self.list.len();
|
let index = self.list.len();
|
||||||
self.list.push_back(Arg::new(index, arg));
|
self.list.push_back(Arg::new(index, arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Push an [`ArgValue::Ref`] onto the list with the given reference.
|
||||||
|
///
|
||||||
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
|
/// this method will also re-index the list.
|
||||||
|
pub fn push_ref(&mut self, arg: &'a dyn PartialReflect) {
|
||||||
|
self.push_arg(ArgValue::Ref(arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Push an [`ArgValue::Mut`] onto the list with the given mutable reference.
|
||||||
|
///
|
||||||
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
|
/// this method will also re-index the list.
|
||||||
|
pub fn push_mut(&mut self, arg: &'a mut dyn PartialReflect) {
|
||||||
|
self.push_arg(ArgValue::Mut(arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Push an [`ArgValue::Owned`] onto the list with the given owned value.
|
||||||
|
///
|
||||||
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
|
/// this method will also re-index the list.
|
||||||
|
pub fn push_owned(&mut self, arg: impl PartialReflect) {
|
||||||
|
self.push_arg(ArgValue::Owned(Box::new(arg)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Push an [`ArgValue::Owned`] onto the list with the given boxed value.
|
||||||
|
///
|
||||||
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
|
/// this method will also re-index the list.
|
||||||
|
pub fn push_boxed(&mut self, arg: Box<dyn PartialReflect>) {
|
||||||
|
self.push_arg(ArgValue::Owned(arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Push an [`ArgValue`] onto the list.
|
||||||
|
///
|
||||||
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
|
/// this method will also re-index the list.
|
||||||
|
pub fn with_arg(mut self, arg: ArgValue<'a>) -> Self {
|
||||||
|
self.push_arg(arg);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,32 +115,32 @@ impl<'a> ArgList<'a> {
|
|||||||
///
|
///
|
||||||
/// If an argument was previously removed from the beginning of the list,
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
/// this method will also re-index the list.
|
/// this method will also re-index the list.
|
||||||
pub fn push_ref(self, arg: &'a dyn PartialReflect) -> Self {
|
pub fn with_ref(self, arg: &'a dyn PartialReflect) -> Self {
|
||||||
self.push_arg(ArgValue::Ref(arg))
|
self.with_arg(ArgValue::Ref(arg))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Push an [`ArgValue::Mut`] onto the list with the given mutable reference.
|
/// Push an [`ArgValue::Mut`] onto the list with the given mutable reference.
|
||||||
///
|
///
|
||||||
/// If an argument was previously removed from the beginning of the list,
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
/// this method will also re-index the list.
|
/// this method will also re-index the list.
|
||||||
pub fn push_mut(self, arg: &'a mut dyn PartialReflect) -> Self {
|
pub fn with_mut(self, arg: &'a mut dyn PartialReflect) -> Self {
|
||||||
self.push_arg(ArgValue::Mut(arg))
|
self.with_arg(ArgValue::Mut(arg))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Push an [`ArgValue::Owned`] onto the list with the given owned value.
|
/// Push an [`ArgValue::Owned`] onto the list with the given owned value.
|
||||||
///
|
///
|
||||||
/// If an argument was previously removed from the beginning of the list,
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
/// this method will also re-index the list.
|
/// this method will also re-index the list.
|
||||||
pub fn push_owned(self, arg: impl PartialReflect) -> Self {
|
pub fn with_owned(self, arg: impl PartialReflect) -> Self {
|
||||||
self.push_arg(ArgValue::Owned(Box::new(arg)))
|
self.with_arg(ArgValue::Owned(Box::new(arg)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Push an [`ArgValue::Owned`] onto the list with the given boxed value.
|
/// Push an [`ArgValue::Owned`] onto the list with the given boxed value.
|
||||||
///
|
///
|
||||||
/// If an argument was previously removed from the beginning of the list,
|
/// If an argument was previously removed from the beginning of the list,
|
||||||
/// this method will also re-index the list.
|
/// this method will also re-index the list.
|
||||||
pub fn push_boxed(self, arg: Box<dyn PartialReflect>) -> Self {
|
pub fn with_boxed(self, arg: Box<dyn PartialReflect>) -> Self {
|
||||||
self.push_arg(ArgValue::Owned(arg))
|
self.with_arg(ArgValue::Owned(arg))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove the first argument in the list and return it.
|
/// Remove the first argument in the list and return it.
|
||||||
@ -123,7 +163,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// let a = 1u32;
|
/// let a = 1u32;
|
||||||
/// let b = 2u32;
|
/// let b = 2u32;
|
||||||
/// let mut c = 3u32;
|
/// let mut c = 3u32;
|
||||||
/// let mut args = ArgList::new().push_owned(a).push_ref(&b).push_mut(&mut c);
|
/// let mut args = ArgList::new().with_owned(a).with_ref(&b).with_mut(&mut c);
|
||||||
///
|
///
|
||||||
/// let a = args.take::<u32>().unwrap();
|
/// let a = args.take::<u32>().unwrap();
|
||||||
/// assert_eq!(a, 1);
|
/// assert_eq!(a, 1);
|
||||||
@ -149,7 +189,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let value = 123u32;
|
/// let value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_owned(value);
|
/// let mut args = ArgList::new().with_owned(value);
|
||||||
/// let value = args.take_owned::<u32>().unwrap();
|
/// let value = args.take_owned::<u32>().unwrap();
|
||||||
/// assert_eq!(value, 123);
|
/// assert_eq!(value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -168,7 +208,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let value = 123u32;
|
/// let value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_ref(&value);
|
/// let mut args = ArgList::new().with_ref(&value);
|
||||||
/// let value = args.take_ref::<u32>().unwrap();
|
/// let value = args.take_ref::<u32>().unwrap();
|
||||||
/// assert_eq!(*value, 123);
|
/// assert_eq!(*value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -187,7 +227,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let mut value = 123u32;
|
/// let mut value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_mut(&mut value);
|
/// let mut args = ArgList::new().with_mut(&mut value);
|
||||||
/// let value = args.take_mut::<u32>().unwrap();
|
/// let value = args.take_mut::<u32>().unwrap();
|
||||||
/// assert_eq!(*value, 123);
|
/// assert_eq!(*value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -214,7 +254,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// let a = 1u32;
|
/// let a = 1u32;
|
||||||
/// let b = 2u32;
|
/// let b = 2u32;
|
||||||
/// let mut c = 3u32;
|
/// let mut c = 3u32;
|
||||||
/// let mut args = ArgList::new().push_owned(a).push_ref(&b).push_mut(&mut c);
|
/// let mut args = ArgList::new().with_owned(a).with_ref(&b).with_mut(&mut c);
|
||||||
///
|
///
|
||||||
/// let c = args.pop::<&mut u32>().unwrap();
|
/// let c = args.pop::<&mut u32>().unwrap();
|
||||||
/// assert_eq!(*c, 3);
|
/// assert_eq!(*c, 3);
|
||||||
@ -240,7 +280,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let value = 123u32;
|
/// let value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_owned(value);
|
/// let mut args = ArgList::new().with_owned(value);
|
||||||
/// let value = args.pop_owned::<u32>().unwrap();
|
/// let value = args.pop_owned::<u32>().unwrap();
|
||||||
/// assert_eq!(value, 123);
|
/// assert_eq!(value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -259,7 +299,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let value = 123u32;
|
/// let value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_ref(&value);
|
/// let mut args = ArgList::new().with_ref(&value);
|
||||||
/// let value = args.pop_ref::<u32>().unwrap();
|
/// let value = args.pop_ref::<u32>().unwrap();
|
||||||
/// assert_eq!(*value, 123);
|
/// assert_eq!(*value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -278,7 +318,7 @@ impl<'a> ArgList<'a> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bevy_reflect::func::ArgList;
|
/// # use bevy_reflect::func::ArgList;
|
||||||
/// let mut value = 123u32;
|
/// let mut value = 123u32;
|
||||||
/// let mut args = ArgList::new().push_mut(&mut value);
|
/// let mut args = ArgList::new().with_mut(&mut value);
|
||||||
/// let value = args.pop_mut::<u32>().unwrap();
|
/// let value = args.pop_mut::<u32>().unwrap();
|
||||||
/// assert_eq!(*value, 123);
|
/// assert_eq!(*value, 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -310,9 +350,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn should_push_arguments_in_order() {
|
fn should_push_arguments_in_order() {
|
||||||
let args = ArgList::new()
|
let args = ArgList::new()
|
||||||
.push_owned(123)
|
.with_owned(123)
|
||||||
.push_owned(456)
|
.with_owned(456)
|
||||||
.push_owned(789);
|
.with_owned(789);
|
||||||
|
|
||||||
assert_eq!(args.len(), 3);
|
assert_eq!(args.len(), 3);
|
||||||
assert_eq!(args.list[0].index(), 0);
|
assert_eq!(args.list[0].index(), 0);
|
||||||
@ -331,13 +371,13 @@ mod tests {
|
|||||||
let mut g = String::from("g");
|
let mut g = String::from("g");
|
||||||
|
|
||||||
let args = ArgList::new()
|
let args = ArgList::new()
|
||||||
.push_arg(ArgValue::Owned(Box::new(a)))
|
.with_arg(ArgValue::Owned(Box::new(a)))
|
||||||
.push_arg(ArgValue::Ref(&b))
|
.with_arg(ArgValue::Ref(&b))
|
||||||
.push_arg(ArgValue::Mut(&mut c))
|
.with_arg(ArgValue::Mut(&mut c))
|
||||||
.push_owned(d)
|
.with_owned(d)
|
||||||
.push_boxed(Box::new(e))
|
.with_boxed(Box::new(e))
|
||||||
.push_ref(&f)
|
.with_ref(&f)
|
||||||
.push_mut(&mut g);
|
.with_mut(&mut g);
|
||||||
|
|
||||||
assert!(matches!(args.list[0].value(), &ArgValue::Owned(_)));
|
assert!(matches!(args.list[0].value(), &ArgValue::Owned(_)));
|
||||||
assert!(matches!(args.list[1].value(), &ArgValue::Ref(_)));
|
assert!(matches!(args.list[1].value(), &ArgValue::Ref(_)));
|
||||||
@ -356,10 +396,10 @@ mod tests {
|
|||||||
let mut d = 5.78_f32;
|
let mut d = 5.78_f32;
|
||||||
|
|
||||||
let mut args = ArgList::new()
|
let mut args = ArgList::new()
|
||||||
.push_owned(a)
|
.with_owned(a)
|
||||||
.push_ref(&b)
|
.with_ref(&b)
|
||||||
.push_ref(&c)
|
.with_ref(&c)
|
||||||
.push_mut(&mut d);
|
.with_mut(&mut d);
|
||||||
|
|
||||||
assert_eq!(args.len(), 4);
|
assert_eq!(args.len(), 4);
|
||||||
assert_eq!(args.take_owned::<String>().unwrap(), String::from("a"));
|
assert_eq!(args.take_owned::<String>().unwrap(), String::from("a"));
|
||||||
@ -377,10 +417,10 @@ mod tests {
|
|||||||
let mut d = 5.78_f32;
|
let mut d = 5.78_f32;
|
||||||
|
|
||||||
let mut args = ArgList::new()
|
let mut args = ArgList::new()
|
||||||
.push_owned(a)
|
.with_owned(a)
|
||||||
.push_ref(&b)
|
.with_ref(&b)
|
||||||
.push_ref(&c)
|
.with_ref(&c)
|
||||||
.push_mut(&mut d);
|
.with_mut(&mut d);
|
||||||
|
|
||||||
assert_eq!(args.len(), 4);
|
assert_eq!(args.len(), 4);
|
||||||
assert_eq!(args.pop_mut::<f32>().unwrap(), &mut 5.78);
|
assert_eq!(args.pop_mut::<f32>().unwrap(), &mut 5.78);
|
||||||
@ -393,9 +433,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn should_reindex_on_push_after_take() {
|
fn should_reindex_on_push_after_take() {
|
||||||
let mut args = ArgList::new()
|
let mut args = ArgList::new()
|
||||||
.push_owned(123)
|
.with_owned(123)
|
||||||
.push_owned(456)
|
.with_owned(456)
|
||||||
.push_owned(789);
|
.with_owned(789);
|
||||||
|
|
||||||
assert!(!args.needs_reindex);
|
assert!(!args.needs_reindex);
|
||||||
|
|
||||||
@ -406,7 +446,7 @@ mod tests {
|
|||||||
assert!(args.list[1].value().reflect_partial_eq(&789).unwrap());
|
assert!(args.list[1].value().reflect_partial_eq(&789).unwrap());
|
||||||
assert_eq!(args.list[1].index(), 2);
|
assert_eq!(args.list[1].index(), 2);
|
||||||
|
|
||||||
let args = args.push_owned(123);
|
let args = args.with_owned(123);
|
||||||
assert!(!args.needs_reindex);
|
assert!(!args.needs_reindex);
|
||||||
assert!(args.list[0].value().reflect_partial_eq(&456).unwrap());
|
assert!(args.list[0].value().reflect_partial_eq(&456).unwrap());
|
||||||
assert_eq!(args.list[0].index(), 0);
|
assert_eq!(args.list[0].index(), 0);
|
||||||
|
@ -55,7 +55,7 @@ type ArcFn<'env> = Arc<dyn for<'a> Fn(ArgList<'a>) -> FunctionResult<'a> + Send
|
|||||||
/// let mut func: DynamicFunction = add.into_function();
|
/// let mut func: DynamicFunction = add.into_function();
|
||||||
///
|
///
|
||||||
/// // Dynamically call it:
|
/// // Dynamically call it:
|
||||||
/// let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
/// let value = func.call(args).unwrap().unwrap_owned();
|
/// let value = func.call(args).unwrap().unwrap_owned();
|
||||||
///
|
///
|
||||||
/// // Check the result:
|
/// // Check the result:
|
||||||
@ -161,12 +161,12 @@ impl<'env> DynamicFunction<'env> {
|
|||||||
/// func = func.with_overload(add::<f32>);
|
/// func = func.with_overload(add::<f32>);
|
||||||
///
|
///
|
||||||
/// // Test `i32`:
|
/// // Test `i32`:
|
||||||
/// let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
/// let result = func.call(args).unwrap().unwrap_owned();
|
/// let result = func.call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
/// assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
///
|
///
|
||||||
/// // Test `f32`:
|
/// // Test `f32`:
|
||||||
/// let args = ArgList::default().push_owned(25.0_f32).push_owned(75.0_f32);
|
/// let args = ArgList::default().with_owned(25.0_f32).with_owned(75.0_f32);
|
||||||
/// let result = func.call(args).unwrap().unwrap_owned();
|
/// let result = func.call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
/// assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
||||||
///```
|
///```
|
||||||
@ -189,15 +189,15 @@ impl<'env> DynamicFunction<'env> {
|
|||||||
/// func = func.with_overload(add_3);
|
/// func = func.with_overload(add_3);
|
||||||
///
|
///
|
||||||
/// // Test two arguments:
|
/// // Test two arguments:
|
||||||
/// let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
/// let result = func.call(args).unwrap().unwrap_owned();
|
/// let result = func.call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
/// assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
///
|
///
|
||||||
/// // Test three arguments:
|
/// // Test three arguments:
|
||||||
/// let args = ArgList::default()
|
/// let args = ArgList::default()
|
||||||
/// .push_owned(25_i32)
|
/// .with_owned(25_i32)
|
||||||
/// .push_owned(75_i32)
|
/// .with_owned(75_i32)
|
||||||
/// .push_owned(100_i32);
|
/// .with_owned(100_i32);
|
||||||
/// let result = func.call(args).unwrap().unwrap_owned();
|
/// let result = func.call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(result.try_take::<i32>().unwrap(), 200);
|
/// assert_eq!(result.try_take::<i32>().unwrap(), 200);
|
||||||
/// ```
|
/// ```
|
||||||
@ -266,7 +266,7 @@ impl<'env> DynamicFunction<'env> {
|
|||||||
/// };
|
/// };
|
||||||
///
|
///
|
||||||
/// let mut func = add.into_function().with_name("add");
|
/// let mut func = add.into_function().with_name("add");
|
||||||
/// let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
/// let result = func.call(args).unwrap().unwrap_owned();
|
/// let result = func.call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(result.try_take::<i32>().unwrap(), 123);
|
/// assert_eq!(result.try_take::<i32>().unwrap(), 123);
|
||||||
/// ```
|
/// ```
|
||||||
@ -513,7 +513,7 @@ mod tests {
|
|||||||
fn should_return_error_on_arg_count_mismatch() {
|
fn should_return_error_on_arg_count_mismatch() {
|
||||||
let func = (|a: i32, b: i32| a + b).into_function();
|
let func = (|a: i32, b: i32| a + b).into_function();
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32);
|
let args = ArgList::default().with_owned(25_i32);
|
||||||
let error = func.call(args).unwrap_err();
|
let error = func.call(args).unwrap_err();
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@ -532,10 +532,10 @@ mod tests {
|
|||||||
.with_overload(|a: i32, b: i32, c: i32| a + b + c);
|
.with_overload(|a: i32, b: i32, c: i32| a + b + c);
|
||||||
|
|
||||||
let args = ArgList::default()
|
let args = ArgList::default()
|
||||||
.push_owned(1_i32)
|
.with_owned(1_i32)
|
||||||
.push_owned(2_i32)
|
.with_owned(2_i32)
|
||||||
.push_owned(3_i32)
|
.with_owned(3_i32)
|
||||||
.push_owned(4_i32);
|
.with_owned(4_i32);
|
||||||
|
|
||||||
let error = func.call(args).unwrap_err();
|
let error = func.call(args).unwrap_err();
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ mod tests {
|
|||||||
assert_eq!(clone.name().unwrap(), "greet");
|
assert_eq!(clone.name().unwrap(), "greet");
|
||||||
|
|
||||||
let clone_value = clone
|
let clone_value = clone
|
||||||
.call(ArgList::default().push_ref(&String::from("world")))
|
.call(ArgList::default().with_ref(&String::from("world")))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.unwrap_owned()
|
.unwrap_owned()
|
||||||
.try_take::<String>()
|
.try_take::<String>()
|
||||||
@ -578,7 +578,7 @@ mod tests {
|
|||||||
let mut func: Box<dyn Function> = Box::new((|a: i32, b: i32| a + b).into_function());
|
let mut func: Box<dyn Function> = Box::new((|a: i32, b: i32| a + b).into_function());
|
||||||
func.apply(&((|a: i32, b: i32| a * b).into_function()));
|
func.apply(&((|a: i32, b: i32| a * b).into_function()));
|
||||||
|
|
||||||
let args = ArgList::new().push_owned(5_i32).push_owned(5_i32);
|
let args = ArgList::new().with_owned(5_i32).with_owned(5_i32);
|
||||||
let result = func.reflect_call(args).unwrap().unwrap_owned();
|
let result = func.reflect_call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 25);
|
assert_eq!(result.try_take::<i32>().unwrap(), 25);
|
||||||
}
|
}
|
||||||
@ -599,8 +599,8 @@ mod tests {
|
|||||||
ReflectRef::Function(func) => {
|
ReflectRef::Function(func) => {
|
||||||
let result = func.reflect_call(
|
let result = func.reflect_call(
|
||||||
ArgList::new()
|
ArgList::new()
|
||||||
.push_ref(this.as_partial_reflect())
|
.with_ref(this.as_partial_reflect())
|
||||||
.push_owned(curr - 1),
|
.with_owned(curr - 1),
|
||||||
);
|
);
|
||||||
let value = result.unwrap().unwrap_owned().try_take::<i32>().unwrap();
|
let value = result.unwrap().unwrap_owned().try_take::<i32>().unwrap();
|
||||||
Ok((curr * value).into_return())
|
Ok((curr * value).into_return())
|
||||||
@ -615,7 +615,7 @@ mod tests {
|
|||||||
.with_arg::<()>("this"),
|
.with_arg::<()>("this"),
|
||||||
);
|
);
|
||||||
|
|
||||||
let args = ArgList::new().push_ref(&factorial).push_owned(5_i32);
|
let args = ArgList::new().with_ref(&factorial).with_owned(5_i32);
|
||||||
let value = factorial.call(args).unwrap().unwrap_owned();
|
let value = factorial.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(value.try_take::<i32>().unwrap(), 120);
|
assert_eq!(value.try_take::<i32>().unwrap(), 120);
|
||||||
}
|
}
|
||||||
@ -653,11 +653,11 @@ mod tests {
|
|||||||
let func = func.with_name("add");
|
let func = func.with_name("add");
|
||||||
assert_eq!(func.name().unwrap(), "add");
|
assert_eq!(func.name().unwrap(), "add");
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25.0_f32).push_owned(75.0_f32);
|
let args = ArgList::default().with_owned(25.0_f32).with_owned(75.0_f32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
||||||
}
|
}
|
||||||
@ -676,11 +676,11 @@ mod tests {
|
|||||||
|
|
||||||
let func = add::<i32>.into_function().with_overload(add::<f32>);
|
let func = add::<i32>.into_function().with_overload(add::<f32>);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25.0_f32).push_owned(75.0_f32);
|
let args = ArgList::default().with_owned(25.0_f32).with_owned(75.0_f32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
||||||
}
|
}
|
||||||
@ -697,14 +697,14 @@ mod tests {
|
|||||||
|
|
||||||
let func = add_2.into_function().with_overload(add_3);
|
let func = add_2.into_function().with_overload(add_3);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
|
|
||||||
let args = ArgList::default()
|
let args = ArgList::default()
|
||||||
.push_owned(25_i32)
|
.with_owned(25_i32)
|
||||||
.push_owned(75_i32)
|
.with_owned(75_i32)
|
||||||
.push_owned(100_i32);
|
.with_owned(100_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 200);
|
assert_eq!(result.try_take::<i32>().unwrap(), 200);
|
||||||
}
|
}
|
||||||
@ -740,11 +740,11 @@ mod tests {
|
|||||||
|
|
||||||
let func = manual.with_overload(|a: u32, b: u32| a + b);
|
let func = manual.with_overload(|a: u32, b: u32| a + b);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_u32).push_owned(75_u32);
|
let args = ArgList::default().with_owned(25_u32).with_owned(75_u32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<u32>().unwrap(), 100);
|
assert_eq!(result.try_take::<u32>().unwrap(), 100);
|
||||||
}
|
}
|
||||||
@ -757,7 +757,7 @@ mod tests {
|
|||||||
|
|
||||||
let func = add::<i32>.into_function().with_overload(add::<f32>);
|
let func = add::<i32>.into_function().with_overload(add::<f32>);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_u32).push_owned(75_u32);
|
let args = ArgList::default().with_owned(25_u32).with_owned(75_u32);
|
||||||
let result = func.call(args);
|
let result = func.call(args);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.unwrap_err(),
|
result.unwrap_err(),
|
||||||
|
@ -51,7 +51,7 @@ type BoxFnMut<'env> = Box<dyn for<'a> FnMut(ArgList<'a>) -> FunctionResult<'a> +
|
|||||||
/// let mut func: DynamicFunctionMut = replace.into_function_mut();
|
/// let mut func: DynamicFunctionMut = replace.into_function_mut();
|
||||||
///
|
///
|
||||||
/// // Dynamically call it:
|
/// // Dynamically call it:
|
||||||
/// let args = ArgList::default().push_owned(1_usize).push_owned(-2_i32);
|
/// let args = ArgList::default().with_owned(1_usize).with_owned(-2_i32);
|
||||||
/// let value = func.call(args).unwrap().unwrap_owned();
|
/// let value = func.call(args).unwrap().unwrap_owned();
|
||||||
///
|
///
|
||||||
/// // Check the result:
|
/// // Check the result:
|
||||||
@ -155,11 +155,11 @@ impl<'env> DynamicFunctionMut<'env> {
|
|||||||
/// func = func.with_overload(add_f32);
|
/// func = func.with_overload(add_f32);
|
||||||
///
|
///
|
||||||
/// // Test `i32`:
|
/// // Test `i32`:
|
||||||
/// let args = bevy_reflect::func::ArgList::new().push_owned(123_i32);
|
/// let args = bevy_reflect::func::ArgList::new().with_owned(123_i32);
|
||||||
/// func.call(args).unwrap();
|
/// func.call(args).unwrap();
|
||||||
///
|
///
|
||||||
/// // Test `f32`:
|
/// // Test `f32`:
|
||||||
/// let args = bevy_reflect::func::ArgList::new().push_owned(1.23_f32);
|
/// let args = bevy_reflect::func::ArgList::new().with_owned(1.23_f32);
|
||||||
/// func.call(args).unwrap();
|
/// func.call(args).unwrap();
|
||||||
///
|
///
|
||||||
/// drop(func);
|
/// drop(func);
|
||||||
@ -220,7 +220,7 @@ impl<'env> DynamicFunctionMut<'env> {
|
|||||||
/// };
|
/// };
|
||||||
///
|
///
|
||||||
/// let mut func = add.into_function_mut().with_name("add");
|
/// let mut func = add.into_function_mut().with_name("add");
|
||||||
/// let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
/// let result = func.call(args).unwrap().unwrap_owned();
|
/// let result = func.call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
/// assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
/// ```
|
/// ```
|
||||||
@ -252,7 +252,7 @@ impl<'env> DynamicFunctionMut<'env> {
|
|||||||
/// let increment = |amount: i32| count += amount;
|
/// let increment = |amount: i32| count += amount;
|
||||||
///
|
///
|
||||||
/// let increment_function = increment.into_function_mut();
|
/// let increment_function = increment.into_function_mut();
|
||||||
/// let args = ArgList::new().push_owned(5_i32);
|
/// let args = ArgList::new().with_owned(5_i32);
|
||||||
///
|
///
|
||||||
/// // We need to drop `increment_function` here so that we
|
/// // We need to drop `increment_function` here so that we
|
||||||
/// // can regain access to `count`.
|
/// // can regain access to `count`.
|
||||||
@ -408,7 +408,7 @@ mod tests {
|
|||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
let mut func = (|a: i32, b: i32| total = a + b).into_function_mut();
|
let mut func = (|a: i32, b: i32| total = a + b).into_function_mut();
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32);
|
let args = ArgList::default().with_owned(25_i32);
|
||||||
let error = func.call(args).unwrap_err();
|
let error = func.call(args).unwrap_err();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
error,
|
error,
|
||||||
@ -418,7 +418,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32);
|
let args = ArgList::default().with_owned(25_i32);
|
||||||
let error = func.call_once(args).unwrap_err();
|
let error = func.call_once(args).unwrap_err();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
error,
|
error,
|
||||||
@ -456,9 +456,9 @@ mod tests {
|
|||||||
let mut func = func.with_name("add");
|
let mut func = func.with_name("add");
|
||||||
assert_eq!(func.name().unwrap(), "add");
|
assert_eq!(func.name().unwrap(), "add");
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32);
|
let args = ArgList::default().with_owned(25_i32);
|
||||||
func.call(args).unwrap();
|
func.call(args).unwrap();
|
||||||
let args = ArgList::default().push_owned(75_i16);
|
let args = ArgList::default().with_owned(75_i16);
|
||||||
func.call(args).unwrap();
|
func.call(args).unwrap();
|
||||||
|
|
||||||
drop(func);
|
drop(func);
|
||||||
@ -477,11 +477,11 @@ mod tests {
|
|||||||
|
|
||||||
let mut func = add::<i32>.into_function_mut().with_overload(add::<f32>);
|
let mut func = add::<i32>.into_function_mut().with_overload(add::<f32>);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::default().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
assert_eq!(result.try_take::<i32>().unwrap(), 100);
|
||||||
|
|
||||||
let args = ArgList::default().push_owned(25.0_f32).push_owned(75.0_f32);
|
let args = ArgList::default().with_owned(25.0_f32).with_owned(75.0_f32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
assert_eq!(result.try_take::<f32>().unwrap(), 100.0);
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ use core::fmt::Debug;
|
|||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// let func: Box<dyn Function> = Box::new(add.into_function());
|
/// let func: Box<dyn Function> = Box::new(add.into_function());
|
||||||
/// let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
/// let value = func.reflect_call(args).unwrap().unwrap_owned();
|
/// let value = func.reflect_call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(value.try_take::<i32>().unwrap(), 100);
|
/// assert_eq!(value.try_take::<i32>().unwrap(), 100);
|
||||||
/// ```
|
/// ```
|
||||||
@ -80,7 +80,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let func: Box<dyn Function> = Box::new(add.into_function());
|
let func: Box<dyn Function> = Box::new(add.into_function());
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
let value = func.reflect_call(args).unwrap().unwrap_owned();
|
let value = func.reflect_call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(value.try_take::<i32>().unwrap(), 100);
|
assert_eq!(value.try_take::<i32>().unwrap(), 100);
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ mod tests {
|
|||||||
fn should_create_dynamic_function_from_closure() {
|
fn should_create_dynamic_function_from_closure() {
|
||||||
let c = 23;
|
let c = 23;
|
||||||
let func = (|a: i32, b: i32| a + b + c).into_function();
|
let func = (|a: i32, b: i32| a + b + c).into_function();
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_downcast_ref::<i32>(), Some(&123));
|
assert_eq!(result.try_downcast_ref::<i32>(), Some(&123));
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let func = add.into_function();
|
let func = add.into_function();
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_downcast_ref::<i32>(), Some(&100));
|
assert_eq!(result.try_downcast_ref::<i32>(), Some(&100));
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ mod tests {
|
|||||||
fn should_create_dynamic_function_mut_from_closure() {
|
fn should_create_dynamic_function_mut_from_closure() {
|
||||||
let c = 23;
|
let c = 23;
|
||||||
let func = (|a: i32, b: i32| a + b + c).into_function();
|
let func = (|a: i32, b: i32| a + b + c).into_function();
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_downcast_ref::<i32>(), Some(&123));
|
assert_eq!(result.try_downcast_ref::<i32>(), Some(&123));
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ mod tests {
|
|||||||
fn should_create_dynamic_function_mut_from_closure_with_mutable_capture() {
|
fn should_create_dynamic_function_mut_from_closure_with_mutable_capture() {
|
||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
let func = (|a: i32, b: i32| total = a + b).into_function_mut();
|
let func = (|a: i32, b: i32| total = a + b).into_function_mut();
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
func.call_once(args).unwrap();
|
func.call_once(args).unwrap();
|
||||||
assert_eq!(total, 100);
|
assert_eq!(total, 100);
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut func = add.into_function_mut();
|
let mut func = add.into_function_mut();
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = func.call(args).unwrap().unwrap_owned();
|
let result = func.call(args).unwrap().unwrap_owned();
|
||||||
assert_eq!(result.try_downcast_ref::<i32>(), Some(&100));
|
assert_eq!(result.try_downcast_ref::<i32>(), Some(&100));
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,9 @@
|
|||||||
//! let mut func: DynamicFunction = add.into_function();
|
//! let mut func: DynamicFunction = add.into_function();
|
||||||
//! let args: ArgList = ArgList::default()
|
//! let args: ArgList = ArgList::default()
|
||||||
//! // Pushing a known type with owned ownership
|
//! // Pushing a known type with owned ownership
|
||||||
//! .push_owned(25_i32)
|
//! .with_owned(25_i32)
|
||||||
//! // Pushing a reflected type with owned ownership
|
//! // Pushing a reflected type with owned ownership
|
||||||
//! .push_boxed(Box::new(75_i32) as Box<dyn PartialReflect>);
|
//! .with_boxed(Box::new(75_i32) as Box<dyn PartialReflect>);
|
||||||
//! let result: FunctionResult = func.call(args);
|
//! let result: FunctionResult = func.call(args);
|
||||||
//! let value: Return = result.unwrap();
|
//! let value: Return = result.unwrap();
|
||||||
//! assert_eq!(value.unwrap_owned().try_downcast_ref::<i32>(), Some(&100));
|
//! assert_eq!(value.unwrap_owned().try_downcast_ref::<i32>(), Some(&100));
|
||||||
@ -141,11 +141,11 @@
|
|||||||
//!
|
//!
|
||||||
//! // You can then retrieve and call these functions by name:
|
//! // You can then retrieve and call these functions by name:
|
||||||
//! let reflect_add = registry.get(core::any::type_name_of_val(&add)).unwrap();
|
//! let reflect_add = registry.get(core::any::type_name_of_val(&add)).unwrap();
|
||||||
//! let value = reflect_add.call(ArgList::default().push_owned(10_i32).push_owned(5_i32)).unwrap();
|
//! let value = reflect_add.call(ArgList::default().with_owned(10_i32).with_owned(5_i32)).unwrap();
|
||||||
//! assert_eq!(value.unwrap_owned().try_downcast_ref::<i32>(), Some(&15));
|
//! assert_eq!(value.unwrap_owned().try_downcast_ref::<i32>(), Some(&15));
|
||||||
//!
|
//!
|
||||||
//! let reflect_mul = registry.get("mul").unwrap();
|
//! let reflect_mul = registry.get("mul").unwrap();
|
||||||
//! let value = reflect_mul.call(ArgList::default().push_owned(10_i32).push_owned(5_i32)).unwrap();
|
//! let value = reflect_mul.call(ArgList::default().with_owned(10_i32).with_owned(5_i32)).unwrap();
|
||||||
//! assert_eq!(value.unwrap_owned().try_downcast_ref::<i32>(), Some(&50));
|
//! assert_eq!(value.unwrap_owned().try_downcast_ref::<i32>(), Some(&50));
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
@ -219,7 +219,7 @@ mod tests {
|
|||||||
fn foo() {}
|
fn foo() {}
|
||||||
|
|
||||||
let func = foo.into_function();
|
let func = foo.into_function();
|
||||||
let args = ArgList::new().push_owned(123_i32);
|
let args = ArgList::new().with_owned(123_i32);
|
||||||
let result = func.call(args);
|
let result = func.call(args);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.unwrap_err(),
|
result.unwrap_err(),
|
||||||
@ -235,7 +235,7 @@ mod tests {
|
|||||||
fn foo(_: i32) {}
|
fn foo(_: i32) {}
|
||||||
|
|
||||||
let func = foo.into_function();
|
let func = foo.into_function();
|
||||||
let args = ArgList::new().push_owned(123_u32);
|
let args = ArgList::new().with_owned(123_u32);
|
||||||
let result = func.call(args);
|
let result = func.call(args);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.unwrap_err(),
|
result.unwrap_err(),
|
||||||
@ -252,7 +252,7 @@ mod tests {
|
|||||||
fn foo(_: &i32) {}
|
fn foo(_: &i32) {}
|
||||||
|
|
||||||
let func = foo.into_function();
|
let func = foo.into_function();
|
||||||
let args = ArgList::new().push_owned(123_i32);
|
let args = ArgList::new().with_owned(123_i32);
|
||||||
let result = func.call(args);
|
let result = func.call(args);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.unwrap_err(),
|
result.unwrap_err(),
|
||||||
|
@ -44,7 +44,7 @@ use crate::{
|
|||||||
/// a + b
|
/// a + b
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
/// let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
///
|
///
|
||||||
/// let value = add.reflect_call(args).unwrap().unwrap_owned();
|
/// let value = add.reflect_call(args).unwrap().unwrap_owned();
|
||||||
/// assert_eq!(value.try_take::<i32>().unwrap(), 100);
|
/// assert_eq!(value.try_take::<i32>().unwrap(), 100);
|
||||||
|
@ -50,7 +50,7 @@ use crate::{
|
|||||||
/// list.insert(index, value);
|
/// list.insert(index, value);
|
||||||
/// };
|
/// };
|
||||||
///
|
///
|
||||||
/// let args = ArgList::new().push_owned(1_usize).push_owned(2_i32);
|
/// let args = ArgList::new().with_owned(1_usize).with_owned(2_i32);
|
||||||
///
|
///
|
||||||
/// insert.reflect_call_mut(args).unwrap();
|
/// insert.reflect_call_mut(args).unwrap();
|
||||||
/// assert_eq!(list, vec![1, 2, 3]);
|
/// assert_eq!(list, vec![1, 2, 3]);
|
||||||
|
@ -487,7 +487,7 @@ mod tests {
|
|||||||
let mut registry = FunctionRegistry::default();
|
let mut registry = FunctionRegistry::default();
|
||||||
registry.register(add).unwrap();
|
registry.register(add).unwrap();
|
||||||
|
|
||||||
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
|
let args = ArgList::new().with_owned(25_i32).with_owned(75_i32);
|
||||||
let result = registry
|
let result = registry
|
||||||
.call(core::any::type_name_of_val(&add), args)
|
.call(core::any::type_name_of_val(&add), args)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -44,7 +44,7 @@ fn main() {
|
|||||||
// This time, you'll notice that `DynamicFunction` doesn't take any information about the function's arguments or return value.
|
// This time, you'll notice that `DynamicFunction` doesn't take any information about the function's arguments or return value.
|
||||||
// This is because `DynamicFunction` checks the types of the arguments and return value at runtime.
|
// This is because `DynamicFunction` checks the types of the arguments and return value at runtime.
|
||||||
// Now we can generate a list of arguments:
|
// Now we can generate a list of arguments:
|
||||||
let args: ArgList = dbg!(ArgList::new().push_owned(2_i32).push_owned(2_i32));
|
let args: ArgList = dbg!(ArgList::new().with_owned(2_i32).with_owned(2_i32));
|
||||||
|
|
||||||
// And finally, we can call the function.
|
// And finally, we can call the function.
|
||||||
// This returns a `Result` indicating whether the function was called successfully.
|
// This returns a `Result` indicating whether the function was called successfully.
|
||||||
@ -64,7 +64,7 @@ fn main() {
|
|||||||
let clamp = |value: i32| value.max(minimum);
|
let clamp = |value: i32| value.max(minimum);
|
||||||
|
|
||||||
let function: DynamicFunction = dbg!(clamp.into_function());
|
let function: DynamicFunction = dbg!(clamp.into_function());
|
||||||
let args = dbg!(ArgList::new().push_owned(2_i32));
|
let args = dbg!(ArgList::new().with_owned(2_i32));
|
||||||
let return_value = dbg!(function.call(args).unwrap());
|
let return_value = dbg!(function.call(args).unwrap());
|
||||||
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
||||||
assert_eq!(value.try_take::<i32>().unwrap(), 5);
|
assert_eq!(value.try_take::<i32>().unwrap(), 5);
|
||||||
@ -75,7 +75,7 @@ fn main() {
|
|||||||
let increment = |amount: i32| count += amount;
|
let increment = |amount: i32| count += amount;
|
||||||
|
|
||||||
let closure: DynamicFunctionMut = dbg!(increment.into_function_mut());
|
let closure: DynamicFunctionMut = dbg!(increment.into_function_mut());
|
||||||
let args = dbg!(ArgList::new().push_owned(5_i32));
|
let args = dbg!(ArgList::new().with_owned(5_i32));
|
||||||
|
|
||||||
// Because `DynamicFunctionMut` mutably borrows `total`,
|
// Because `DynamicFunctionMut` mutably borrows `total`,
|
||||||
// it will need to be dropped before `total` can be accessed again.
|
// it will need to be dropped before `total` can be accessed again.
|
||||||
@ -92,7 +92,7 @@ fn main() {
|
|||||||
// We have to manually specify the concrete generic type we want to use.
|
// We have to manually specify the concrete generic type we want to use.
|
||||||
let function = stringify::<i32>.into_function();
|
let function = stringify::<i32>.into_function();
|
||||||
|
|
||||||
let args = ArgList::new().push_owned(123_i32);
|
let args = ArgList::new().with_owned(123_i32);
|
||||||
let return_value = function.call(args).unwrap();
|
let return_value = function.call(args).unwrap();
|
||||||
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
||||||
assert_eq!(value.try_take::<String>().unwrap(), "123");
|
assert_eq!(value.try_take::<String>().unwrap(), "123");
|
||||||
@ -106,7 +106,7 @@ fn main() {
|
|||||||
.with_overload(stringify::<f32>);
|
.with_overload(stringify::<f32>);
|
||||||
|
|
||||||
// Now our `function` accepts both `i32` and `f32` arguments.
|
// Now our `function` accepts both `i32` and `f32` arguments.
|
||||||
let args = ArgList::new().push_owned(1.23_f32);
|
let args = ArgList::new().with_owned(1.23_f32);
|
||||||
let return_value = function.call(args).unwrap();
|
let return_value = function.call(args).unwrap();
|
||||||
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
||||||
assert_eq!(value.try_take::<String>().unwrap(), "1.23");
|
assert_eq!(value.try_take::<String>().unwrap(), "1.23");
|
||||||
@ -119,9 +119,9 @@ fn main() {
|
|||||||
.with_overload(|a: i32, b: i32, c: i32| a + b + c);
|
.with_overload(|a: i32, b: i32, c: i32| a + b + c);
|
||||||
|
|
||||||
let args = ArgList::new()
|
let args = ArgList::new()
|
||||||
.push_owned(1_i32)
|
.with_owned(1_i32)
|
||||||
.push_owned(2_i32)
|
.with_owned(2_i32)
|
||||||
.push_owned(3_i32);
|
.with_owned(3_i32);
|
||||||
let return_value = function.call(args).unwrap();
|
let return_value = function.call(args).unwrap();
|
||||||
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
let value: Box<dyn PartialReflect> = return_value.unwrap_owned();
|
||||||
assert_eq!(value.try_take::<i32>().unwrap(), 6);
|
assert_eq!(value.try_take::<i32>().unwrap(), 6);
|
||||||
@ -151,12 +151,12 @@ fn main() {
|
|||||||
let mut data = Data::default();
|
let mut data = Data::default();
|
||||||
|
|
||||||
let set_value = dbg!(Data::set_value.into_function());
|
let set_value = dbg!(Data::set_value.into_function());
|
||||||
let args = dbg!(ArgList::new().push_mut(&mut data)).push_owned(String::from("Hello, world!"));
|
let args = dbg!(ArgList::new().with_mut(&mut data)).with_owned(String::from("Hello, world!"));
|
||||||
dbg!(set_value.call(args).unwrap());
|
dbg!(set_value.call(args).unwrap());
|
||||||
assert_eq!(data.value, "Hello, world!");
|
assert_eq!(data.value, "Hello, world!");
|
||||||
|
|
||||||
let get_value = dbg!(Data::get_value.into_function());
|
let get_value = dbg!(Data::get_value.into_function());
|
||||||
let args = dbg!(ArgList::new().push_ref(&data));
|
let args = dbg!(ArgList::new().with_ref(&data));
|
||||||
let return_value = dbg!(get_value.call(args).unwrap());
|
let return_value = dbg!(get_value.call(args).unwrap());
|
||||||
let value: &dyn PartialReflect = return_value.unwrap_ref();
|
let value: &dyn PartialReflect = return_value.unwrap_ref();
|
||||||
assert_eq!(value.try_downcast_ref::<String>().unwrap(), "Hello, world!");
|
assert_eq!(value.try_downcast_ref::<String>().unwrap(), "Hello, world!");
|
||||||
@ -210,11 +210,11 @@ fn main() {
|
|||||||
|
|
||||||
let mut container: Option<i32> = None;
|
let mut container: Option<i32> = None;
|
||||||
|
|
||||||
let args = dbg!(ArgList::new().push_owned(5_i32).push_mut(&mut container));
|
let args = dbg!(ArgList::new().with_owned(5_i32).with_mut(&mut container));
|
||||||
let value = dbg!(get_or_insert_function.call(args).unwrap()).unwrap_ref();
|
let value = dbg!(get_or_insert_function.call(args).unwrap()).unwrap_ref();
|
||||||
assert_eq!(value.try_downcast_ref::<i32>(), Some(&5));
|
assert_eq!(value.try_downcast_ref::<i32>(), Some(&5));
|
||||||
|
|
||||||
let args = dbg!(ArgList::new().push_owned(500_i32).push_mut(&mut container));
|
let args = dbg!(ArgList::new().with_owned(500_i32).with_mut(&mut container));
|
||||||
let value = dbg!(get_or_insert_function.call(args).unwrap()).unwrap_ref();
|
let value = dbg!(get_or_insert_function.call(args).unwrap()).unwrap_ref();
|
||||||
assert_eq!(value.try_downcast_ref::<i32>(), Some(&5));
|
assert_eq!(value.try_downcast_ref::<i32>(), Some(&5));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user