mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-06 12:46:31 +00:00
Simplify parser
This commit is contained in:
@ -371,32 +371,34 @@ fn parse_template_id<'a>(
|
|||||||
id: &'a str,
|
id: &'a str,
|
||||||
) -> Result<(serde_json::Value, bool), RenderError<'a>> {
|
) -> Result<(serde_json::Value, bool), RenderError<'a>> {
|
||||||
let mut input: Span = id.into();
|
let mut input: Span = id.into();
|
||||||
let mut next_part = |first: bool| -> Result<Option<Token<'_>>, RenderError<'a>> {
|
let mut next_part = || -> Result<Option<Token<'_>>, RenderError<'a>> {
|
||||||
if input.is_empty() {
|
if input.is_empty() {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
if !first {
|
let (mut remaining, value) = milli::filter_parser::parse_dotted_value_part(input)
|
||||||
if !input.starts_with('.') {
|
|
||||||
return Err(ExpectedDotAfterValue(input));
|
|
||||||
}
|
|
||||||
input = milli::filter_parser::Slice::slice(&input, 1..);
|
|
||||||
}
|
|
||||||
let (remaining, value) = milli::filter_parser::parse_dotted_value_part(input)
|
|
||||||
.map_err(|_| ExpectedValue(input))?;
|
.map_err(|_| ExpectedValue(input))?;
|
||||||
|
|
||||||
|
if !remaining.is_empty() {
|
||||||
|
if !remaining.starts_with('.') {
|
||||||
|
return Err(ExpectedDotAfterValue(remaining));
|
||||||
|
}
|
||||||
|
remaining = milli::filter_parser::Slice::slice(&remaining, 1..);
|
||||||
|
}
|
||||||
|
|
||||||
input = remaining;
|
input = remaining;
|
||||||
|
|
||||||
Ok(Some(value))
|
Ok(Some(value))
|
||||||
};
|
};
|
||||||
|
|
||||||
let root = next_part(true)?.ok_or(EmptyTemplateId)?;
|
let root = next_part()?.ok_or(EmptyTemplateId)?;
|
||||||
let template = match root.value() {
|
let template = match root.value() {
|
||||||
"embedders" => {
|
"embedders" => {
|
||||||
let index_embedding_configs = index.embedding_configs();
|
let index_embedding_configs = index.embedding_configs();
|
||||||
let embedding_configs = index_embedding_configs.embedding_configs(rtxn)?;
|
let embedding_configs = index_embedding_configs.embedding_configs(rtxn)?;
|
||||||
let get_embedders = || embedding_configs.iter().map(|c| c.name.clone()).collect();
|
let get_embedders = || embedding_configs.iter().map(|c| c.name.clone()).collect();
|
||||||
|
|
||||||
let embedder = next_part(false)?
|
let embedder =
|
||||||
.ok_or_else(|| MissingEmbedderName { available: get_embedders() })?;
|
next_part()?.ok_or_else(|| MissingEmbedderName { available: get_embedders() })?;
|
||||||
|
|
||||||
let embedding_config = embedding_configs
|
let embedding_config = embedding_configs
|
||||||
.iter()
|
.iter()
|
||||||
@ -409,7 +411,7 @@ fn parse_template_id<'a>(
|
|||||||
let get_indexing = || embedding_config.config.embedder_options.indexing_fragments();
|
let get_indexing = || embedding_config.config.embedder_options.indexing_fragments();
|
||||||
let get_search = || embedding_config.config.embedder_options.search_fragments();
|
let get_search = || embedding_config.config.embedder_options.search_fragments();
|
||||||
|
|
||||||
let template_kind = next_part(false)?.ok_or_else(|| MissingTemplateAfterEmbedder {
|
let template_kind = next_part()?.ok_or_else(|| MissingTemplateAfterEmbedder {
|
||||||
embedder: embedder.clone(),
|
embedder: embedder.clone(),
|
||||||
indexing: get_indexing(),
|
indexing: get_indexing(),
|
||||||
search: get_search(),
|
search: get_search(),
|
||||||
@ -424,7 +426,7 @@ fn parse_template_id<'a>(
|
|||||||
),
|
),
|
||||||
"indexingFragments" => (
|
"indexingFragments" => (
|
||||||
parse_template_id_fragment(
|
parse_template_id_fragment(
|
||||||
next_part(false)?,
|
next_part()?,
|
||||||
FragmentKind::Indexing,
|
FragmentKind::Indexing,
|
||||||
embedding_config,
|
embedding_config,
|
||||||
embedder,
|
embedder,
|
||||||
@ -433,7 +435,7 @@ fn parse_template_id<'a>(
|
|||||||
),
|
),
|
||||||
"searchFragments" => (
|
"searchFragments" => (
|
||||||
parse_template_id_fragment(
|
parse_template_id_fragment(
|
||||||
next_part(false)?,
|
next_part()?,
|
||||||
FragmentKind::Search,
|
FragmentKind::Search,
|
||||||
embedding_config,
|
embedding_config,
|
||||||
embedder,
|
embedder,
|
||||||
@ -451,7 +453,7 @@ fn parse_template_id<'a>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
"chatCompletions" => {
|
"chatCompletions" => {
|
||||||
let template_name = next_part(false)?.ok_or(MissingChatCompletionTemplate)?;
|
let template_name = next_part()?.ok_or(MissingChatCompletionTemplate)?;
|
||||||
|
|
||||||
if template_name.value() != "documentTemplate" {
|
if template_name.value() != "documentTemplate" {
|
||||||
return Err(UnknownChatCompletionTemplate(template_name));
|
return Err(UnknownChatCompletionTemplate(template_name));
|
||||||
@ -467,7 +469,7 @@ fn parse_template_id<'a>(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(next) = next_part(false)? {
|
if let Some(next) = next_part()? {
|
||||||
return Err(LeftOverToken(next));
|
return Err(LeftOverToken(next));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user