diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-10-27 16:31:40 +0100 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-10-27 16:31:40 +0100 |
| commit | a3338b55da55f467d984ac36e7c3f158b88245b9 (patch) | |
| tree | deb64e36a86d2455d215c9a379a1924b23bdf75e /run_and_record | |
| parent | 2c850f934d7087061e6f8540ee3a273b9817fbc7 (diff) | |
| download | apps-science_tools-a3338b55da55f467d984ac36e7c3f158b88245b9.tar.gz | |
Dangling changes
Diffstat (limited to 'run_and_record')
| -rw-r--r-- | run_and_record/c++/file.hpp | 78 | ||||
| -rw-r--r-- | run_and_record/c++/main.cpp | 74 |
2 files changed, 124 insertions, 28 deletions
diff --git a/run_and_record/c++/file.hpp b/run_and_record/c++/file.hpp new file mode 100644 index 0000000..cb3077f --- /dev/null +++ b/run_and_record/c++/file.hpp @@ -0,0 +1,78 @@ +#pragma once + +#include <filesystem> +#include <forstio/remote/remote.hpp> + +namespace kel { +namespace sch { +using namespace saw::schema; +} + +template<typename Sch, typename FileEnc, typename Enc = saw::encode::Native> +saw::error_or<void> simple_write_file(const data<Sch,Enc>& data_, const std::filesystem::path& p){ + saw::data<Sch, FileEnc> dat; + { + saw::codec<Sch, FileEnc> cdc; + auto eov = cdc.encode(data_,dat); + if(eov.is_error()){ + return eov; + } + } + + saw::remote<saw::rmt::File> file_remote; + auto eo_addr = file_remote.parse_address(p); + if(eo_addr.is_error()){ + return std::move(eo_addr.get_error()); + } + auto& addr = eo_addr.get_value(); + + auto eo_srv = file_remote.template data_listen<Sch,FileEnc>({*addr}); + if(eo_srv.is_error()){ + return std::move(eo_srv.get_error()); + } + auto& srv = eo_srv.get_value(); + saw::id<Sch> fid{0u}; + + auto eo_write = srv->send({fid}, dat); + if(eo_write.is_error()){ + return eo_write; + } + + return saw::make_void(); +} + +template<typename Sch, typename FileEnc, typename Enc = saw::encode::Native> +saw::error_or<saw::data<Sch,Enc>> simple_read_file(const std::filesystem::path& p){ + saw::data<Sch, Enc> dat; + + saw::remote<saw::rmt::File> file_remote; + auto eo_addr = file_remote.parse_address(p); + if(eo_addr.is_error()){ + return std::move(eo_addr.get_error()); + } + auto& addr = eo_addr.get_value(); + + auto eo_srv = file_remote.template data_listen<Sch,FileEnc>({*addr}); + if(eo_srv.is_error()){ + return std::move(eo_srv.get_error()); + } + auto& srv = eo_srv.get_value(); + saw::id<Sch> fid{0u}; + + auto eo_read = srv->receive({fid}); + if(eo_read.is_error()){ + return eo_read; + } + auto& read = eo_read.get_value(); + + { + saw::codec<Sch, FileEnc> cdc; + auto eov = cdc.decode(read,dat); + if(eov.is_error()){ + return std::move(eov.get_error()); + } + } + + return dat; +} +} diff --git a/run_and_record/c++/main.cpp b/run_and_record/c++/main.cpp index 9a33f59..7df7cb5 100644 --- a/run_and_record/c++/main.cpp +++ b/run_and_record/c++/main.cpp @@ -1,3 +1,5 @@ +#include "file.hpp" + #include <forstio/codec/args.hpp> #include <forstio/codec/json/json.hpp> @@ -22,6 +24,22 @@ using RarArgs = Args< RarArgsTuple >; +using RarDataFile = Struct< + Member<Array<String>,"command">, + Member< + Array< + Struct< + Member<String, "key">, + Member<String, "value"> + > + >, "env">, + Member< + Struct< + Member<String, "commit">, + Member<String, "origin"> + >, + "git"> +>; } /** @@ -58,6 +76,11 @@ saw::error_or<void> run_program(int argc, char** argv){ waitpid(pid,&status,0); } + + /// @todo check status recoverd and write based on that. + /// + /// @todo record ENV used in run. + return saw::make_void(); } @@ -93,40 +116,26 @@ saw::error_or<void> kel_main(int argc, char** argv){ // Grab home variable Check the default config location and try to decode the file saw::data<sch::RarArgs> args; + auto eo_home = get_home_env(); + if(eo_home.is_error()){ + return std::move(eov.get_error()); + } + auto& home = eov.get_value(); + + /// @todo Generate unique entry YYYY-MM-DD-HH-SS-MSMS-BIN_NAME-DUMB_HASH ? + auto data_dir = home / ".local" / "kel" / "run_and_record"; + // + { - auto eo_home = get_home_env(); - if(eo_home.is_error()){ - return std::move(eov.get_error()); - } - auto& home = eov.get_value(); auto conf_file = home / ".config" / "kel" / "run_and_record.json"; - saw::remote<saw::rmt::File> file_remote; - auto eo_addr = file_remote.parse_address(conf_file); - if(eo_addr.is_error()){ - return std::move(eo_addr.get_error()); - } - auto& addr = eo_addr.get_value(); - auto eo_srv = file_remote.template data_listen<sch::RarConfig,saw::encode::Json>({*addr}); - if(eo_srv.is_error()){ - return std::move(eo_srv.get_error()); - } - auto& srv = eo_srv.get_value(); - saw::id<sch::RarConfig> fid{0u}; - - auto eo_data = srv->receive({fid}); - if(eo_data.is_error()){ - return std::move(eo_data.get_error()); - } - auto& data = eo_data.get_value(); + auto eo_file = simple_read_file<sch::RarConfig,saw::encode::Json>(conf_file); - saw::codec<sch::RarConfig, saw::encode::Json> json_cdc; - auto& args_str = args.template get<"arguments">(); - auto eo_dec = json_cdc.decode(data,args_str); - if(eo_dec.is_error()){ - return eo_dec; + if(eo_file.is_error()){ + return std::move(eo_file.get_error()); } + args.template get<"args">() = eo_file.get_value(); } // 0 til i/sep_pos-1 with count of sep_pos @@ -139,6 +148,10 @@ saw::error_or<void> kel_main(int argc, char** argv){ return eov; } } + saw::data<sch::RarDataFile> data_for_file; + { + auto& env = data_for_file.template get<"env">(); + } // sep_pos+1 til end int argc_prog = argc - (sep_pos+1); { @@ -147,6 +160,11 @@ saw::error_or<void> kel_main(int argc, char** argv){ return eov; } } + { + + } + + return saw::make_void(); } |
