diff --git a/src/commands/index.rs b/src/commands/index.rs index 10259e8..b026f45 100644 --- a/src/commands/index.rs +++ b/src/commands/index.rs @@ -110,6 +110,10 @@ pub async fn run_index(args: IndexArgs, pool: PgPool) -> Result<()> { Box::new(move |value| options.formats.try_parse(value)), )); } + FieldType::Ip(options) => { + let field = schema_builder.add_ip_addr_field(&name, options); + field_parsers.push((name, field, Box::new(common_parse))); + } } } diff --git a/src/config/ip.rs b/src/config/ip.rs new file mode 100644 index 0000000..68c1385 --- /dev/null +++ b/src/config/ip.rs @@ -0,0 +1,32 @@ +use serde::{Deserialize, Serialize}; +use tantivy::schema::IpAddrOptions; + +use super::default_true; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct IpFieldConfig { + #[serde(default = "default_true")] + pub stored: bool, + + #[serde(default)] + pub fast: bool, + + #[serde(default = "default_true")] + pub indexed: bool, +} + +impl From for IpAddrOptions { + fn from(config: IpFieldConfig) -> Self { + let mut options = IpAddrOptions::default(); + if config.stored { + options = options.set_stored(); + } + if config.indexed { + options = options.set_indexed(); + } + if config.fast { + options = options.set_fast(); + } + options + } +} diff --git a/src/config/mod.rs b/src/config/mod.rs index 46c3ed8..4ef45b1 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1,5 +1,6 @@ pub mod boolean; pub mod datetime; +pub mod ip; pub mod number; pub mod text; @@ -12,6 +13,7 @@ use tokio::fs::read_to_string; use self::{ boolean::BooleanFieldConfig, datetime::DateTimeFieldConfig, + ip::IpFieldConfig, number::NumberFieldConfig, text::{IndexedTextFieldType, TextFieldConfig}, }; @@ -33,6 +35,7 @@ pub enum FieldType { Number(NumberFieldConfig), Boolean(BooleanFieldConfig), Datetime(DateTimeFieldConfig), + Ip(IpFieldConfig), } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -49,6 +52,7 @@ impl FieldsConfig { Number(config) => config.indexed, Boolean(config) => config.indexed, Datetime(config) => config.indexed, + Ip(config) => config.indexed, } } }