parser.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #pragma once
  2. #include "public.h"
  3. #include <util/generic/maybe.h>
  4. #include <util/generic/ptr.h>
  5. class IInputStream;
  6. namespace NYT::NYson {
  7. struct IYsonConsumer;
  8. } // namespace NYT::NYson
  9. namespace NYson {
  10. ////////////////////////////////////////////////////////////////////////////////
  11. class TYsonParser {
  12. public:
  13. TYsonParser(
  14. NYT::NYson::IYsonConsumer* consumer,
  15. IInputStream* stream,
  16. EYsonType type = ::NYson::EYsonType::Node,
  17. bool enableLinePositionInfo = false,
  18. TMaybe<ui64> memoryLimit = Nothing());
  19. ~TYsonParser();
  20. void Parse();
  21. private:
  22. class TImpl;
  23. THolder<TImpl> Impl;
  24. };
  25. ////////////////////////////////////////////////////////////////////////////////
  26. class TStatelessYsonParser {
  27. public:
  28. TStatelessYsonParser(
  29. NYT::NYson::IYsonConsumer* consumer,
  30. bool enableLinePositionInfo = false,
  31. TMaybe<ui64> memoryLimit = Nothing());
  32. ~TStatelessYsonParser();
  33. void Parse(const TStringBuf& data, EYsonType type = ::NYson::EYsonType::Node);
  34. private:
  35. class TImpl;
  36. THolder<TImpl> Impl;
  37. };
  38. ////////////////////////////////////////////////////////////////////////////////
  39. class TYsonListParser {
  40. public:
  41. TYsonListParser(
  42. NYT::NYson::IYsonConsumer* consumer,
  43. IInputStream* stream,
  44. bool enableLinePositionInfo = false,
  45. TMaybe<ui64> memoryLimit = Nothing());
  46. ~TYsonListParser();
  47. bool Parse(); // Returns false, if there is no more list items
  48. private:
  49. class TImpl;
  50. THolder<TImpl> Impl;
  51. };
  52. ////////////////////////////////////////////////////////////////////////////////
  53. void ParseYsonStringBuffer(
  54. const TStringBuf& buffer,
  55. NYT::NYson::IYsonConsumer* consumer,
  56. EYsonType type = ::NYson::EYsonType::Node,
  57. bool enableLinePositionInfo = false,
  58. TMaybe<ui64> memoryLimit = Nothing());
  59. ////////////////////////////////////////////////////////////////////////////////
  60. } // namespace NYson