yql_json_codec.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include <library/cpp/json/json_writer.h>
  3. #include <library/cpp/json/json_reader.h>
  4. #include <yql/essentials/minikql/mkql_node.h>
  5. #include <yql/essentials/minikql/computation/mkql_computation_node_holders.h>
  6. #include <library/cpp/enumbitset/enumbitset.h>
  7. namespace NYql {
  8. namespace NCommon {
  9. namespace NJsonCodec {
  10. using namespace NKikimr;
  11. enum EValueConvertPolicy {
  12. CONVERT_POLICY_BEGIN,
  13. NUMBER_AS_STRING = CONVERT_POLICY_BEGIN,
  14. UNSAFE_NUMBER_AS_STRING,
  15. BOOL_AS_STRING,
  16. DISALLOW_NaN,
  17. CONVERT_POLICY_END
  18. };
  19. using TValueConvertPolicy = TEnumBitSet<EValueConvertPolicy, EValueConvertPolicy::CONVERT_POLICY_BEGIN, EValueConvertPolicy::CONVERT_POLICY_END>;
  20. class DefaultPolicy {
  21. public:
  22. static DefaultPolicy& getInstance() {
  23. static DefaultPolicy instance;
  24. return instance;
  25. }
  26. private:
  27. DefaultPolicy() {}
  28. public:
  29. DefaultPolicy(DefaultPolicy &) = delete;
  30. void operator=(const DefaultPolicy &) = delete;
  31. TValueConvertPolicy CloudFunction() const {
  32. return CloudFunctionPolicy;
  33. }
  34. TValueConvertPolicy Export() const {
  35. return ExportPolicy;
  36. }
  37. private:
  38. TValueConvertPolicy CloudFunctionPolicy = TValueConvertPolicy{NUMBER_AS_STRING, BOOL_AS_STRING};
  39. TValueConvertPolicy ExportPolicy = TValueConvertPolicy{DISALLOW_NaN};
  40. };
  41. NJson::TJsonWriterConfig MakeJsonConfig();
  42. void WriteValueToJson(NJson::TJsonWriter& writer, const NUdf::TUnboxedValuePod& value,
  43. NMiniKQL::TType* type, TValueConvertPolicy convertPolicy = {});
  44. NUdf::TUnboxedValue ReadJsonValue(NJson::TJsonValue& json, NMiniKQL::TType* type, const NMiniKQL::THolderFactory& holderFactory);
  45. } // NJsonCodec
  46. } // NCommon
  47. } // NYql