blob: 7252f5425aeffc7bf8ea05b8899af5d5aab0ea5c [file] [log] [blame]
syntax = "proto2";
package bufman.dubbo.apache.org.image.v1;
import "google/protobuf/descriptor.proto";
option cc_enable_arenas = true;
option optimize_for = SPEED;
// Image is an extended FileDescriptorSet.
//
// See https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto
message Image {
repeated ImageFile file = 1;
}
// ImageFile is an extended FileDescriptorProto.
//
// Since FileDescriptorProto does not have extensions, we copy the fields from
// FileDescriptorProto, and then add our own extensions via the buf_extension
// field. This is compatible with a FileDescriptorProto.
//
// See https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto
message ImageFile {
optional string name = 1;
optional string package = 2;
repeated string dependency = 3;
repeated int32 public_dependency = 10;
repeated int32 weak_dependency = 11;
repeated google.protobuf.DescriptorProto message_type = 4;
repeated google.protobuf.EnumDescriptorProto enum_type = 5;
repeated google.protobuf.ServiceDescriptorProto service = 6;
repeated google.protobuf.FieldDescriptorProto extension = 7;
optional google.protobuf.FileOptions options = 8;
optional google.protobuf.SourceCodeInfo source_code_info = 9;
optional string syntax = 12;
optional string edition = 13;
// buf_extension contains buf-specific extensions to FileDescriptorProtos.
//
// The prefixed name and high tag value is used to all but guarantee there
// will never be any conflict with Google's FileDescriptorProto definition.
// The definition of a FileDescriptorProto has not changed in years, so
// we're not too worried about a conflict here.
optional ImageFileExtension buf_extension = 8042;
}
// ImageFileExtension contains extensions to ImageFiles.
//
// The fields are not included directly on the ImageFile so that we can both
// detect if extensions exist, which signifies this was created by buf and not
// by protoc, and so that we can add fields in a freeform manner without
// worrying about conflicts with FileDescriptorProto.
message ImageFileExtension {
// is_import denotes whether this file is considered an "import".
//
// An import is a file which was not derived from the local source files.
// There are two cases where this could be true:
//
// 1. A Well-Known Type included from the compiler.
// 2. A file that was included from a Buf module dependency.
//
// We use "import" as this matches with the protoc concept of
// --include_imports, however import is a bit of an overloaded term.
//
// This will always be set.
optional bool is_import = 1;
// ModuleInfo contains information about the Buf module this file belongs to.
//
// This field is optional and will not be set if the module is not known.
optional ModuleInfo module_info = 2;
// is_syntax_unspecified denotes whether the file did not have a syntax
// explicitly specified.
//
// Per the FileDescriptorProto spec, it would be fine in this case to just
// leave the syntax field unset to denote this and to set the syntax field
// to "proto2" if it is specified. However, protoc does not set the syntax
// field if it was "proto2", and plugins may (incorrectly) depend on this.
// We also want to maintain consistency with protoc as much as possible.
// So instead, we have this field which will denote whether syntax was not
// specified.
//
// This will always be set.
optional bool is_syntax_unspecified = 3;
// unused_dependency are the indexes within the dependency field on
// FileDescriptorProto for those dependencies that are not used.
//
// This matches the shape of the public_dependency and weak_dependency
// fields.
repeated int32 unused_dependency = 4;
}
// ModuleInfo contains information about a Buf module that an ImageFile
// belongs to.
message ModuleInfo {
// name is the name of the Buf module.
//
// This will always be set.
optional ModuleName name = 1;
// commit is the repository commit.
//
// This field is optional and will not be set if the commit is not known.
optional string commit = 2;
}
// ModuleName is a module name.
//
// All fields will always be set.
message ModuleName {
optional string remote = 1;
optional string owner = 2;
optional string repository = 3;
}