Function lka_eval

Source
pub fn lka_eval(expr: &str, scope: &dyn LkEnv) -> LkResult<Vec<u8>>
Expand description

Evaluate an expression to bytes.

Print a list of functions by using lka_eval("[help]")

Optionally add a point in the scope. See lka_eval_strict that is less strict on its input

assert_eq!( b"abc" as &[u8]    , lka_eval( "abc" ,())?, );
assert_eq!( &[0u8,1,255] as &[u8], lka_eval( r#"\0\x01\xff"# ,())?,);

// calling functions such as 'u8'
assert_eq!( b"abc" as &[u8]    , lka_eval( "ab[u8:99]" ,())?, );

assert_eq!(
           b"The '' function returns its first argument" as &[u8],
   lka_eval( "The '' function returns its first [:argument]", ())?
);

assert_eq!(
           b"Bytes are joined" as &[u8],
   lka_eval( "Bytes[: are][: joined]" , ())?
);

let result = lka_eval( "Nest expressions [u8:65] == [u8:[:65]] == \x41" , ())?;
assert_eq!(result,   b"Nest expressions A == A == A");

let result = lka_eval( "Use result as first argument with '/' [u8:65] == [:65/u8] == \x41" , ())?;
assert_eq!(result,   b"Use result as first argument with '/' A == A == A");


let result = lka_eval( "You can provide an argv [0] [1]" , &[b"like" as &[u8], b"this"])?;
assert_eq!(result,   b"You can provide an argv like this");

let lp : PointBox = lk_linkpoint(&[], b"mydomain", &[])?;
let point: &dyn Point = &lp;

assert_eq!( lka_eval( "[hash]" , point)?,&*point.hash());
let by_arg   = lka_eval( "[hash:str]", point)?;
let by_apply = lka_eval( "[hash/?b]",  point)?;
let as_field = point.hash().b64().into_bytes();
assert_eq!( by_arg, by_apply);
assert_eq!( by_arg, as_field);

// or provide both at once with (point,&[b"argv"])

// escaped characters
assert_eq!( lka_eval( r#"\n\t\:\/\\\[\]"# ,())?,  &[b'\n',b'\t',b':',b'/',b'\\',b'[',b']'] );