pipeline/etl/transform/
index.rs1use crate::error::{Error, Result, UnsupportedIndexTypeSnafu};
16
17const INDEX_TIMESTAMP: &str = "timestamp";
18const INDEX_TIMEINDEX: &str = "time";
19const INDEX_TAG: &str = "tag";
20const INDEX_FULLTEXT: &str = "fulltext";
21const INDEX_SKIPPING: &str = "skipping";
22const INDEX_INVERTED: &str = "inverted";
23
24#[derive(Debug, PartialEq, Eq, Clone, Copy)]
25#[allow(clippy::enum_variant_names)]
26pub enum Index {
27 Time,
28 Tag,
30 Fulltext,
31 Skipping,
32 Inverted,
33}
34
35impl std::fmt::Display for Index {
36 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
37 let index = match self {
38 Index::Time => INDEX_TIMEINDEX,
39 Index::Tag => INDEX_TAG,
40 Index::Fulltext => INDEX_FULLTEXT,
41 Index::Skipping => INDEX_SKIPPING,
42 Index::Inverted => INDEX_INVERTED,
43 };
44
45 write!(f, "{}", index)
46 }
47}
48
49impl TryFrom<String> for Index {
50 type Error = Error;
51
52 fn try_from(value: String) -> Result<Self> {
53 Index::try_from(value.as_str())
54 }
55}
56
57impl TryFrom<&str> for Index {
58 type Error = Error;
59
60 fn try_from(value: &str) -> Result<Self> {
61 match value {
62 INDEX_TIMESTAMP | INDEX_TIMEINDEX => Ok(Index::Time),
63 INDEX_TAG => Ok(Index::Tag),
64 INDEX_FULLTEXT => Ok(Index::Fulltext),
65 INDEX_SKIPPING => Ok(Index::Skipping),
66 INDEX_INVERTED => Ok(Index::Inverted),
67 _ => UnsupportedIndexTypeSnafu { value }.fail(),
68 }
69 }
70}