difftreelog
feat unwrap_type macro
in: master
4 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -205,6 +205,9 @@
[[package]]
name = "jrsonnet-types"
version = "0.3.3"
+dependencies = [
+ "peg",
+]
[[package]]
name = "jsonnet"
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -1,8 +1,7 @@
use crate::{
equals,
error::{Error::*, Result},
- evaluate, parse_args, primitive_equals, push, throw,
- typed::CheckType,
+ parse_args, primitive_equals, push, throw,
with_state, ArrValue, Context, FuncVal, LazyVal, Val,
};
use format::{format_arr, format_obj};
crates/jrsonnet-evaluator/src/function.rsdiffbeforeafterboth146 ($ctx: expr, $fn_name: expr, $args: expr, $total_args: expr, [146 ($ctx: expr, $fn_name: expr, $args: expr, $total_args: expr, [147 $($id: expr, $name: ident: $ty: expr $(=>$match: path)?);+ $(;)?147 $($id: expr, $name: ident: $ty: expr $(=>$match: path)?);+ $(;)?148 ], $handler:block) => {{148 ], $handler:block) => {{149 use $crate::{error::Error::*, throw, evaluate, push, typed::CheckType};150149 let args = $args;151 let args = $args;150 if args.len() > $total_args {152 if args.len() > $total_args {crates/jrsonnet-evaluator/src/typed.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/typed.rs
+++ b/crates/jrsonnet-evaluator/src/typed.rs
@@ -8,6 +8,18 @@
use jrsonnet_types::{ComplexValType, ValType};
use thiserror::Error;
+#[macro_export]
+macro_rules! unwrap_type {
+ ($desc: expr, $value: expr, $typ: expr => $match: path) => {{
+ use $crate::{push, typed::CheckType};
+ push(None, $desc, || Ok($typ.check(&$value)?))?;
+ match $value {
+ $match(v) => v,
+ _ => unreachable!(),
+ }
+ }}
+}
+
#[derive(Debug, Error, Clone)]
pub enum TypeError {
#[error("expected {0}, got {1}")]