2021-01-26 14:09:21 +01:00
|
|
|
|
{ depot, pkgs, lib, ... }:
|
2021-01-02 14:59:23 +01:00
|
|
|
|
|
|
|
|
|
let
|
2022-01-30 17:06:58 +01:00
|
|
|
|
netencode-rs = depot.nix.writers.rustSimpleLib
|
|
|
|
|
{
|
2021-02-14 12:52:03 +01:00
|
|
|
|
name = "netencode";
|
|
|
|
|
dependencies = [
|
2021-04-02 21:59:25 +02:00
|
|
|
|
depot.third_party.rust-crates.nom
|
2021-02-14 12:52:03 +01:00
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
2022-01-30 17:06:58 +01:00
|
|
|
|
}
|
|
|
|
|
(builtins.readFile ./netencode.rs);
|
2021-01-02 14:59:23 +01:00
|
|
|
|
|
2022-08-20 00:33:37 +02:00
|
|
|
|
netencode-hs = pkgs.haskellPackages.mkDerivation {
|
|
|
|
|
pname = "netencode";
|
|
|
|
|
version = "0.1.0";
|
|
|
|
|
|
|
|
|
|
src = depot.users.Profpatsch.exactSource ./. [
|
|
|
|
|
./netencode.cabal
|
|
|
|
|
./Netencode.hs
|
2023-01-08 23:41:17 +01:00
|
|
|
|
./Netencode/Parse.hs
|
2022-08-20 00:33:37 +02:00
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
libraryHaskellDepends = [
|
|
|
|
|
pkgs.haskellPackages.hedgehog
|
|
|
|
|
pkgs.haskellPackages.nonempty-containers
|
|
|
|
|
pkgs.haskellPackages.deriving-compat
|
|
|
|
|
pkgs.haskellPackages.data-fix
|
|
|
|
|
pkgs.haskellPackages.bytestring
|
|
|
|
|
pkgs.haskellPackages.attoparsec
|
2023-05-28 20:58:20 +02:00
|
|
|
|
pkgs.haskellPackages.pa-prelude
|
|
|
|
|
pkgs.haskellPackages.pa-label
|
|
|
|
|
pkgs.haskellPackages.pa-error-tree
|
2022-08-20 00:33:37 +02:00
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
isLibrary = true;
|
|
|
|
|
license = lib.licenses.mit;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2021-01-26 14:09:21 +01:00
|
|
|
|
gen = import ./gen.nix { inherit lib; };
|
2021-01-02 17:08:27 +01:00
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
pretty-rs = depot.nix.writers.rustSimpleLib
|
|
|
|
|
{
|
|
|
|
|
name = "netencode-pretty";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
(builtins.readFile ./pretty.rs);
|
2021-02-14 16:53:16 +01:00
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
pretty = depot.nix.writers.rustSimple
|
|
|
|
|
{
|
|
|
|
|
name = "netencode-pretty";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
pretty-rs
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
|
|
|
|
} ''
|
2021-02-14 16:53:16 +01:00
|
|
|
|
extern crate netencode;
|
|
|
|
|
extern crate netencode_pretty;
|
|
|
|
|
extern crate exec_helpers;
|
|
|
|
|
|
|
|
|
|
fn main() {
|
2021-02-14 16:55:56 +01:00
|
|
|
|
let (_, prog) = exec_helpers::args_for_exec("netencode-pretty", 0);
|
2022-09-18 12:37:30 +02:00
|
|
|
|
let t = netencode::t_from_stdin_or_die_user_error("netencode-pretty");
|
|
|
|
|
match netencode_pretty::Pretty::from_u(t.to_u()).print_multiline(&mut std::io::stdout()) {
|
2021-02-14 16:53:16 +01:00
|
|
|
|
Ok(()) => {},
|
2021-02-14 16:55:56 +01:00
|
|
|
|
Err(err) => exec_helpers::die_temporary("netencode-pretty", format!("could not write to stdout: {}", err))
|
2021-02-14 16:53:16 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
netencode-mustache = depot.nix.writers.rustSimple
|
|
|
|
|
{
|
|
|
|
|
name = "netencode_mustache";
|
|
|
|
|
dependencies = [
|
|
|
|
|
depot.users.Profpatsch.arglib.netencode.rust
|
|
|
|
|
netencode-rs
|
|
|
|
|
depot.third_party.rust-crates.mustache
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
(builtins.readFile ./netencode-mustache.rs);
|
2021-01-02 17:08:27 +01:00
|
|
|
|
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
record-get = depot.nix.writers.rustSimple
|
|
|
|
|
{
|
|
|
|
|
name = "record-get";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
|
|
|
|
} ''
|
2021-02-09 20:56:56 +01:00
|
|
|
|
extern crate netencode;
|
|
|
|
|
extern crate exec_helpers;
|
|
|
|
|
use netencode::{encode, dec};
|
|
|
|
|
use netencode::dec::{Decoder, DecodeError};
|
|
|
|
|
|
|
|
|
|
fn main() {
|
2021-02-09 21:21:20 +01:00
|
|
|
|
let args = exec_helpers::args("record-get", 1);
|
2021-02-09 20:56:56 +01:00
|
|
|
|
let field = match std::str::from_utf8(&args[0]) {
|
|
|
|
|
Ok(f) => f,
|
|
|
|
|
Err(_e) => exec_helpers::die_user_error("record-get", format!("The field name needs to be valid unicode"))
|
|
|
|
|
};
|
2022-09-18 12:37:30 +02:00
|
|
|
|
let t = netencode::t_from_stdin_or_die_user_error("record-get");
|
|
|
|
|
match (dec::RecordDot {field, inner: dec::AnyU }).dec(t.to_u()) {
|
2021-02-09 20:56:56 +01:00
|
|
|
|
Ok(u) => encode(&mut std::io::stdout(), &u).expect("encoding to stdout failed"),
|
|
|
|
|
Err(DecodeError(err)) => exec_helpers::die_user_error("record-get", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
record-splice-env = depot.nix.writers.rustSimple
|
|
|
|
|
{
|
|
|
|
|
name = "record-splice-env";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
|
|
|
|
} ''
|
2021-01-29 15:54:18 +01:00
|
|
|
|
extern crate netencode;
|
|
|
|
|
extern crate exec_helpers;
|
2021-02-13 14:24:22 +01:00
|
|
|
|
use netencode::dec::{Record, Try, ScalarAsBytes, Decoder, DecodeError};
|
2021-01-31 15:47:49 +01:00
|
|
|
|
|
2021-01-29 15:54:18 +01:00
|
|
|
|
fn main() {
|
2022-09-18 12:37:30 +02:00
|
|
|
|
let t = netencode::t_from_stdin_or_die_user_error("record-splice-env");
|
2021-01-31 15:47:49 +01:00
|
|
|
|
let (_, prog) = exec_helpers::args_for_exec("record-splice-env", 0);
|
2022-09-18 12:37:30 +02:00
|
|
|
|
match Record(Try(ScalarAsBytes)).dec(t.to_u()) {
|
2021-01-31 15:47:49 +01:00
|
|
|
|
Ok(map) => {
|
2021-02-13 14:24:22 +01:00
|
|
|
|
exec_helpers::exec_into_args(
|
|
|
|
|
"record-splice-env",
|
|
|
|
|
prog,
|
|
|
|
|
// some elements can’t be decoded as scalars, so just ignore them
|
|
|
|
|
map.into_iter().filter_map(|(k, v)| v.map(|v2| (k, v2)))
|
|
|
|
|
);
|
2021-01-31 15:47:49 +01:00
|
|
|
|
},
|
2021-01-31 16:38:21 +01:00
|
|
|
|
Err(DecodeError(err)) => exec_helpers::die_user_error("record-splice-env", err),
|
2021-01-31 15:47:49 +01:00
|
|
|
|
}
|
2021-01-29 15:54:18 +01:00
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
env-splice-record = depot.nix.writers.rustSimple
|
|
|
|
|
{
|
|
|
|
|
name = "env-splice-record";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
|
|
|
|
} ''
|
2021-02-13 23:13:20 +01:00
|
|
|
|
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()
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
in
|
|
|
|
|
depot.nix.readTree.drvTargets {
|
2021-01-02 14:59:23 +01:00
|
|
|
|
inherit
|
2021-02-13 23:13:20 +01:00
|
|
|
|
netencode-rs
|
2022-08-20 00:33:37 +02:00
|
|
|
|
netencode-hs
|
2021-02-14 16:53:16 +01:00
|
|
|
|
pretty-rs
|
|
|
|
|
pretty
|
2021-02-13 23:13:20 +01:00
|
|
|
|
netencode-mustache
|
|
|
|
|
record-get
|
|
|
|
|
record-splice-env
|
|
|
|
|
env-splice-record
|
|
|
|
|
gen
|
|
|
|
|
;
|
2021-01-02 14:59:23 +01:00
|
|
|
|
}
|