diff options
Diffstat (limited to '')
-rw-r--r-- | users/Profpatsch/arglib/netencode.nix | 113 |
1 files changed, 64 insertions, 49 deletions
diff --git a/users/Profpatsch/arglib/netencode.nix b/users/Profpatsch/arglib/netencode.nix index c628d800dedf..2b94bd51cfcb 100644 --- a/users/Profpatsch/arglib/netencode.nix +++ b/users/Profpatsch/arglib/netencode.nix @@ -1,64 +1,79 @@ { depot, pkgs, lib, ... }: let - netencode = { - rust = depot.nix.writers.rustSimpleLib - { - name = "arglib-netencode"; - dependencies = [ - depot.users.Profpatsch.execline.exec-helpers - depot.users.Profpatsch.netencode.netencode-rs - ]; - } '' - extern crate netencode; - extern crate exec_helpers; - use netencode::{T}; - use std::os::unix::ffi::OsStrExt; + # Add the given nix arguments to the program as ARGLIB_NETENCODE envvar + # + # Calls `netencode.gen.dwim` on the provided nix args value. + with-args = args: prog: depot.nix.writeExecline "${prog.name}-with-args" { } [ + "export" + "ARGLIB_NETENCODE" + (depot.users.Profpatsch.netencode.gen.dwim args) + prog + ]; - pub fn arglib_netencode(prog_name: &str, env: Option<&std::ffi::OsStr>) -> T { - let env = match env { - None => std::ffi::OsStr::from_bytes("ARGLIB_NETENCODE".as_bytes()), - Some(a) => a - }; - let t = match std::env::var_os(env) { - None => exec_helpers::die_user_error(prog_name, format!("could not read args, envvar {} not set", env.to_string_lossy())), - // TODO: good error handling for the different parser errors - Some(soup) => match netencode::parse::t_t(soup.as_bytes()) { - Ok((remainder, t)) => match remainder.is_empty() { - true => t, - false => exec_helpers::die_environment_problem(prog_name, format!("arglib: there was some unparsed bytes remaining: {:?}", remainder)) - }, - Err(err) => exec_helpers::die_environment_problem(prog_name, format!("arglib parsing error: {:?}", err)) - } - }; - std::env::remove_var(env); - t - } - ''; + rust = depot.nix.writers.rustSimpleLib + { + name = "arglib-netencode"; + dependencies = [ + depot.users.Profpatsch.execline.exec-helpers + depot.users.Profpatsch.netencode.netencode-rs + ]; + } '' + extern crate netencode; + extern crate exec_helpers; - haskell = pkgs.haskellPackages.mkDerivation { - pname = "arglib-netencode"; - version = "0.1.0"; + use netencode::{T}; + use std::os::unix::ffi::OsStrExt; - src = depot.users.Profpatsch.exactSource ./. [ - ./arglib-netencode.cabal - ./ArglibNetencode.hs - ]; + pub fn arglib_netencode(prog_name: &str, env: Option<&std::ffi::OsStr>) -> T { + let env = match env { + None => std::ffi::OsStr::from_bytes("ARGLIB_NETENCODE".as_bytes()), + Some(a) => a + }; + let t = match std::env::var_os(env) { + None => exec_helpers::die_user_error(prog_name, format!("could not read args, envvar {} not set", env.to_string_lossy())), + // TODO: good error handling for the different parser errors + Some(soup) => match netencode::parse::t_t(soup.as_bytes()) { + Ok((remainder, t)) => match remainder.is_empty() { + true => t, + false => exec_helpers::die_environment_problem(prog_name, format!("arglib: there was some unparsed bytes remaining: {:?}", remainder)) + }, + Err(err) => exec_helpers::die_environment_problem(prog_name, format!("arglib parsing error: {:?}", err)) + } + }; + std::env::remove_var(env); + t + } + ''; - libraryHaskellDepends = [ - depot.users.Profpatsch.my-prelude - depot.users.Profpatsch.netencode.netencode-hs - depot.users.Profpatsch.execline.exec-helpers-hs - ]; + haskell = pkgs.haskellPackages.mkDerivation { + pname = "arglib-netencode"; + version = "0.1.0"; - isLibrary = true; - license = lib.licenses.mit; + src = depot.users.Profpatsch.exactSource ./. [ + ./arglib-netencode.cabal + ./ArglibNetencode.hs + ]; + libraryHaskellDepends = [ + depot.users.Profpatsch.my-prelude + depot.users.Profpatsch.netencode.netencode-hs + depot.users.Profpatsch.execline.exec-helpers-hs + ]; + + isLibrary = true; + license = lib.licenses.mit; - }; }; + in -depot.nix.readTree.drvTargets netencode +depot.nix.readTree.drvTargets { + inherit + with-args + rust + haskell + ; +} |