Botcraft 1.21.4
Loading...
Searching...
No Matches
Filterable.hpp
Go to the documentation of this file.
1#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
2#pragma once
4
5#include <optional>
6
7namespace ProtocolCraft
8{
9 template<typename T>
10 class Filterable : public NetworkType
11 {
12 public:
13 virtual ~Filterable()
14 {
15
16 }
17
18
19 const T& GetRaw() const
20 {
21 return raw;
22 }
23
24 const std::optional<T>& GetFiltered() const
25 {
26 return filtered;
27 }
28
29
30 auto& SetRaw(const T& raw_)
31 {
32 raw = raw_;
33 return *this;
34 }
35
36 auto& SetFiltered(const std::optional<T>& filtered_)
37 {
38 filtered = filtered_;
39 return *this;
40 }
41
42 protected:
43 virtual void ReadImpl(ReadIterator& iter, size_t& length) override
44 {
45 raw = ReadData<T>(iter, length);
46 filtered = ReadData<std::optional<T>>(iter, length);
47 }
48
49 virtual void WriteImpl(WriteContainer& container) const override
50 {
51 WriteData<T>(raw, container);
52 WriteData<std::optional<T>>(filtered, container);
53 }
54
55 virtual Json::Value SerializeImpl() const override
56 {
57 Json::Value output;
58
59 output["raw"] = raw;
60 if (filtered.has_value())
61 {
62 output["filtered"] = filtered.value();
63 }
64
65 return output;
66 }
67
68 private:
69 T raw;
70 std::optional<T> filtered;
71
72 };
73}
74#endif
auto & SetRaw(const T &raw_)
virtual Json::Value SerializeImpl() const override
const T & GetRaw() const
std::optional< T > filtered
auto & SetFiltered(const std::optional< T > &filtered_)
virtual void ReadImpl(ReadIterator &iter, size_t &length) override
virtual void WriteImpl(WriteContainer &container) const override
const std::optional< T > & GetFiltered() const
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
Definition Json.hpp:45
std::vector< unsigned char > WriteContainer
std::vector< unsigned char >::const_iterator ReadIterator