protobuf_parse/
protobuf_path.rsuse std::fmt;
use crate::protobuf_abs_path::ProtobufAbsPath;
use crate::protobuf_rel_path::ProtobufRelPath;
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub(crate) enum ProtobufPath {
Abs(ProtobufAbsPath),
Rel(ProtobufRelPath),
}
impl ProtobufPath {
pub fn new<S: Into<String>>(path: S) -> ProtobufPath {
let path = path.into();
if path.starts_with('.') {
ProtobufPath::Abs(ProtobufAbsPath::new(path))
} else {
ProtobufPath::Rel(ProtobufRelPath::new(path))
}
}
pub fn _resolve(&self, package: &ProtobufAbsPath) -> ProtobufAbsPath {
match self {
ProtobufPath::Abs(p) => p.clone(),
ProtobufPath::Rel(p) => {
let mut package = package.clone();
package.push_relative(p);
package
}
}
}
}
impl fmt::Display for ProtobufPath {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ProtobufPath::Abs(p) => write!(f, "{}", p),
ProtobufPath::Rel(p) => write!(f, "{}", p),
}
}
}