28 个版本
0.9.1 | 2024 年 3 月 2 日 |
---|---|
0.8.0 | 2023 年 5 月 22 日 |
0.5.6 | 2023 年 3 月 27 日 |
0.4.0 | 2022 年 12 月 14 日 |
0.3.5 | 2022 年 11 月 14 日 |
#881 in 算法
每月 624 次下载
用于 2 个 crate(通过 sloppy-core)
40KB
1K SLoC
embed-nu
embed-nu 可以用于在您的 Rust 应用程序中调用 nu 脚本和表达式。此 crate 提供了对 nu 引擎的包装,以便轻松构建 nu 执行上下文、解析脚本和调用函数。由于此 crate 将 nu 作为依赖项,因此调用 nu 不需要调用外部应用程序的开销。
示例用法
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();
}
将数据转换为 nu 值
此 crate 使用 rusty-value 将任何 Rust 数据类型转换为 nu 值。
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);
}
依赖项
~43–75MB
~1.5M SLoC