2021-01-26 14:09:21 +01:00
|
|
|
|
{ depot, pkgs, lib, ... }:
|
2021-01-02 14:59:23 +01:00
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
imports = {
|
|
|
|
|
inherit (depot.users.Profpatsch)
|
|
|
|
|
writers;
|
|
|
|
|
};
|
|
|
|
|
|
2021-02-14 12:52:03 +01:00
|
|
|
|
netencode-rs = imports.writers.testRustSimple
|
|
|
|
|
(imports.writers.rustSimpleLib {
|
|
|
|
|
name = "netencode";
|
|
|
|
|
dependencies = [
|
|
|
|
|
depot.users.Profpatsch.rust-crates.nom
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
|
|
|
|
release = false;
|
|
|
|
|
verbose = true;
|
|
|
|
|
} (builtins.readFile ./netencode.rs));
|
2021-01-02 14:59:23 +01:00
|
|
|
|
|
2021-01-26 14:09:21 +01:00
|
|
|
|
gen = import ./gen.nix { inherit lib; };
|
2021-01-02 17:08:27 +01:00
|
|
|
|
|
|
|
|
|
cfg-if = pkgs.buildRustCrate {
|
|
|
|
|
pname = "cfg-if";
|
|
|
|
|
version = "1.0.0";
|
|
|
|
|
crateName = "cfg-if";
|
|
|
|
|
sha256 = "1fzidq152hnxhg4lj6r2gv4jpnn8yivp27z6q6xy7w6v0dp6bai9";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
log = pkgs.buildRustCrate {
|
|
|
|
|
pname = "log";
|
|
|
|
|
version = "0.4.11";
|
|
|
|
|
crateName = "log";
|
|
|
|
|
sha256 = "0m6xhqxsps5mgd7r91g5mqkndbh8zbjd58p7w75r330zl4n40l07";
|
|
|
|
|
dependencies = [ cfg-if ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
serde_derive = pkgs.buildRustCrate {
|
|
|
|
|
pname = "serde";
|
|
|
|
|
crateName = "serde";
|
2021-02-18 17:51:03 +01:00
|
|
|
|
version = "1.0.123";
|
|
|
|
|
sha256 = "05xl2s1vpf3p7fi2yc9qlzw88d5ap0z3qmhmd7axa6pp9pn1s5xc";
|
2021-01-02 17:08:27 +01:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
serde = pkgs.buildRustCrate {
|
|
|
|
|
pname = "serde";
|
|
|
|
|
crateName = "serde";
|
2021-02-18 17:51:03 +01:00
|
|
|
|
version = "1.0.123";
|
|
|
|
|
sha256 = "05xl2s1vpf3p7fi2yc9qlzw88d5ap0z3qmhmd7axa6pp9pn1s5xc";
|
2021-01-02 17:08:27 +01:00
|
|
|
|
features = [ "std" ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
mustache = pkgs.buildRustCrate {
|
|
|
|
|
pname = "mustache";
|
|
|
|
|
version = "0.9.0";
|
|
|
|
|
crateName = "mustache";
|
|
|
|
|
sha256 = "1zgl8l15i19lzp90icgwyi6zqdd31b9vm8w129f41d1zd0hs7ayq";
|
|
|
|
|
dependencies = [ log serde ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
netencode-mustache = imports.writers.rustSimple {
|
|
|
|
|
name = "netencode_mustache";
|
|
|
|
|
dependencies = [
|
2021-02-06 16:35:44 +01:00
|
|
|
|
depot.users.Profpatsch.arglib.netencode.rust
|
2021-01-02 17:08:27 +01:00
|
|
|
|
netencode-rs
|
|
|
|
|
mustache
|
|
|
|
|
];
|
|
|
|
|
} (builtins.readFile ./netencode-mustache.rs);
|
|
|
|
|
|
|
|
|
|
|
2021-02-09 20:56:56 +01:00
|
|
|
|
record-get = imports.writers.rustSimple {
|
|
|
|
|
name = "record-get";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
depot.users.Profpatsch.arglib.netencode.rust
|
|
|
|
|
];
|
|
|
|
|
} ''
|
|
|
|
|
extern crate netencode;
|
|
|
|
|
extern crate arglib_netencode;
|
|
|
|
|
extern crate exec_helpers;
|
|
|
|
|
use netencode::{encode, dec};
|
|
|
|
|
use netencode::dec::{Decoder, DecodeError};
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
let mut buf = vec![];
|
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"))
|
|
|
|
|
};
|
|
|
|
|
let u = netencode::u_from_stdin_or_die_user_error("record-get", &mut buf);
|
|
|
|
|
match (dec::RecordDot {field, inner: dec::AnyU }).dec(u) {
|
|
|
|
|
Ok(u) => encode(&mut std::io::stdout(), &u).expect("encoding to stdout failed"),
|
|
|
|
|
Err(DecodeError(err)) => exec_helpers::die_user_error("record-get", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2021-01-29 15:54:18 +01:00
|
|
|
|
record-splice-env = imports.writers.rustSimple {
|
|
|
|
|
name = "record-splice-env";
|
|
|
|
|
dependencies = [
|
|
|
|
|
netencode-rs
|
|
|
|
|
depot.users.Profpatsch.execline.exec-helpers
|
|
|
|
|
];
|
|
|
|
|
} ''
|
|
|
|
|
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() {
|
2021-02-06 22:51:29 +01:00
|
|
|
|
let mut buf = vec![];
|
|
|
|
|
let u = netencode::u_from_stdin_or_die_user_error("record-splice-env", &mut buf);
|
2021-01-31 15:47:49 +01:00
|
|
|
|
let (_, prog) = exec_helpers::args_for_exec("record-splice-env", 0);
|
2021-02-13 14:24:22 +01:00
|
|
|
|
match Record(Try(ScalarAsBytes)).dec(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
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2021-01-02 14:59:23 +01:00
|
|
|
|
in {
|
|
|
|
|
inherit
|
|
|
|
|
netencode-rs
|
2021-01-02 17:08:27 +01:00
|
|
|
|
netencode-mustache
|
2021-02-09 20:56:56 +01:00
|
|
|
|
record-get
|
2021-01-29 15:54:18 +01:00
|
|
|
|
record-splice-env
|
2021-01-02 17:08:27 +01:00
|
|
|
|
gen
|
2021-01-02 14:59:23 +01:00
|
|
|
|
;
|
|
|
|
|
}
|