use starlark_derive::starlark_module;
use starlark_map::small_map::SmallMap;
use crate as starlark;
use crate::assert::Assert;
use crate::environment::GlobalsBuilder;
#[starlark_module]
fn test_kwargs_module(globals: &mut GlobalsBuilder) {
fn pos_kwargs(
#[starlark(require = pos)] a: u32,
#[starlark(require = pos)] b: bool,
#[starlark(kwargs)] kwargs: SmallMap<String, u64>,
) -> anyhow::Result<String> {
Ok(format!("a={} b={} kwargs={:?}", a, b, kwargs))
}
fn pos_named_kwargs(
#[starlark(require = pos)] a: u32,
#[starlark(require = named)] b: bool,
#[starlark(kwargs)] kwargs: SmallMap<String, u64>,
) -> anyhow::Result<String> {
Ok(format!("a={} b={} kwargs={:?}", a, b, kwargs))
}
}
#[test]
fn test_kwargs() {
let mut a = Assert::new();
a.globals_add(test_kwargs_module);
a.eq(
r#"'a=1 b=true kwargs={"x": 3}'"#,
"pos_kwargs(1, True, x=3)",
);
a.eq(
r#"'a=1 b=true kwargs={"x": 3}'"#,
"pos_named_kwargs(1, b=True, x=3)",
);
}