diff --git a/oss-internship-2020/jsonnet/examples/CMakeLists.txt b/oss-internship-2020/jsonnet/examples/CMakeLists.txt index 4044288..fcfab56 100644 --- a/oss-internship-2020/jsonnet/examples/CMakeLists.txt +++ b/oss-internship-2020/jsonnet/examples/CMakeLists.txt @@ -50,3 +50,15 @@ foreach(exe base multiple_files yaml_stream formatter) sapi::sapi ) endforeach() + +add_executable(jsonnet_base_transaction + jsonnet_base_transaction.cc + jsonnet_base_transaction.h +) + +target_link_libraries(jsonnet_base_transaction PRIVATE + libjsonnet + jsonnet_helper + jsonnet_sapi + sapi::sapi + ) \ No newline at end of file diff --git a/oss-internship-2020/jsonnet/examples/jsonnet_base_example.cc b/oss-internship-2020/jsonnet/examples/jsonnet_base_example.cc index 317dd8e..4039df0 100644 --- a/oss-internship-2020/jsonnet/examples/jsonnet_base_example.cc +++ b/oss-internship-2020/jsonnet/examples/jsonnet_base_example.cc @@ -50,7 +50,7 @@ class JsonnetSapiSandbox : public JsonnetSandbox { std::string out_file_; }; -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); gflags::ParseCommandLineFlags(&argc, &argv, true); diff --git a/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.cc b/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.cc index 382611d..85c9099 100644 --- a/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.cc +++ b/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.cc @@ -18,33 +18,61 @@ absl::Status JsonnetTransaction::Main() { JsonnetApi api(sandbox()); + // Initialize library's main structure. SAPI_ASSIGN_OR_RETURN(JsonnetVm* jsonnet_vm, api.c_jsonnet_make()); sapi::v::RemotePtr vm_pointer(jsonnet_vm); + // Read input file. std::string in_file_in_sandboxee(std::string("/input/") + basename(&in_file_[0])); sapi::v::ConstCStr in_file_var(in_file_in_sandboxee.c_str()); - SAPI_ASSIGN_OR_RETURN(char* input, api.c_read_input(false, in_file_var.PtrBefore())); + // Process jsonnet data. sapi::v::RemotePtr input_pointer(input); sapi::v::Int error; SAPI_ASSIGN_OR_RETURN(char* output, api.c_jsonnet_evaluate_snippet(&vm_pointer, in_file_var.PtrBefore(), &input_pointer, error.PtrAfter())); - TRANSACTION_FAIL_IF_NOT(error.GetValue() != 0, "Jsonnet code evaluation failed."); + TRANSACTION_FAIL_IF_NOT(error.GetValue() == 0, "Jsonnet code evaluation failed."); + // Write data to file. std::string out_file_in_sandboxee(std::string("/output/") + basename(&out_file_[0])); sapi::v::ConstCStr out_file_var(out_file_in_sandboxee.c_str()); sapi::v::RemotePtr output_pointer(output); - SAPI_ASSIGN_OR_RETURN(bool success, api.c_write_output_file(&output_pointer, out_file_var.PtrBefore())); TRANSACTION_FAIL_IF_NOT(success, "Writing to output file failed."); + // Clean up. SAPI_ASSIGN_OR_RETURN(char* result, api.c_jsonnet_realloc(&vm_pointer, &output_pointer, 0)); SAPI_RETURN_IF_ERROR(api.c_jsonnet_destroy(&vm_pointer)); SAPI_RETURN_IF_ERROR(api.c_free_input(&input_pointer)); - return absl::OkStatus(); -} \ No newline at end of file +} + + +int main(int argc, char* argv[]) { + google::InitGoogleLogging(argv[0]); + gflags::ParseCommandLineFlags(&argc, &argv, true); + + if (!(argc == 3)) { + std::cerr << "Usage:\n" + << basename(argv[0]) << " absolute/path/to/INPUT.jsonnet" + << " absolute/path/to/OUTPUT\n"; + return EXIT_FAILURE; + } + + std::string in_file(argv[1]); + std::string out_file(argv[2]); + + JsonnetTransaction jsonnet_transaction(in_file, out_file); + + auto result = jsonnet_transaction.Run(); + + LOG(INFO) << "Transaction result: " << result.message(); + CHECK(result.ok()); + + return EXIT_SUCCESS; + +} diff --git a/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.h b/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.h index ff1ed41..5e81adf 100644 --- a/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.h +++ b/oss-internship-2020/jsonnet/examples/jsonnet_base_transaction.h @@ -17,6 +17,7 @@ #include "sandboxed_api/transaction.h" #include "sandboxed_api/vars.h" +#include "sandboxed_api/util/flag.h" #include "jsonnet_sapi.sapi.h" diff --git a/oss-internship-2020/jsonnet/examples/jsonnet_formatter_example.cc b/oss-internship-2020/jsonnet/examples/jsonnet_formatter_example.cc index ad73eca..305059a 100644 --- a/oss-internship-2020/jsonnet/examples/jsonnet_formatter_example.cc +++ b/oss-internship-2020/jsonnet/examples/jsonnet_formatter_example.cc @@ -50,7 +50,7 @@ class JsonnetSapiSandbox : public JsonnetSandbox { std::string out_file_; }; -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); gflags::ParseCommandLineFlags(&argc, &argv, true); diff --git a/oss-internship-2020/jsonnet/examples/jsonnet_multiple_files_example.cc b/oss-internship-2020/jsonnet/examples/jsonnet_multiple_files_example.cc index f785445..9d2783e 100644 --- a/oss-internship-2020/jsonnet/examples/jsonnet_multiple_files_example.cc +++ b/oss-internship-2020/jsonnet/examples/jsonnet_multiple_files_example.cc @@ -52,7 +52,7 @@ class JsonnetSapiSandbox : public JsonnetSandbox { std::string out_directory_; }; -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); gflags::ParseCommandLineFlags(&argc, &argv, true); diff --git a/oss-internship-2020/jsonnet/examples/jsonnet_yaml_stream_example.cc b/oss-internship-2020/jsonnet/examples/jsonnet_yaml_stream_example.cc index db4f036..8f8e607 100644 --- a/oss-internship-2020/jsonnet/examples/jsonnet_yaml_stream_example.cc +++ b/oss-internship-2020/jsonnet/examples/jsonnet_yaml_stream_example.cc @@ -50,7 +50,7 @@ class JsonnetSapiSandbox : public JsonnetSandbox { std::string out_file_; }; -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); gflags::ParseCommandLineFlags(&argc, &argv, true);