1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crate::descriptor::FileDescriptorProto;

/// `.proto` file syntax.
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum Syntax {
    /// `syntax = "proto2"`.
    Proto2,
    /// `syntax = "proto3"`.
    Proto3,
}

impl Syntax {
    pub(crate) fn parse(syntax: &str) -> Option<Syntax> {
        match syntax {
            "" | "proto2" => Some(Syntax::Proto2),
            "proto3" => Some(Syntax::Proto3),
            _ => None,
        }
    }

    pub(crate) fn of_file(file: &FileDescriptorProto) -> Syntax {
        Syntax::parse(file.syntax()).unwrap_or(Syntax::Proto2)
    }
}