protobuf/reflect/field/
protobuf_field_type.rs

1use crate::reflect::protobuf_type_box::ProtobufType;
2use crate::reflect::RuntimeFieldType;
3
4/// Reflective representation of field type plus wire type.
5pub(crate) enum ProtobufFieldType {
6    /// Singular field (required, optional for proto2 or singular for proto3)
7    Singular(ProtobufType),
8    /// Repeated field
9    Repeated(ProtobufType),
10    /// Map field
11    Map(ProtobufType, ProtobufType),
12}
13
14impl ProtobufFieldType {
15    /// Drop wire type from the type.
16    pub fn runtime(&self) -> RuntimeFieldType {
17        match self {
18            ProtobufFieldType::Singular(t) => RuntimeFieldType::Singular(t.runtime().clone()),
19            ProtobufFieldType::Repeated(t) => RuntimeFieldType::Repeated(t.runtime().clone()),
20            ProtobufFieldType::Map(kt, vt) => {
21                RuntimeFieldType::Map(kt.runtime().clone(), vt.runtime().clone())
22            }
23        }
24    }
25}