mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 07:56:28 +00:00 
			
		
		
		
	v1: RankingRule::from_str
This commit is contained in:
		| @@ -1,6 +1,9 @@ | ||||
| use std::collections::{BTreeMap, BTreeSet}; | ||||
| use std::result::Result as StdResult; | ||||
| use std::str::FromStr; | ||||
|  | ||||
| use once_cell::sync::Lazy; | ||||
| use regex::Regex; | ||||
| use serde::{Deserialize, Deserializer, Serialize}; | ||||
|  | ||||
| #[derive(Default, Clone, Serialize, Deserialize, Debug)] | ||||
| @@ -53,6 +56,34 @@ pub enum RankingRule { | ||||
|     Desc(String), | ||||
| } | ||||
|  | ||||
| static ASC_DESC_REGEX: Lazy<Regex> = | ||||
|     Lazy::new(|| Regex::new(r#"(asc|desc)\(([\w_-]+)\)"#).unwrap()); | ||||
|  | ||||
| impl FromStr for RankingRule { | ||||
|     type Err = (); | ||||
|  | ||||
|     fn from_str(s: &str) -> Result<Self, Self::Err> { | ||||
|         Ok(match s { | ||||
|             "typo" => Self::Typo, | ||||
|             "words" => Self::Words, | ||||
|             "proximity" => Self::Proximity, | ||||
|             "attribute" => Self::Attribute, | ||||
|             "wordsPosition" => Self::WordsPosition, | ||||
|             "exactness" => Self::Exactness, | ||||
|             text => { | ||||
|                 let caps = ASC_DESC_REGEX.captures(text).ok_or(())?; | ||||
|                 let order = caps.get(1).unwrap().as_str(); | ||||
|                 let field_name = caps.get(2).unwrap().as_str(); | ||||
|                 match order { | ||||
|                     "asc" => Self::Asc(field_name.to_string()), | ||||
|                     "desc" => Self::Desc(field_name.to_string()), | ||||
|                     _ => return Err(()), | ||||
|                 } | ||||
|             } | ||||
|         }) | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Any value that is present is considered Some value, including null. | ||||
| fn deserialize_some<'de, T, D>(deserializer: D) -> StdResult<Option<T>, D::Error> | ||||
| where | ||||
|   | ||||
		Reference in New Issue
	
	Block a user