From 6e22a8de3e84b45ac79a4c1769c065059f2108d3 Mon Sep 17 00:00:00 2001 From: _cry64 Date: Sun, 15 Mar 2026 03:18:39 +1000 Subject: [PATCH] primop (stash) --- flake.lock | 21 +++++++++++++++++++++ snow/src/nix/mod.rs | 2 ++ snow/src/nix/primop.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 snow/src/nix/primop.rs diff --git a/flake.lock b/flake.lock index fc8e402..a8c1976 100644 --- a/flake.lock +++ b/flake.lock @@ -185,9 +185,30 @@ "microvm": "microvm", "nixpkgs": "nixpkgs", "nt": "nt", + "sops-nix": "sops-nix", "systems": "systems_3" } }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773096132, + "narHash": "sha256-M3zEnq9OElB7zqc+mjgPlByPm1O5t2fbUrH3t/Hm5Ag=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "d1ff3b1034d5bab5d7d8086a7803c5a5968cd784", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, "spectrum": { "flake": false, "locked": { diff --git a/snow/src/nix/mod.rs b/snow/src/nix/mod.rs index 5f24261..35ddad3 100644 --- a/snow/src/nix/mod.rs +++ b/snow/src/nix/mod.rs @@ -1,7 +1,9 @@ mod flake; mod flakeref; mod nix; +mod primop; pub use flake::{Flake, FlakeBuilder, FlakeLockMode}; pub use flakeref::FlakeRef; pub use nix::Nix; +pub use primop::PrimOp; diff --git a/snow/src/nix/primop.rs b/snow/src/nix/primop.rs new file mode 100644 index 0000000..dab96b5 --- /dev/null +++ b/snow/src/nix/primop.rs @@ -0,0 +1,40 @@ +use std::ffi::{CStr, CString, NulError}; + +use anyhow::Result; +use nix_bindings_expr::{eval_state::EvalState, primop::PrimOpMeta, value::Value}; + +pub struct PrimOp<'a, const N: usize> { + // pub name: &'a CStr, + // pub doc: &'a CStr, + // pub args: [&'a CStr; N], + meta: PrimOpMeta<'a, N>, + // f: Box Result>, +} + +impl<'a, const N: usize> PrimOp<'a, N> { + pub fn new(name: S, doc: S, args: [&'a CStr; N]) -> Result + where + S: AsRef, + { + let name = CString::new(name.as_ref())?.as_ref(); + let doc = CString::new(doc.as_ref())?.as_ref(); + // let args = args + // .iter() + // .map(|x| CString::new(x.as_ref()).as_ref()) + // .collect::, &NulError>>()? + // .iter() + // .map(|x| x.as_ref()) + // .collect::>() + // .as_slice(); + + Ok(PrimOp { + // name, + // doc, + // args, + meta: PrimOpMeta { name, doc, args }, + }) + // Ok(PrimOp { + // meta: PrimOpMeta { name, doc, args }, + // }) + } +}