summa_core/
validators.rs

1use tantivy::schema::{Field, Schema};
2
3use crate::errors::{Error, SummaResult, ValidationError};
4
5pub fn parse_schema(schema: &str) -> SummaResult<Schema> {
6    serde_yaml::from_str(schema).map_err(|_| Error::Validation(Box::new(ValidationError::InvalidSchema(schema.to_owned()))))
7}
8
9pub fn parse_fields<'a>(schema: &'a Schema, fields: &'a [String], excluded_fields: &'a [String]) -> SummaResult<Vec<(Field, &'a str)>> {
10    if excluded_fields.is_empty() {
11        Ok(fields
12            .iter()
13            .map(|f| schema.find_field(f).ok_or_else(|| ValidationError::MissingField(f.to_string())))
14            .collect::<Result<_, _>>()?)
15    } else if fields.is_empty() {
16        Ok(schema
17            .fields()
18            .filter_map(|(_, field_entry)| {
19                if excluded_fields.iter().any(|e| e == field_entry.name()) {
20                    None
21                } else {
22                    Some(
23                        schema
24                            .find_field(field_entry.name())
25                            .ok_or_else(|| ValidationError::MissingField(field_entry.name().to_string())),
26                    )
27                }
28            })
29            .collect::<Result<_, _>>()?)
30    } else {
31        Ok(fields
32            .iter()
33            .map(|f| schema.find_field(f).ok_or_else(|| ValidationError::MissingField(f.to_string())))
34            .collect::<Result<_, _>>()?)
35    }
36}