Enum Procedure

Source
pub enum Procedure {
    Array(Vec<Box<Conditional>>),
    Primary(Box<Primary>),
}
Expand description

Represents a procedure (sequence of expressions) in the AIMX language.

Procedures are sequences of conditional expressions that can be evaluated sequentially. They are typically used as the body of closure expressions.

§Variants

  • Array(Vec<Box<Conditional>>): A sequence of conditional expressions separated by semicolons
  • Primary(Box<Primary>): An optimized representation when the procedure is a simple primary expression

§Evaluation Behavior

When a procedure contains multiple expressions, they are evaluated in order and the result of the last expression is returned. This allows for sequencing operations while maintaining a functional programming style.

§Examples

// Parses to Procedure::Primary(expression)
x + 1

// Parses to Procedure::Array([expression1, expression2, ...])
x * 2; x + 3; x - 1

Variants§

§

Array(Vec<Box<Conditional>>)

§

Primary(Box<Primary>)

Primary flattened AST optimization - used when the procedure is a simple primary expression

Trait Implementations§

Source§

impl Clone for Procedure

Source§

fn clone(&self) -> Procedure

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Procedure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Procedure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the procedure for display.

This implementation uses the Writable trait to format the procedure as a string suitable for user display.

§Arguments
  • f - The formatter to write to
§Returns

Returns fmt::Result indicating success or failure.

Source§

impl ExpressionLike for Procedure

Source§

fn evaluate(&self, context: &mut dyn ContextLike) -> Result<Value>

Evaluates the procedure expression.

For procedure arrays, this evaluates each conditional expression in sequence and returns the result of the last expression. For primary procedures, this evaluates the single expression directly.

§Arguments
  • context - The evaluation context
§Returns

Returns Result<Value> containing the result of evaluating the procedure.

§Examples
let mut context = Context::new();
let procedure = Procedure::Primary(Box::new(Primary::Literal(aimx::Literal::Number(42.0))));
let result = procedure.evaluate(&mut context)?;
// result should be Value::Literal(Literal::Number(42.0))
Source§

fn write(&self, writer: &mut Writer)

Writes the procedure expression to a writer.

This method formats the procedure according to its variant and writes it to the provided writer. The output matches the AIMX syntax for procedures.

§Arguments
  • writer - The writer to write the formatted procedure to
Source§

fn to_sanitized(&self) -> String

Returns a sanitized string representation of the procedure.

Sanitized output is suitable for display to users and may include formatting that makes the expression easier to read.

§Returns

Returns a String containing the sanitized procedure representation.

Source§

fn to_formula(&self) -> String

Returns a formula string representation of the procedure.

Formula output is suitable for use as input to the parser and matches the exact AIMX syntax.

§Returns

Returns a String containing the formula representation.

Source§

impl PartialEq for Procedure

Source§

fn eq(&self, other: &Procedure) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Procedure

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> ToStringFallible for T
where T: Display,

§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,