use std::str::FromStr;
use crate::{format_err, Error, Result};
use self::stable::StableCleaner;
use self::unique::Uniquifier;
mod stable;
mod unique;
#[derive(Debug, Clone, Copy)]
pub enum ColumnNameCleanerType {
Unique,
Stable,
}
impl ColumnNameCleanerType {
pub fn build_cleaner(self) -> Box<dyn ColumnNameCleaner> {
match self {
ColumnNameCleanerType::Unique => Box::new(Uniquifier::default()),
ColumnNameCleanerType::Stable => Box::new(StableCleaner::default()),
}
}
}
impl FromStr for ColumnNameCleanerType {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"unique" => Ok(ColumnNameCleanerType::Unique),
"stable" => Ok(ColumnNameCleanerType::Stable),
_ => Err(format_err!(
"invalid --clean-column-names argument: {:?}",
s
)),
}
}
}
pub trait ColumnNameCleaner {
fn unique_id_for(&mut self, name: &str) -> Result<String>;
}