Expression

Enum Expression 

Source
pub enum Expression<'a> {
    Number(f64),
    Bool(bool),
    Str(&'a str),
    Symbol(&'a str),
    List(Vec<Expression<'a>>),
    Null,
}
Expand description

Represents an S-expression as a borrowed data structure.

This enum provides zero-copy access to parsed S-expressions by borrowing string slices from the original source. This is ideal for compiler use cases where you need to parse expressions without taking ownership of the data.

§Examples

use sexpression::Expression;
 
// Numbers
let num = Expression::Number(42.0);
 
// Symbols
let sym = Expression::Symbol("define");
 
// Lists
let list = Expression::List(vec![
    Expression::Symbol("+"),
    Expression::Number(1.0),
    Expression::Number(2.0)
]);

Variants§

§

Number(f64)

A numeric literal (f64)

§

Bool(bool)

A boolean literal

§

Str(&'a str)

A string literal (borrowed from source)

§

Symbol(&'a str)

A symbol/identifier (borrowed from source)

§

List(Vec<Expression<'a>>)

A list of expressions

§

Null

A null value

Implementations§

Source§

impl<'a> Expression<'a>

Source

pub fn to_owned(&self) -> OwnedExpression

Convert a borrowed expression to an owned expression.

This method allocates new strings for all string and symbol data, allowing the resulting expression to outlive the original source.

§Examples
use sexpression::Expression;
 
let borrowed = Expression::Symbol("hello");
let owned = borrowed.to_owned();
assert_eq!(owned, sexpression::OwnedExpression::Symbol("hello".to_string()));

Trait Implementations§

Source§

impl<'a> Debug for Expression<'a>

Source§

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

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

impl<'a> PartialEq for Expression<'a>

Source§

fn eq(&self, other: &Expression<'a>) -> 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<'a> StructuralPartialEq for Expression<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for Expression<'a>

§

impl<'a> RefUnwindSafe for Expression<'a>

§

impl<'a> Send for Expression<'a>

§

impl<'a> Sync for Expression<'a>

§

impl<'a> Unpin for Expression<'a>

§

impl<'a> UnwindSafe for Expression<'a>

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