Spicy
base64.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <memory>
6 #include <string>
7 
8 #include <hilti/rt/exception.h>
9 #include <hilti/rt/types/bytes.h>
10 #include <hilti/rt/types/stream.h>
11 
12 namespace spicy::rt::base64 {
13 
14 namespace detail {
15 struct State;
16 } // namespace detail
17 
19 class Base64Error : public hilti::rt::RuntimeError {
20  using hilti::rt::RuntimeError::RuntimeError;
21 };
22 
27 class Stream {
28 public:
29  Stream();
30  ~Stream();
31 
32  Stream(const Stream&) = default;
33  Stream(Stream&&) noexcept = default;
34  Stream& operator=(const Stream&) = default;
35  Stream& operator=(Stream&&) noexcept = default;
36 
44  hilti::rt::Bytes encode(const hilti::rt::Bytes& data);
45 
53  hilti::rt::Bytes encode(const hilti::rt::stream::View& data);
54 
62  hilti::rt::Bytes decode(const hilti::rt::Bytes& data);
63 
71  hilti::rt::Bytes decode(const hilti::rt::stream::View& data);
72 
78  hilti::rt::Bytes finish();
79 
80 private:
81  std::shared_ptr<detail::State> _state;
82 };
83 
85 inline hilti::rt::Bytes encode(Stream& stream, // NOLINT(google-runtime-references)
86  const hilti::rt::Bytes& data) {
87  return stream.encode(data);
88 }
89 
91 inline hilti::rt::Bytes encode(Stream& stream, // NOLINT(google-runtime-references)
92  const hilti::rt::stream::View& data) {
93  return stream.encode(data);
94 }
95 
97 inline hilti::rt::Bytes decode(Stream& stream, // NOLINT(google-runtime-references)
98  const hilti::rt::Bytes& data) {
99  return stream.decode(data);
100 }
101 
103 inline hilti::rt::Bytes decode(Stream& stream, // NOLINT(google-runtime-references)
104  const hilti::rt::stream::View& data) {
105  return stream.decode(data);
106 }
107 
109 inline hilti::rt::Bytes finish(Stream& stream) // NOLINT(google-runtime-references)
110 {
111  return stream.finish();
112 }
113 
114 } // namespace spicy::rt::base64
115 
116 namespace hilti::rt::detail::adl {
117 extern inline std::string to_string(const spicy::rt::base64::Stream& /* x */, adl::tag /*unused*/) {
118  return "<base64 stream>";
119 }
120 } // namespace hilti::rt::detail::adl
hilti::rt::Bytes finish()
Definition: base64.cc:86
Definition: base64.h:12
Definition: base64.h:27
Definition: bytes.h:157
Definition: base64.h:19
hilti::rt::Bytes encode(const hilti::rt::Bytes &data)
Definition: base64.cc:34
Definition: stream.h:984
hilti::rt::Bytes decode(const hilti::rt::Bytes &data)
Definition: base64.cc:59
Definition: deferred-expression.h:41