git.delta.rocks / jrsonnet / refs/commits / a682d0e384a2

difftreelog

feat unwrap_type macro

Yaroslav Bolyukin2021-01-25parent: #cebe933.patch.diff
in: master

4 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -205,6 +205,9 @@
 [[package]]
 name = "jrsonnet-types"
 version = "0.3.3"
+dependencies = [
+ "peg",
+]
 
 [[package]]
 name = "jsonnet"
modifiedcrates/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};
modifiedcrates/jrsonnet-evaluator/src/function.rsdiffbeforeafterboth
146 ($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};
150
149 let args = $args;151 let args = $args;
150 if args.len() > $total_args {152 if args.len() > $total_args {
modifiedcrates/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}")]