pipeline/etl/transform/
index.rsuse crate::etl::error::{Error, Result, UnsupportedIndexTypeSnafu};
const INDEX_TIMESTAMP: &str = "timestamp";
const INDEX_TIMEINDEX: &str = "time";
const INDEX_TAG: &str = "tag";
const INDEX_FULLTEXT: &str = "fulltext";
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[allow(clippy::enum_variant_names)]
pub enum Index {
Time,
Tag,
Fulltext,
}
impl std::fmt::Display for Index {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let index = match self {
Index::Time => INDEX_TIMEINDEX,
Index::Tag => INDEX_TAG,
Index::Fulltext => INDEX_FULLTEXT,
};
write!(f, "{}", index)
}
}
impl TryFrom<String> for Index {
type Error = Error;
fn try_from(value: String) -> Result<Self> {
Index::try_from(value.as_str())
}
}
impl TryFrom<&str> for Index {
type Error = Error;
fn try_from(value: &str) -> Result<Self> {
match value {
INDEX_TIMESTAMP | INDEX_TIMEINDEX => Ok(Index::Time),
INDEX_TAG => Ok(Index::Tag),
INDEX_FULLTEXT => Ok(Index::Fulltext),
_ => UnsupportedIndexTypeSnafu { value }.fail(),
}
}
}