pub struct Segment<Args: IntoList + 'static, Stack: List = ReverseList<<Args as IntoList>::Output<CNil<()>>>> { /* private fields */ }Expand description
A type-safe segment that represents a sequence of operations.
The segment takes input arguments of type Args and maintains a type stack Stack that tracks
the types of values produced by operations.
§Type Parameters
Args: The input argument types, must implementIntoListStack: The type stack tracking operation results, defaults to the reverse ofArgs
§Examples
use cel_runtime::segment::*;
assert_eq!(Segment::<(i32,)>::new() // create a new segment that takes an i32 argument
.op1(|x| x * 2) // push a unary operation that multiplies the argument by 2
.op0(|| 10) // push a nullary operation that returns 10
.op2(|x, y| x + y) // push a binary operation that adds two arguments
.op1(|x| x.to_string()) // push a unary operation returning a string of the argument
.call((42, )).unwrap(), // call the segment with an argument 42
"94"); // the result is (42 * 2 + 10).to_string()Implementations§
Source§impl<Args: IntoList + 'static, Stack> Segment<Args, Stack>
impl<Args: IntoList + 'static, Stack> Segment<Args, Stack>
Sourcepub fn op0<R, F>(self, op: F) -> Segment<Args, Stack::Push<R>>where
F: Fn() -> R + 'static,
R: 'static,
pub fn op0<R, F>(self, op: F) -> Segment<Args, Stack::Push<R>>where
F: Fn() -> R + 'static,
R: 'static,
Pushes a nullary operation that takes no arguments and returns a value of type R.
Sourcepub fn op0r<R, F>(self, op: F) -> Segment<Args, Stack::Push<R>>
pub fn op0r<R, F>(self, op: F) -> Segment<Args, Stack::Push<R>>
Pushes a fallible nullary operation that returns Result<R>.
Sourcepub fn op1<R, F>(self, op: F) -> Segment<Args, CStackList<R, Stack::Tail>>
pub fn op1<R, F>(self, op: F) -> Segment<Args, CStackList<R, Stack::Tail>>
Pushes a unary operation that takes the current stack value and returns a new value.
Sourcepub fn op1r<R, F>(self, op: F) -> Segment<Args, CStackList<R, Stack::Tail>>
pub fn op1r<R, F>(self, op: F) -> Segment<Args, CStackList<R, Stack::Tail>>
Pushes a fallible unary operation that takes the current stack value and returns Result<R>.
Sourcepub fn op2<R, F>(
self,
op: F,
) -> Segment<Args, <<Stack::Tail as List>::Tail as List>::Push<R>>where
Stack: CStackListHeadPadded,
Stack::Tail: CStackListHeadPadded,
F: Fn(<Stack::Tail as List>::Head, Stack::Head) -> R + 'static,
R: 'static,
pub fn op2<R, F>(
self,
op: F,
) -> Segment<Args, <<Stack::Tail as List>::Tail as List>::Push<R>>where
Stack: CStackListHeadPadded,
Stack::Tail: CStackListHeadPadded,
F: Fn(<Stack::Tail as List>::Head, Stack::Head) -> R + 'static,
R: 'static,
Pushes a binary operation that takes the top two stack values and returns a new value.
Trait Implementations§
Source§impl<T: StackResult + 'static> SegmentCallable<()> for Segment<(), T>
impl<T: StackResult + 'static> SegmentCallable<()> for Segment<(), T>
Source§impl<T: StackResult + 'static, A: 'static, B: 'static> SegmentCallable<(A, B)> for Segment<(A, B), T>
impl<T: StackResult + 'static, A: 'static, B: 'static> SegmentCallable<(A, B)> for Segment<(A, B), T>
Source§impl<T: StackResult + 'static, A: 'static> SegmentCallable<(A,)> for Segment<(A,), T>
impl<T: StackResult + 'static, A: 'static> SegmentCallable<(A,)> for Segment<(A,), T>
Source§impl<Args: IntoList + 'static, Stack> TryFrom<DynSegment> for Segment<Args, Stack>where
ReverseList<<Args as IntoList>::Output<CNil<()>>>: ListTypeIteratorAdvance<TypeId>,
Stack: ListTypeIteratorAdvance<TypeId> + List + 'static,
impl<Args: IntoList + 'static, Stack> TryFrom<DynSegment> for Segment<Args, Stack>where
ReverseList<<Args as IntoList>::Output<CNil<()>>>: ListTypeIteratorAdvance<TypeId>,
Stack: ListTypeIteratorAdvance<TypeId> + List + 'static,
Auto Trait Implementations§
impl<Args, Stack> Freeze for Segment<Args, Stack>
impl<Args, Stack> RefUnwindSafe for Segment<Args, Stack>where
Args: RefUnwindSafe,
Stack: RefUnwindSafe,
impl<Args, Stack> Send for Segment<Args, Stack>
impl<Args, Stack> Sync for Segment<Args, Stack>
impl<Args, Stack> Unpin for Segment<Args, Stack>
impl<Args, Stack> UnsafeUnpin for Segment<Args, Stack>
impl<Args, Stack> UnwindSafe for Segment<Args, Stack>where
Args: UnwindSafe,
Stack: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more