1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use crate::descriptor::EnumDescriptorProto;
use crate::descriptor::FileDescriptorProto;
use crate::reflect::message::path::MessagePath;

#[derive(Debug, Clone)]
pub(crate) struct EnumPath {
    pub(crate) message_path: MessagePath,
    pub(crate) enum_index: usize,
}

impl EnumPath {
    pub(crate) fn eval<'a>(&self, file: &'a FileDescriptorProto) -> &'a EnumDescriptorProto {
        match self.message_path.eval(file) {
            Some(message) => &message.enum_type[self.enum_index],
            None => &file.enum_type[self.enum_index],
        }
    }
}