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

difftreelog

feat more error contexts

tklpopmtYaroslav Bolyukin2025-10-14parent: #61365df.patch.diff
in: trunk

3 files changed

modifiedcrates/fleet-base/src/host.rsdiffbeforeafterboth
--- a/crates/fleet-base/src/host.rs
+++ b/crates/fleet-base/src/host.rs
@@ -520,7 +520,7 @@
 		let secrets = nix_go!(nixos.secrets);
 		let mut out = Vec::new();
 		for name in secrets.list_fields()? {
-			let secret = secrets.get_field(&name)?;
+			let secret = secrets.get_field(&name).context("getting secret")?;
 			let is_shared: bool = nix_go_json!(secret.shared);
 			if is_shared {
 				continue;
modifiedcrates/nix-eval/src/lib.rsdiffbeforeafterboth
--- a/crates/nix-eval/src/lib.rs
+++ b/crates/nix-eval/src/lib.rs
@@ -727,7 +727,9 @@
 		let function = match kind {
 			FunctorKind::Function => self.clone(),
 			FunctorKind::Functor => {
-				let f = self.get_field("__functor")?;
+				let f = self
+					.get_field("__functor")
+					.context("getting functor value")?;
 				assert_eq!(
 					f.type_of(),
 					NixType::Function,
@@ -754,9 +756,12 @@
 		if !self.is_derivation() {
 			bail!("expected derivation to build")
 		}
-		let output_name = self.get_field("outputName")?.to_string()?;
+		let output_name = self
+			.get_field("outputName")
+			.context("getting output name field")?
+			.to_string()?;
 		let v = if output_name != output {
-			let out = self.get_field(output)?;
+			let out = self.get_field(output).context("getting target output")?;
 			if !out.is_derivation() {
 				bail!("unknown output: {output}");
 			}
modifiedcrates/nix-eval/src/macros.rsdiffbeforeafterboth
before · crates/nix-eval/src/macros.rs
1#[macro_export]2macro_rules! nix_expr_inner {3	//(@munch_object FIXME: value should be arbitrary nix_expr_inner input... Time to write proc-macro?4	(@obj($o:ident) $field:ident$(, $($tt:tt)*)?) => {{5		$o.insert(6			stringify!($field),7			$crate::Value::from($field),8		);9		$(nix_expr_inner!(@obj($o) $($tt)*);)?10	}};11	(@obj($o:ident) $field:ident: $v:expr$(, $($tt:tt)*)?) => {{12		$o.insert(13			stringify!($field),14			$crate::Value::from($v),15		);16		$(nix_expr_inner!(@obj($o) $($tt)*);)?17	}};18	(@obj($o:ident)) => {{}};19	(Obj { $($tt:tt)* }) => {{20		use $crate::{nix_expr_inner};21		let mut out = std::collections::hash_map::HashMap::new();22		nix_expr_inner!(@obj(out) $($tt)*);23		Value::new_attrs(out)24	}};25	(@field($o:ident) . $var:ident $($tt:tt)*) => {{26		$o.index_attr(stringify!($var));27		nix_expr_inner!(@field($o) $($tt)*);28	}};29	(@field($o:ident) [{ $v:expr }] $($tt:tt)*) => {{30		$o.push(Index::attr(&$v));31		nix_expr_inner!(@o($o) $($tt)*);32	}};33	(@field($o:ident) [ $($var:tt)+ ] $($tt:tt)*) => {{34		$o.push(Index::Expr($crate::nix_expr_inner!($($var)+)));35		nix_expr_inner!(@o($o) $($tt)*);36	}};37	(@field($o:ident) ($($var:tt)*) $($tt:tt)*) => {38		$o.push(Index::ExprApply($crate::nix_expr_inner!($($var)+)));39		nix_expr_inner!(@o($o) $($tt)*);40	};41	(@field($o:ident)) => {};42	($field:ident $($tt:tt)*) => {{43		use $crate::{nix_expr_inner};44		// might be used if indexed45		#[allow(unused_mut)]46		let mut out = $field.clone();47		nix_expr_inner!(@field(out) $($tt)*);48		out49	}};50	($v:literal) => {{51		use $crate::macros::NixExprBuilder;52		NixExprBuilder::string($v)53	}};54	({$v:expr}) => {{55		$crate::Value::serialized(&$v)?56	}}57}58#[macro_export]59macro_rules! nix_expr {60	($($tt:tt)+) => {{61		use $crate::{macros::{NixExprBuilder}, Value, nix_expr_inner};62		let expr = nix_expr_inner!($($tt)+);63		Field::new(expr.session(), expr.out)64	}};65}6667#[macro_export]68macro_rules! nix_go {69	(@o($o:expr) . $var:ident $($tt:tt)*) => {{70		nix_go!(@o($o.get_field(stringify!($var))?) $($tt)*)71	}};72	(@o($o:expr) [ $v:expr ] $($tt:tt)*) => {{73		nix_go!(@o($o.get_field($v)?) $($tt)*)74	}};75	(@o($o:expr) ($($var:tt)*) $($tt:tt)*) => {76		nix_go!(@o($o.call($crate::nix_expr_inner!($($var)+))?) $($tt)*)77	};78	(@o($o:expr)) => {$o};79	($field:ident $($tt:tt)+) => {{80		use $crate::nix_go;81		let out = $field.clone();82		nix_go!(@o(out) $($tt)*)83	}}84}85#[macro_export]86macro_rules! nix_go_json {87	($($tt:tt)*) => {{88		$crate::nix_go!($($tt)*).as_json()?89	}};90}