parser.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. ui64 bufferSizeLimit = 64 << 10,
  19. bool consumeUntilEof = true,
  20. TMaybe<ui64> memoryLimit = Nothing());
  21. ~TYsonParser();
  22. void Parse();
  23. private:
  24. class TImpl;
  25. THolder<TImpl> Impl;
  26. };
  27. ////////////////////////////////////////////////////////////////////////////////
  28. class TStatelessYsonParser {
  29. public:
  30. TStatelessYsonParser(
  31. NYT::NYson::IYsonConsumer* consumer,
  32. bool enableLinePositionInfo = false,
  33. TMaybe<ui64> memoryLimit = Nothing());
  34. ~TStatelessYsonParser();
  35. void Parse(const TStringBuf& data, EYsonType type = ::NYson::EYsonType::Node);
  36. private:
  37. class TImpl;
  38. THolder<TImpl> Impl;
  39. };
  40. ////////////////////////////////////////////////////////////////////////////////
  41. class TYsonListParser {
  42. public:
  43. TYsonListParser(
  44. NYT::NYson::IYsonConsumer* consumer,
  45. IInputStream* stream,
  46. bool enableLinePositionInfo = false,
  47. TMaybe<ui64> memoryLimit = Nothing());
  48. ~TYsonListParser();
  49. bool Parse(); // Returns false, if there is no more list items
  50. private:
  51. class TImpl;
  52. THolder<TImpl> Impl;
  53. };
  54. ////////////////////////////////////////////////////////////////////////////////
  55. void ParseYsonStringBuffer(
  56. const TStringBuf& buffer,
  57. NYT::NYson::IYsonConsumer* consumer,
  58. EYsonType type = ::NYson::EYsonType::Node,
  59. bool enableLinePositionInfo = false,
  60. TMaybe<ui64> memoryLimit = Nothing());
  61. ////////////////////////////////////////////////////////////////////////////////
  62. } // namespace NYson