blob: 45abcc0a3f6b5edc8cf991977e918ca4d81a686c [file] [log] [blame]
// 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__