activity_sdk_lua_artifacts.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "activity_sdk_lua_artifacts.h"
  2. #include <cstdio>
  3. #include <utility>
  4. #include "activity_sdk_lua_artifacts_internal.h"
  5. namespace sunrise::client::content::activity::sdk_generation::lua_artifacts {
  6. /** Maps every public status to its stable token. */
  7. const char* status_name(Status value) noexcept {
  8. switch (value) {
  9. case Status::ready:
  10. return "ready";
  11. case Status::invalidInput:
  12. return "invalid_input";
  13. case Status::unsupportedAbi:
  14. return "unsupported_abi";
  15. case Status::buildFailure:
  16. return "build_failure";
  17. case Status::directoryFailure:
  18. return "directory_failure";
  19. case Status::writeFailure:
  20. return "write_failure";
  21. }
  22. return "invalid_input";
  23. }
  24. /** Replaces output only after every generated artifact is complete. */
  25. Status build(const Source& source, Bundle& output) noexcept {
  26. try {
  27. Bundle pending{};
  28. // Name the stage, because one silent false here hides which projection drifted.
  29. const auto refused = [](const char* stage) noexcept {
  30. std::printf("ev=activity_sdk_lua_artifacts stage=%s result=refused\n", stage);
  31. return Status::buildFailure;
  32. };
  33. if (!internal::render_contract_files(source, pending)) {
  34. return refused("contract_files");
  35. }
  36. if (!internal::render_activity_files(source, pending)) {
  37. return refused("activity_files");
  38. }
  39. output = std::move(pending);
  40. return Status::ready;
  41. } catch (...) {
  42. return Status::buildFailure;
  43. }
  44. }
  45. } // namespace sunrise::client::content::activity::sdk_generation::lua_artifacts