1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/http/codec.h"
6

            
7
namespace Envoy {
8
namespace Http {
9

            
10
class ResponseDecoderHandleImpl : public ResponseDecoderHandle {
11
public:
12
  ResponseDecoderHandleImpl(std::weak_ptr<bool> live_trackable, ResponseDecoder& decoder)
13
81130
      : live_trackable_(live_trackable), decoder_(decoder) {}
14

            
15
993140
  OptRef<ResponseDecoder> get() override {
16
993141
    if (live_trackable_.lock()) {
17
993130
      return decoder_;
18
993130
    }
19
11
    return {};
20
993140
  }
21

            
22
private:
23
  std::weak_ptr<bool> live_trackable_;
24
  ResponseDecoder& decoder_;
25
};
26

            
27
class ResponseDecoderImplBase : public ResponseDecoder {
28
public:
29
177004
  ResponseDecoderImplBase() : live_trackable_(std::make_shared<bool>(true)) {}
30

            
31
5311
  ResponseDecoderHandlePtr createResponseDecoderHandle() override {
32
5311
    return std::make_unique<ResponseDecoderHandleImpl>(live_trackable_, *this);
33
5311
  }
34

            
35
private:
36
  std::shared_ptr<bool> live_trackable_;
37
};
38

            
39
} // namespace Http
40
} // namespace Envoy