1use jrsonnet_ir::ExprParams;23use crate::{4 Context, ContextBuilder, Thunk,5 destructure::destruct,6 error::{ErrorKind::*, Result},7 evaluate_named_param,8};9101112pub fn parse_default_function_call(body_ctx: Context, params: &ExprParams) -> Result<Context> {13 let fctx = Context::new_future();1415 let mut ctx = ContextBuilder::extend(body_ctx);1617 for param in params.exprs.iter() {18 if let Some(v) = ¶m.default {19 destruct(20 ¶m.destruct.clone(),21 {22 let ctx = fctx.clone();23 let name = param.destruct.name();24 let value = v.clone();25 Thunk!(move || evaluate_named_param(ctx.unwrap(), &value, name))26 },27 fctx.clone(),28 &mut ctx,29 )?;30 } else {31 destruct(32 ¶m.destruct,33 {34 let param_name = param.destruct.name();35 let params = params.clone();36 Thunk!(move || Err(FunctionParameterNotBoundInCall(37 param_name,38 params.signature39 )40 .into()))41 },42 fctx.clone(),43 &mut ctx,44 )?;45 }46 }4748 Ok(ctx.build().into_future(fctx))49}