Expand description

EString

A simple way to parse a string using type annotations.

This package was originally designed for enve

Usage

Basic

use estring::EString;

fn main() -> estring::Result<()> {
    let res: i32 = EString::from("10").parse()?;
    assert_eq!(res, 10);
    Ok(())
}

You can use predefined structs like SepVec if you enable structs feature.

Note: You can use custom types as annotations! Just implement ParseFragment!

use estring::{SepVec, EString};

type PlusVec<T> = SepVec<T, '+'>;
type MulVec<T> = SepVec<T, '*'>;

fn main() -> estring::Result<()> {
    let res = EString::from("10+5*2+3")
        .parse::<PlusVec<MulVec<f32>>>()?
        .iter()
        .map(|m| m.iter().product::<f32>())
        .sum::<f32>();

    assert_eq!(res, 23.0);
    Ok(())
}

You can also use predefined aggregators if you enable aggs feature.

use estring::{Aggregate, EString, Product, SepVec, Sum};

type PlusVec<T> = SepVec<T, '+'>;
type MulVec<T> = SepVec<T, '*'>;

fn main() -> estring::Result<()> {
    let res = EString::from("10+5*2+3")
        .parse::<Sum<PlusVec<Product<MulVec<f32>>>>>()?
        .agg();

    assert_eq!(res, 23.0);
    Ok(())
}

For more details, see examples.

Re-exports

pub use agg::*;
pub use low::*;
pub use structs::*;
pub use crate::core::*;

Modules

This module will contain aggregate functions (Sum, Product, etc)

Contains the EString type, as well as the basic implementation of conversions to string types

Contains the low-level api parse string more accurate!

Contains implementations for standard types (bool, numbers, Option, etc.)

Contains the predefined types (SepVec, Pair, etc.)

Structs

The error type for operations interacting with EString’s fragments.

Enums

The reason for the failure to parse.

Type Definitions

The type returned by parser methods.