use cel::common::ast::CallExpr;
use ferricel_types::functions::RuntimeFunction;
use walrus::InstrSeqBuilder;
use crate::compiler::{
context::{CompilerContext, CompilerEnv},
helpers::{compile_call_binary, compile_call_unary},
};
pub fn compile_k8s_cidr_function(
func_name: &str,
call_expr: &CallExpr,
body: &mut InstrSeqBuilder,
env: &CompilerEnv,
ctx: &CompilerContext,
module: &mut walrus::Module,
) -> Result<(), anyhow::Error> {
match func_name {
"cidr" => compile_call_unary(
call_expr,
func_name,
RuntimeFunction::K8sCidrParse,
body,
env,
ctx,
module,
),
"isCIDR" => compile_call_unary(
call_expr,
func_name,
RuntimeFunction::K8sIsCidr,
body,
env,
ctx,
module,
),
"ip" => compile_call_unary(
call_expr,
func_name,
RuntimeFunction::K8sCidrIp,
body,
env,
ctx,
module,
),
"masked" => compile_call_unary(
call_expr,
func_name,
RuntimeFunction::K8sCidrMasked,
body,
env,
ctx,
module,
),
"prefixLength" => compile_call_unary(
call_expr,
func_name,
RuntimeFunction::K8sCidrPrefixLength,
body,
env,
ctx,
module,
),
"containsIP" => compile_call_binary(
call_expr,
func_name,
RuntimeFunction::K8sCidrContainsIpObj,
body,
env,
ctx,
module,
),
"containsCIDR" => compile_call_binary(
call_expr,
func_name,
RuntimeFunction::K8sCidrContainsCidrObj,
body,
env,
ctx,
module,
),
_ => anyhow::bail!("Unknown Kubernetes CIDR function: {}", func_name),
}
}