pub fn is_legal_table_segment(name: &str) -> bool {
!(name.is_empty() || name == "." || name == ".." || name.contains('/') || name.contains('\\'))
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct TablePath {
segments: Vec<String>,
}
impl TablePath {
pub fn new() -> Self {
Self::default()
}
pub fn segments(&self) -> &[String] {
&self.segments
}
pub fn push(&mut self, segment: &str) -> Result<(), TablePathError> {
if !is_legal_table_segment(segment) {
return Err(TablePathError::IllegalSegment(segment.to_owned()));
}
self.segments.push(segment.to_owned());
Ok(())
}
pub fn join(&self) -> String {
self.segments.join("/")
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum TablePathError {
IllegalSegment(String),
}