1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/buffer/buffer.h"
6

            
7
#include "absl/strings/string_view.h"
8
#include "hessian2/basic_codec/object_codec.hpp"
9
#include "hessian2/codec.hpp"
10
#include "hessian2/object.hpp"
11
#include "hessian2/reader.hpp"
12
#include "hessian2/writer.hpp"
13

            
14
namespace Envoy {
15
namespace Extensions {
16
namespace Common {
17
namespace Dubbo {
18

            
19
class Hessian2Utils {
20
public:
21
  static uint32_t getParametersNumber(const std::string& parameters_type);
22
};
23

            
24
class BufferWriter : public Hessian2::Writer {
25
public:
26
63
  BufferWriter(Envoy::Buffer::Instance& buffer) : buffer_(buffer) {}
27

            
28
  // Hessian2::Writer
29
  void rawWrite(const void* data, uint64_t size) override;
30
  void rawWrite(absl::string_view data) override;
31

            
32
private:
33
  Envoy::Buffer::Instance& buffer_;
34
};
35

            
36
class BufferReader : public Hessian2::Reader {
37
public:
38
30
  BufferReader(Envoy::Buffer::Instance& buffer, uint64_t initial_offset = 0) : buffer_(buffer) {
39
30
    initial_offset_ = initial_offset;
40
30
  }
41

            
42
  // Hessian2::Reader
43
283
  uint64_t length() const override { return buffer_.length(); }
44
  void rawReadNBytes(void* data, size_t len, size_t peek_offset) override;
45

            
46
private:
47
  Envoy::Buffer::Instance& buffer_;
48
};
49

            
50
} // namespace Dubbo
51
} // namespace Common
52
} // namespace Extensions
53
} // namespace Envoy