# embed-nu [![](https://img.shields.io/crates/v/embed-nu?style=for-the-badge)](https://crates.io/crates/embed-nu) [![](https://img.shields.io/docsrs/embed-nu/latest?style=for-the-badge)](https://docs.rs/embed-nu/) *embed-nu* can be used to call [nu](https://github.com/nushell/nushell) scripts and expressions from within your rust application. This crate provides a wrapper around the nu engine to easily build the nu execution context, parse scripts and call functions. As this crate includes nu as a dependency calls to nu don't have the overhead of calling an external application. ## Example Usage ```rust use embed_nu::{rusty_value::*, CommandGroupConfig, Context, NewEmpty, PipelineData}; fn main() { let mut ctx = Context::builder() .with_command_groups(CommandGroupConfig::default().all_groups(true)) .unwrap() .add_parent_env_vars() .build() .unwrap(); // eval a nu expression let pipeline = ctx .eval_raw( r#"echo "Hello World from this eval""#, PipelineData::empty(), ) .unwrap(); // print the pipeline of this expression. In this case // this pipeline contains the text of the echo expression // as it's the last expressin ctx.print_pipeline(pipeline).unwrap(); // this eval put's the function definition of hello into scope ctx.eval_raw( r#" def hello [] { echo "Hello World from this script"; echo # dummy echo so I don't have to print the output } "#, PipelineData::empty(), ) .unwrap(); // hello can now be called as a function ctx.call_fn("hello", [] as [String; 0]).unwrap(); } ``` ## Converting data into nu values This crate uses [rusty-value](https://github.com/Trivernis/rusty-value) to convert any rust data type into nu values. ```rust use embed_nu::{rusty_value::*, IntoValue}; // derive rusty value #[derive(RustyValue)] struct MyStruct { foo: String, bar: usize, } fn main() { let instance = MyStruct { foo: String::from("foo"), bar: 12 }; // convert this struct into a nu value // this is also done implicitly when passing the value to the nu context // as function arguments or variables let value = instance.into_value(); dbg!(value); } ```