Skip to main content

CSharpExpr

Enum CSharpExpr 

Source
pub enum CSharpExpr {
Show 22 variants Lit(CSharpLit), Var(String), BinOp { op: String, lhs: Box<CSharpExpr>, rhs: Box<CSharpExpr>, }, UnaryOp { op: String, operand: Box<CSharpExpr>, }, Call { callee: Box<CSharpExpr>, args: Vec<CSharpExpr>, }, MethodCall { receiver: Box<CSharpExpr>, method: String, type_args: Vec<CSharpType>, args: Vec<CSharpExpr>, }, New { ty: CSharpType, args: Vec<CSharpExpr>, }, Lambda { params: Vec<(String, Option<CSharpType>)>, body: Box<CSharpExpr>, }, Ternary { cond: Box<CSharpExpr>, then_expr: Box<CSharpExpr>, else_expr: Box<CSharpExpr>, }, Null, Default(Option<CSharpType>), NameOf(String), TypeOf(CSharpType), Await(Box<CSharpExpr>), Throw(Box<CSharpExpr>), Is { expr: Box<CSharpExpr>, pattern: String, }, As { expr: Box<CSharpExpr>, ty: CSharpType, }, Member(Box<CSharpExpr>, String), Index(Box<CSharpExpr>, Box<CSharpExpr>), SwitchExpr { scrutinee: Box<CSharpExpr>, arms: Vec<CSharpSwitchArm>, }, Interpolated(Vec<CSharpInterpolationPart>), CollectionExpr(Vec<CSharpExpr>),
}
Expand description

C# expression AST for code generation.

Variants§

§

Lit(CSharpLit)

A literal value: 42, "hello", true, null

§

Var(String)

A variable or identifier: x, myVar, MyType

§

BinOp

Binary operator: lhs + rhs, a == b

§

UnaryOp

Unary operator: !x, -n, ~flags

Fields

§operand: Box<CSharpExpr>
§

Call

Static/free function call: Math.Abs(x), Foo(a, b)

Fields

§callee: Box<CSharpExpr>
§

MethodCall

Method call on a receiver: list.Where(pred)

Fields

§receiver: Box<CSharpExpr>
§method: String
§type_args: Vec<CSharpType>
§

New

Object creation: new Foo(a, b)

Fields

§

Lambda

Lambda / anonymous function: x => x + 1 or (x, y) => x + y

Fields

§

Ternary

Ternary conditional: cond ? then_expr : else_expr

Fields

§then_expr: Box<CSharpExpr>
§else_expr: Box<CSharpExpr>
§

Null

null literal (convenience alias)

§

Default(Option<CSharpType>)

default(T) or default

§

NameOf(String)

nameof(x) expression

§

TypeOf(CSharpType)

typeof(T) expression

§

Await(Box<CSharpExpr>)

await expr

§

Throw(Box<CSharpExpr>)

throw new Exception(msg) as expression (C# 7+)

§

Is

expr is Pattern / expr is Type varName

Fields

§pattern: String
§

As

expr as Type

Fields

§

Member(Box<CSharpExpr>, String)

Member access: obj.Field

§

Index(Box<CSharpExpr>, Box<CSharpExpr>)

Index access: arr[idx]

§

SwitchExpr

Switch expression: expr switch { arm1, arm2, ... }

Fields

§scrutinee: Box<CSharpExpr>
§

Interpolated(Vec<CSharpInterpolationPart>)

String interpolation: $"Hello {name}!"

§

CollectionExpr(Vec<CSharpExpr>)

Collection expression: [a, b, c] (C# 12)

Trait Implementations§

Source§

impl Clone for CSharpExpr

Source§

fn clone(&self) -> CSharpExpr

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 CSharpExpr

Source§

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

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

impl Display for CSharpExpr

Source§

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

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

impl PartialEq for CSharpExpr

Source§

fn eq(&self, other: &CSharpExpr) -> 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 CSharpExpr

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.

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.

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
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.