| // Protocol Buffers - Google's data interchange format | |
| // Copyright 2023 Google LLC. All rights reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file or at | |
| // https://developers.google.com/open-source/licenses/bsd | |
| #ifndef GOOGLE_UPB_UPB_GENERATOR_REFLECTION_CONTEXT_H__ | |
| #define GOOGLE_UPB_UPB_GENERATOR_REFLECTION_CONTEXT_H__ | |
| #include <string> | |
| #include "absl/strings/string_view.h" | |
| #include "absl/types/span.h" | |
| #include "google/protobuf/io/printer.h" | |
| #include "google/protobuf/io/zero_copy_stream.h" | |
| namespace upb { | |
| namespace generator { | |
| namespace reflection { | |
| struct Options { | |
| std::string dllexport_decl; | |
| }; | |
| class Context { | |
| public: | |
| explicit Context(const Options& options, | |
| google::protobuf::io::ZeroCopyOutputStream* stream) | |
| : options_(options), printer_(stream) {} | |
| // A few convenience wrappers so that users can write `ctx.Emit()` instead of | |
| // `ctx.printer().Emit()`. | |
| void Emit(absl::Span<const google::protobuf::io::Printer::Sub> vars, | |
| absl::string_view format, | |
| google::protobuf::io::Printer::SourceLocation loc = | |
| google::protobuf::io::Printer::SourceLocation::current()) { | |
| printer_.Emit(vars, format, loc); | |
| } | |
| void Emit(absl::string_view format, | |
| google::protobuf::io::Printer::SourceLocation loc = | |
| google::protobuf::io::Printer::SourceLocation::current()) { | |
| printer_.Emit(format, loc); | |
| } | |
| const Options& options() const { return options_; } | |
| private: | |
| const Options& options_; | |
| google::protobuf::io::Printer printer_; | |
| }; | |
| } // namespace reflection | |
| } // namespace generator | |
| } // namespace upb | |
| #endif // GOOGLE_UPB_UPB_GENERATOR_REFLECTION_CONTEXT_H__ |