From d602c0676eb06eee1739822b250184a5da82defd Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 14 Oct 2025 00:07:30 +0000 Subject: [PATCH] feat: more error contexts --- --- 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; --- 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}"); } --- a/crates/nix-eval/src/macros.rs +++ b/crates/nix-eval/src/macros.rs @@ -66,20 +66,21 @@ #[macro_export] macro_rules! nix_go { - (@o($o:expr) . $var:ident $($tt:tt)*) => {{ - nix_go!(@o($o.get_field(stringify!($var))?) $($tt)*) + (@o($o:expr, $path:expr) . $var:ident $($tt:tt)*) => {{ + nix_go!(@o($o.get_field(stringify!($var)).context(concat!("getting nested ", $path))?, $path) $($tt)*) }}; - (@o($o:expr) [ $v:expr ] $($tt:tt)*) => {{ - nix_go!(@o($o.get_field($v)?) $($tt)*) + (@o($o:expr, $path:expr) [ $v:expr ] $($tt:tt)*) => {{ + nix_go!(@o($o.get_field($v).context(concat!("getting nested ", $path))?, $path) $($tt)*) }}; - (@o($o:expr) ($($var:tt)*) $($tt:tt)*) => { - nix_go!(@o($o.call($crate::nix_expr_inner!($($var)+))?) $($tt)*) + (@o($o:expr, $path:expr) ($($var:tt)*) $($tt:tt)*) => { + nix_go!(@o($o.call($crate::nix_expr_inner!($($var)+)).context(concat!("getting nested ", $path))?, $path) $($tt)*) }; - (@o($o:expr)) => {$o}; + (@o($o:expr, $path:expr)) => {$o}; ($field:ident $($tt:tt)+) => {{ use $crate::nix_go; + use ::anyhow::Context; let out = $field.clone(); - nix_go!(@o(out) $($tt)*) + nix_go!(@o(out, ::std::stringify!($($tt)*)) $($tt)*) }} } #[macro_export] -- gitstuff