use crate::eval::ParametersSpec;
use crate::eval::ParametersSpecParam;
use crate::values::FrozenValue;
pub enum NativeSigArg {
Required(&'static str),
Optional(&'static str),
Defaulted(&'static str, FrozenValue),
}
impl NativeSigArg {
fn param(&self) -> (&str, ParametersSpecParam<FrozenValue>) {
match self {
NativeSigArg::Required(name) => (name, ParametersSpecParam::Required),
NativeSigArg::Optional(name) => (name, ParametersSpecParam::Optional),
NativeSigArg::Defaulted(name, value) => (name, ParametersSpecParam::Defaulted(*value)),
}
}
}
pub fn parameter_spec(
name: &'static str,
pos_only: &[NativeSigArg],
pos_or_named: &[NativeSigArg],
args: bool,
named_only: &[NativeSigArg],
kwargs: bool,
) -> ParametersSpec<FrozenValue> {
ParametersSpec::new_parts(
name,
pos_only.iter().map(NativeSigArg::param),
pos_or_named.iter().map(NativeSigArg::param),
args,
named_only.iter().map(NativeSigArg::param),
kwargs,
)
}
pub fn parameter_spec_for_arguments(name: &'static str) {
parameter_spec(name, &[], &[], true, &[], true);
}