| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package detectknown provides functionality for detecting well-known types |
| // and identifying them by name. |
| package detectknown |
| |
| import "google.golang.org/protobuf/reflect/protoreflect" |
| |
| type ProtoFile int |
| |
| const ( |
| Unknown ProtoFile = iota |
| AnyProto |
| TimestampProto |
| DurationProto |
| WrappersProto |
| StructProto |
| FieldMaskProto |
| EmptyProto |
| ) |
| |
| var wellKnownTypes = map[protoreflect.FullName]ProtoFile{ |
| "google.protobuf.Any": AnyProto, |
| "google.protobuf.Timestamp": TimestampProto, |
| "google.protobuf.Duration": DurationProto, |
| "google.protobuf.BoolValue": WrappersProto, |
| "google.protobuf.Int32Value": WrappersProto, |
| "google.protobuf.Int64Value": WrappersProto, |
| "google.protobuf.UInt32Value": WrappersProto, |
| "google.protobuf.UInt64Value": WrappersProto, |
| "google.protobuf.FloatValue": WrappersProto, |
| "google.protobuf.DoubleValue": WrappersProto, |
| "google.protobuf.BytesValue": WrappersProto, |
| "google.protobuf.StringValue": WrappersProto, |
| "google.protobuf.Struct": StructProto, |
| "google.protobuf.ListValue": StructProto, |
| "google.protobuf.Value": StructProto, |
| "google.protobuf.FieldMask": FieldMaskProto, |
| "google.protobuf.Empty": EmptyProto, |
| } |
| |
| // Which identifies the proto file that a well-known type belongs to. |
| func Which(s protoreflect.FullName) ProtoFile { |
| return wellKnownTypes[s] |
| } |