difftreelog
refactor nix-eval macro-support
in: trunk
3 files changed
cmds/repl-plugin-unstable/src/lib.rsdiffbeforeafterboth1use fleet_base::primops::init_primops;1use fleet_base::primops::init_primops;223/// SAFETY: expected plugin dynamic library entry point3#[unsafe(no_mangle)]4#[unsafe(no_mangle)]4fn nix_plugin_entry() {5fn nix_plugin_entry() {5 init_primops();6 init_primops();crates/nix-eval/src/lib.rsdiffbeforeafterboth47#[doc(hidden)]47#[doc(hidden)]48pub mod macros;48pub mod macros;4950#[doc(hidden)]51pub mod __macro_support {52 pub use std::collections::hash_map::HashMap;5354 pub use anyhow::Context;55 pub use tokio::task::block_in_place;56}49pub mod util;57pub mod util;505851#[allow(59#[allow(crates/nix-eval/src/macros.rsdiffbeforeafterboth18 (@obj($o:ident)) => {{}};18 (@obj($o:ident)) => {{}};19 (Obj { }) => {{19 (Obj { }) => {{20 use $crate::{nix_expr_inner};20 use $crate::{nix_expr_inner};21 let out = std::collections::hash_map::HashMap::new();21 let out = $crate::__macro_support::HashMap::new();22 Value::new_attrs(out)22 Value::new_attrs(out)23 }};23 }};24 (Obj { $($tt:tt)+ }) => {{24 (Obj { $($tt:tt)+ }) => {{25 use $crate::{nix_expr_inner};25 use $crate::{nix_expr_inner};26 let mut out = std::collections::hash_map::HashMap::new();26 let mut out = $crate::__macro_support::HashMap::new();27 nix_expr_inner!(@obj(out) $($tt)*);27 nix_expr_inner!(@obj(out) $($tt)*);28 Value::new_attrs(out)28 Value::new_attrs(out)29 }};29 }};68#[macro_export]68#[macro_export]69macro_rules! nix_go {69macro_rules! nix_go {70 (@o($o:expr, $path:expr) . $var:ident $($tt:tt)*) => {{70 (@o($o:expr, $path:expr) . $var:ident $($tt:tt)*) => {{71 nix_go!(@o(tokio::task::block_in_place(|| $o.get_field(stringify!($var))).context(concat!("getting nested ", $path))?, $path) $($tt)*)71 nix_go!(@o($crate::__macro_support::block_in_place(|| $o.get_field(stringify!($var))).context(concat!("getting nested ", $path))?, $path) $($tt)*)72 }};72 }};73 (@o($o:expr, $path:expr) [ $v:expr ] $($tt:tt)*) => {{73 (@o($o:expr, $path:expr) [ $v:expr ] $($tt:tt)*) => {{74 nix_go!(@o(tokio::task::block_in_place(|| $o.get_field($v)).context(concat!("getting nested ", $path))?, $path) $($tt)*)74 nix_go!(@o($crate::__macro_support::block_in_place(|| $o.get_field($v)).context(concat!("getting nested ", $path))?, $path) $($tt)*)75 }};75 }};76 (@o($o:expr, $path:expr) ($($var:tt)*) $($tt:tt)*) => {76 (@o($o:expr, $path:expr) ($($var:tt)*) $($tt:tt)*) => {77 nix_go!(@o(tokio::task::block_in_place(|| $o.call($crate::nix_expr_inner!($($var)+))).context(concat!("getting nested ", $path))?, $path) $($tt)*)77 nix_go!(@o($crate::__macro_support::block_in_place(|| $o.call($crate::nix_expr_inner!($($var)+))).context(concat!("getting nested ", $path))?, $path) $($tt)*)78 };78 };79 (@o($o:expr, $path:expr)) => {$o};79 (@o($o:expr, $path:expr)) => {$o};80 ($field:ident $($tt:tt)+) => {{80 ($field:ident $($tt:tt)+) => {{81 use $crate::nix_go;81 use $crate::nix_go;82 use ::anyhow::Context;82 use $crate::__macro_support::Context;83 let out = $field.clone();83 let out = $field.clone();84 nix_go!(@o(out, ::std::stringify!($($tt)*)) $($tt)*)84 nix_go!(@o(out, stringify!($($tt)*)) $($tt)*)85 }}85 }}86}86}87#[macro_export]87#[macro_export]88macro_rules! nix_go_json {88macro_rules! nix_go_json {89 ($($tt:tt)*) => {{89 ($($tt:tt)*) => {{90 tokio::task::block_in_place(|| $crate::nix_go!($($tt)*).as_json())?90 $crate::__macro_support::block_in_place(|| $crate::nix_go!($($tt)*).as_json())?91 }};91 }};92}92}9393