use bashkit::{
Bash, ExtFunctionResult, MontyObject, PythonExternalFnHandler, PythonLimits, Result,
};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<()> {
let handler: PythonExternalFnHandler = Arc::new(|name, args, _kwargs| {
Box::pin(async move {
if name != "add" {
return ExtFunctionResult::Return(MontyObject::None);
}
let a = match args.first() {
Some(MontyObject::Int(v)) => *v,
_ => 0,
};
let b = match args.get(1) {
Some(MontyObject::Int(v)) => *v,
_ => 0,
};
ExtFunctionResult::Return(MontyObject::Int(a + b))
})
});
let mut bash = Bash::builder()
.python_with_external_handler(PythonLimits::default(), vec!["add".to_string()], handler)
.env("BASHKIT_ALLOW_INPROCESS_PYTHON", "1")
.build();
let result = bash.exec("python3 -c \"print(add(20, 22))\"").await?;
assert_eq!(result.exit_code, 0);
assert_eq!(result.stdout.trim(), "42");
println!("external function result: {}", result.stdout.trim());
Ok(())
}