From 60f23099bac85492e0587d643416215ed0b071a3 Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Fri, 3 Jul 2020 09:38:32 +0200 Subject: pkgs/profpatsch: move record-get to netencode --- pkgs/profpatsch/default.nix | 4 +-- pkgs/profpatsch/netencode/default.nix | 11 +++++- pkgs/profpatsch/netencode/record-get.rs | 56 +++++++++++++++++++++++++++++ pkgs/profpatsch/profpatsch.de/record-get.rs | 56 ----------------------------- 4 files changed, 68 insertions(+), 59 deletions(-) create mode 100644 pkgs/profpatsch/netencode/record-get.rs delete mode 100644 pkgs/profpatsch/profpatsch.de/record-get.rs diff --git a/pkgs/profpatsch/default.nix b/pkgs/profpatsch/default.nix index 9f8be88b..90f6345c 100644 --- a/pkgs/profpatsch/default.nix +++ b/pkgs/profpatsch/default.nix @@ -186,7 +186,6 @@ in rec { inherit (import ./profpatsch.de { inherit pkgs lib toNetstring writeExecline runExecline getBins writeRustSimple netencode-rs el-semicolon el-exec el-substitute netencode; }) websiteStatic - record-get importas-if ; @@ -226,9 +225,10 @@ in rec { Prelude ; - inherit (import ./netencode { inherit pkgs writeRustSimpleLib; }) + inherit (import ./netencode { inherit pkgs writeRustSimpleLib writeRustSimple el-semicolon el-exec; }) netencode-rs netencode-rs-tests + record-get ; inherit (import ./execline/default.nix { inherit pkgs writeRustSimpleLib rust-deps; }) diff --git a/pkgs/profpatsch/netencode/default.nix b/pkgs/profpatsch/netencode/default.nix index 2297db51..8457e1f5 100644 --- a/pkgs/profpatsch/netencode/default.nix +++ b/pkgs/profpatsch/netencode/default.nix @@ -1,4 +1,4 @@ -{ pkgs, writeRustSimpleLib }: +{ pkgs, writeRustSimpleLib, writeRustSimple, el-semicolon, el-exec }: let version-check = pkgs.buildRustCrate { @@ -34,9 +34,18 @@ let netencode-rs = netencode-rs-common false; + record-get = writeRustSimple "record-get" { + dependencies = [ netencode-rs el-semicolon el-exec ]; + # TODO: for some reason the skarnet linker flag + # is propagated by the link target is not? + buildInputs = [ pkgs.skalibs ]; + } ./record-get.rs; + + in { inherit netencode-rs netencode-rs-tests + record-get ; } diff --git a/pkgs/profpatsch/netencode/record-get.rs b/pkgs/profpatsch/netencode/record-get.rs new file mode 100644 index 00000000..bf4db3dd --- /dev/null +++ b/pkgs/profpatsch/netencode/record-get.rs @@ -0,0 +1,56 @@ +extern crate netencode; +extern crate el_semicolon; +extern crate el_exec; + +use std::io::Read; +use std::ffi::{CString, OsStr}; +use std::os::unix::ffi::{OsStringExt, OsStrExt}; +use el_semicolon::{el_semicolon, Arg}; +use netencode::{U}; +use netencode::parse::{u_u}; + +fn main() { + let args = std::env::args_os().by_ref() + .map(|s| s.into_vec()) + .skip(1) + .collect::>(); + let args_ref : Vec<&[u8]> = args.iter().map(|v| v.as_slice()).collect(); + let (arg, prog) = el_semicolon::el_semicolon(&args_ref).unwrap(); + assert!(prog.len() > 0, "record get neets a block of vars and prog, no prog provided"); + match arg { + Arg::EndOfArgv | Arg::Arg(_) => { + panic!("first argument must be a block of vars"); + }, + Arg::Block(vars) => { + let mut stdin = vec![]; + std::io::stdin().read_to_end(&mut stdin); + match u_u(&stdin) { + Ok((_, U::Record(m))) => { + for (key, val) in m.into_iter() { + // only set if it appears in the block of values. + // If the block is empty, don’t filter. + if vars.is_empty() || vars.contains(&key.as_bytes()) { + match *val { + U::Binary(b) => std::env::set_var(key, OsStr::from_bytes(b)), + _ => panic!("the value of {:?} was not a binary value!", key) + } + } + } + let mut p : Vec = vec![]; + for arg in prog { + p.push(CString::new(*arg).unwrap()); + } + el_exec::xpathexec0(&p); + }, + Ok(_) => { + eprintln!("not a record!"); + std::process::exit(100); + } + Err(e) => { + eprintln!("could not parse netencode: {:?}", e); + std::process::exit(100); + }, + } + } + } +} diff --git a/pkgs/profpatsch/profpatsch.de/record-get.rs b/pkgs/profpatsch/profpatsch.de/record-get.rs deleted file mode 100644 index bf4db3dd..00000000 --- a/pkgs/profpatsch/profpatsch.de/record-get.rs +++ /dev/null @@ -1,56 +0,0 @@ -extern crate netencode; -extern crate el_semicolon; -extern crate el_exec; - -use std::io::Read; -use std::ffi::{CString, OsStr}; -use std::os::unix::ffi::{OsStringExt, OsStrExt}; -use el_semicolon::{el_semicolon, Arg}; -use netencode::{U}; -use netencode::parse::{u_u}; - -fn main() { - let args = std::env::args_os().by_ref() - .map(|s| s.into_vec()) - .skip(1) - .collect::>(); - let args_ref : Vec<&[u8]> = args.iter().map(|v| v.as_slice()).collect(); - let (arg, prog) = el_semicolon::el_semicolon(&args_ref).unwrap(); - assert!(prog.len() > 0, "record get neets a block of vars and prog, no prog provided"); - match arg { - Arg::EndOfArgv | Arg::Arg(_) => { - panic!("first argument must be a block of vars"); - }, - Arg::Block(vars) => { - let mut stdin = vec![]; - std::io::stdin().read_to_end(&mut stdin); - match u_u(&stdin) { - Ok((_, U::Record(m))) => { - for (key, val) in m.into_iter() { - // only set if it appears in the block of values. - // If the block is empty, don’t filter. - if vars.is_empty() || vars.contains(&key.as_bytes()) { - match *val { - U::Binary(b) => std::env::set_var(key, OsStr::from_bytes(b)), - _ => panic!("the value of {:?} was not a binary value!", key) - } - } - } - let mut p : Vec = vec![]; - for arg in prog { - p.push(CString::new(*arg).unwrap()); - } - el_exec::xpathexec0(&p); - }, - Ok(_) => { - eprintln!("not a record!"); - std::process::exit(100); - } - Err(e) => { - eprintln!("could not parse netencode: {:?}", e); - std::process::exit(100); - }, - } - } - } -} -- cgit 1.4.1