yson2json_adapter.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "yson2json_adapter.h"
  2. namespace NYT {
  3. TYson2JsonCallbacksAdapter::TYson2JsonCallbacksAdapter(::NYson::TYsonConsumerBase* impl, bool throwException)
  4. : NJson::TJsonCallbacks(throwException)
  5. , Impl_(impl)
  6. {
  7. }
  8. bool TYson2JsonCallbacksAdapter::OnNull() {
  9. WrapIfListItem();
  10. Impl_->OnEntity();
  11. return true;
  12. }
  13. bool TYson2JsonCallbacksAdapter::OnBoolean(bool val) {
  14. WrapIfListItem();
  15. Impl_->OnBooleanScalar(val);
  16. return true;
  17. }
  18. bool TYson2JsonCallbacksAdapter::OnInteger(long long val) {
  19. WrapIfListItem();
  20. Impl_->OnInt64Scalar(val);
  21. return true;
  22. }
  23. bool TYson2JsonCallbacksAdapter::OnUInteger(unsigned long long val) {
  24. WrapIfListItem();
  25. Impl_->OnUint64Scalar(val);
  26. return true;
  27. }
  28. bool TYson2JsonCallbacksAdapter::OnString(const TStringBuf& val) {
  29. WrapIfListItem();
  30. Impl_->OnStringScalar(val);
  31. return true;
  32. }
  33. bool TYson2JsonCallbacksAdapter::OnDouble(double val) {
  34. WrapIfListItem();
  35. Impl_->OnDoubleScalar(val);
  36. return true;
  37. }
  38. bool TYson2JsonCallbacksAdapter::OnOpenArray() {
  39. WrapIfListItem();
  40. State_.ContextStack.push(true);
  41. Impl_->OnBeginList();
  42. return true;
  43. }
  44. bool TYson2JsonCallbacksAdapter::OnCloseArray() {
  45. State_.ContextStack.pop();
  46. Impl_->OnEndList();
  47. return true;
  48. }
  49. bool TYson2JsonCallbacksAdapter::OnOpenMap() {
  50. WrapIfListItem();
  51. State_.ContextStack.push(false);
  52. Impl_->OnBeginMap();
  53. return true;
  54. }
  55. bool TYson2JsonCallbacksAdapter::OnCloseMap() {
  56. State_.ContextStack.pop();
  57. Impl_->OnEndMap();
  58. return true;
  59. }
  60. bool TYson2JsonCallbacksAdapter::OnMapKey(const TStringBuf& val) {
  61. Impl_->OnKeyedItem(val);
  62. return true;
  63. }
  64. void TYson2JsonCallbacksAdapter::WrapIfListItem() {
  65. if (!State_.ContextStack.empty() && State_.ContextStack.top()) {
  66. Impl_->OnListItem();
  67. }
  68. }
  69. }