feat(users/Profpatsch/netencode): add env-splice-record
It’s the inverse of record-splice-env! It sucks up the environment and prints it as a netencode dict! Only the utf-8 clean parts at least. Change-Id: I96c19fc5ea3a67a23e238f15f4d0fa783081859c Reviewed-on: https://cl.tvl.fyi/c/depot/+/2527 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
5156da542b
commit
9d7c3ee877
2 changed files with 37 additions and 8 deletions
|
@ -86,12 +86,39 @@ let
|
|||
}
|
||||
'';
|
||||
|
||||
env-splice-record = imports.writers.rustSimple {
|
||||
name = "env-splice-record";
|
||||
dependencies = [
|
||||
netencode-rs
|
||||
depot.users.Profpatsch.execline.exec-helpers
|
||||
];
|
||||
} ''
|
||||
extern crate netencode;
|
||||
extern crate exec_helpers;
|
||||
use netencode::{T};
|
||||
use std::os::unix::ffi::OsStringExt;
|
||||
|
||||
fn main() {
|
||||
exec_helpers::no_args("env-splice-record");
|
||||
let mut res = std::collections::HashMap::new();
|
||||
for (key, val) in std::env::vars_os() {
|
||||
match (String::from_utf8(key.into_vec()), String::from_utf8(val.into_vec())) {
|
||||
(Ok(k), Ok(v)) => { let _ = res.insert(k, T::Text(v)); },
|
||||
// same as in record-splice-env, we ignore non-utf8 variables
|
||||
(_, _) => {},
|
||||
}
|
||||
}
|
||||
netencode::encode(&mut std::io::stdout(), &T::Record(res).to_u()).unwrap()
|
||||
}
|
||||
'';
|
||||
|
||||
in depot.nix.utils.drvTargets {
|
||||
inherit
|
||||
netencode-rs
|
||||
netencode-mustache
|
||||
record-get
|
||||
record-splice-env
|
||||
gen
|
||||
;
|
||||
netencode-rs
|
||||
netencode-mustache
|
||||
record-get
|
||||
record-splice-env
|
||||
env-splice-record
|
||||
gen
|
||||
;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ pub enum T {
|
|||
Binary(Vec<u8>),
|
||||
// Tags
|
||||
// TODO: make into &str
|
||||
// TODO: rename to Tag
|
||||
Sum(Tag<String, T>),
|
||||
// TODO: make into &str
|
||||
Record(HashMap<String, T>),
|
||||
|
@ -81,9 +82,10 @@ pub enum U<'a> {
|
|||
// Text
|
||||
Text(&'a str),
|
||||
Binary(&'a [u8]),
|
||||
// Tags
|
||||
// TODO: the U-recursion we do here means we can’t be breadth-lazy anymore
|
||||
// like we originally planned; maybe we want to go `U<'a>` → `&'a [u8]` again?
|
||||
// Tags
|
||||
// TODO: rename to Tag
|
||||
Sum(Tag<&'a str, U<'a>>),
|
||||
Record(HashMap<&'a str, U<'a>>),
|
||||
List(Vec<U<'a>>),
|
||||
|
@ -195,7 +197,7 @@ pub fn u_from_stdin_or_die_user_error<'a>(prog_name: &'_ str, stdin_buf: &'a mut
|
|||
let u = match parse::u_u(stdin_buf) {
|
||||
Ok((rest, u)) => match rest {
|
||||
b"" => u,
|
||||
_ => exec_helpers::die_user_error(prog_name, format!("stdin contained some soup after netencode value: {:?}", rest))
|
||||
_ => exec_helpers::die_user_error(prog_name, format!("stdin contained some soup after netencode value: {:?}", String::from_utf8_lossy(rest)))
|
||||
},
|
||||
Err(err) => exec_helpers::die_user_error(prog_name, format!("unable to parse netencode from stdin: {:?}", err))
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue