gix_validate/
submodule.rs1use bstr::{BStr, ByteSlice};
2
3pub mod name {
5 #[derive(Debug, thiserror::Error)]
7 #[allow(missing_docs)]
8 pub enum Error {
9 #[error("Submodule names cannot be empty")]
10 Empty,
11 #[error("Submodules names must not contains '..'")]
12 ParentComponent,
13 }
14}
15
16pub fn name(name: &BStr) -> Result<&BStr, name::Error> {
18 if name.is_empty() {
19 return Err(name::Error::Empty);
20 }
21 match name.find(b"..") {
22 Some(pos) => {
23 let &b = name.get(pos + 2).ok_or(name::Error::ParentComponent)?;
24 if b == b'/' || b == b'\\' {
25 Err(name::Error::ParentComponent)
26 } else {
27 Ok(name)
28 }
29 }
30 None => Ok(name),
31 }
32}