mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-07-04 20:37:15 +02:00
merge with main
This commit is contained in:
commit
6831c23449
25 changed files with 824 additions and 953 deletions
|
@ -1,4 +1,4 @@
|
|||
use std::collections::HashSet;
|
||||
use std::collections::BTreeSet;
|
||||
use std::convert::Infallible;
|
||||
use std::error::Error as StdError;
|
||||
use std::{fmt, io, str};
|
||||
|
@ -57,19 +57,17 @@ pub enum UserError {
|
|||
CriterionError(CriterionError),
|
||||
DocumentLimitReached,
|
||||
InvalidDocumentId { document_id: Value },
|
||||
InvalidFacetsDistribution { invalid_facets_name: HashSet<String> },
|
||||
InvalidFacetsDistribution { invalid_facets_name: BTreeSet<String> },
|
||||
InvalidGeoField { document_id: Value, object: Value },
|
||||
InvalidFilter(String),
|
||||
InvalidSortName { name: String },
|
||||
InvalidSortableAttribute { field: String, valid_fields: HashSet<String> },
|
||||
InvalidSortableAttribute { field: String, valid_fields: BTreeSet<String> },
|
||||
SortRankingRuleMissing,
|
||||
InvalidStoreFile,
|
||||
MaxDatabaseSizeReached,
|
||||
MissingDocumentId { document: Object },
|
||||
MissingDocumentId { primary_key: String, document: Object },
|
||||
MissingPrimaryKey,
|
||||
NoSpaceLeftOnDevice,
|
||||
PrimaryKeyCannotBeChanged,
|
||||
PrimaryKeyCannotBeReset,
|
||||
PrimaryKeyCannotBeChanged(String),
|
||||
SerdeJson(serde_json::Error),
|
||||
SortError(SortError),
|
||||
UnknownInternalDocumentId { document_id: DocumentId },
|
||||
|
@ -168,7 +166,7 @@ impl From<SerializationError> for Error {
|
|||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self {
|
||||
Self::InternalError(error) => write!(f, "internal: {}", error),
|
||||
Self::InternalError(error) => write!(f, "internal: {}.", error),
|
||||
Self::IoError(error) => error.fmt(f),
|
||||
Self::UserError(error) => error.fmt(f),
|
||||
}
|
||||
|
@ -181,15 +179,15 @@ impl fmt::Display for InternalError {
|
|||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self {
|
||||
Self::DatabaseMissingEntry { db_name, key } => {
|
||||
write!(f, "missing {} in the {} database", key.unwrap_or("key"), db_name)
|
||||
write!(f, "Missing {} in the {} database.", key.unwrap_or("key"), db_name)
|
||||
}
|
||||
Self::FieldIdMapMissingEntry(error) => error.fmt(f),
|
||||
Self::Fst(error) => error.fmt(f),
|
||||
Self::GrenadInvalidCompressionType => {
|
||||
f.write_str("invalid compression type have been specified to grenad")
|
||||
f.write_str("Invalid compression type have been specified to grenad.")
|
||||
}
|
||||
Self::IndexingMergingKeys { process } => {
|
||||
write!(f, "invalid merge while processing {}", process)
|
||||
write!(f, "Invalid merge while processing {}.", process)
|
||||
}
|
||||
Self::Serialization(error) => error.fmt(f),
|
||||
Self::InvalidDatabaseTyping => HeedError::InvalidDatabaseTyping.fmt(f),
|
||||
|
@ -207,69 +205,75 @@ impl StdError for InternalError {}
|
|||
impl fmt::Display for UserError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self {
|
||||
Self::InvalidFilter(input) => write!(f, "{}", input),
|
||||
Self::AttributeLimitReached => f.write_str("maximum number of attributes reached"),
|
||||
Self::InvalidFilter(error) => f.write_str(error),
|
||||
Self::AttributeLimitReached => f.write_str("A document cannot contain more than 65,535 fields."),
|
||||
Self::CriterionError(error) => write!(f, "{}", error),
|
||||
Self::DocumentLimitReached => f.write_str("maximum number of documents reached"),
|
||||
Self::DocumentLimitReached => f.write_str("Maximum number of documents reached."),
|
||||
Self::InvalidFacetsDistribution { invalid_facets_name } => {
|
||||
let name_list =
|
||||
invalid_facets_name.iter().map(AsRef::as_ref).collect::<Vec<_>>().join(", ");
|
||||
write!(
|
||||
f,
|
||||
"invalid facet distribution, the fields {} are not set as filterable",
|
||||
"Invalid facet distribution, the fields `{}` are not set as filterable.",
|
||||
name_list
|
||||
)
|
||||
}
|
||||
Self::InvalidGeoField { document_id, object } => write!(
|
||||
f,
|
||||
"the document with the id: {} contains an invalid _geo field: {}",
|
||||
document_id, object
|
||||
),
|
||||
Self::InvalidDocumentId { document_id } => {
|
||||
let json = serde_json::to_string(document_id).unwrap();
|
||||
Self::InvalidGeoField { document_id, object } => {
|
||||
let document_id = match document_id {
|
||||
Value::String(id) => id.clone(),
|
||||
_ => document_id.to_string(),
|
||||
};
|
||||
let object = match object {
|
||||
Value::String(id) => id.clone(),
|
||||
_ => object.to_string(),
|
||||
};
|
||||
write!(
|
||||
f,
|
||||
"document identifier is invalid {}, \
|
||||
a document id can be of type integer or string \
|
||||
only composed of alphanumeric characters (a-z A-Z 0-9), hyphens (-) and underscores (_)",
|
||||
json
|
||||
"The document with the id: `{}` contains an invalid _geo field: `{}`.",
|
||||
document_id, object
|
||||
)
|
||||
},
|
||||
Self::InvalidDocumentId { document_id } => {
|
||||
let document_id = match document_id {
|
||||
Value::String(id) => id.clone(),
|
||||
_ => document_id.to_string(),
|
||||
};
|
||||
write!(
|
||||
f,
|
||||
"Document identifier `{}` is invalid. \
|
||||
A document identifier can be of type integer or string, \
|
||||
only composed of alphanumeric characters (a-z A-Z 0-9), hyphens (-) and underscores (_).",
|
||||
document_id
|
||||
)
|
||||
}
|
||||
Self::InvalidSortName { name } => {
|
||||
write!(f, "Invalid syntax for the sort parameter: {}", name)
|
||||
}
|
||||
Self::InvalidSortableAttribute { field, valid_fields } => {
|
||||
let valid_names =
|
||||
valid_fields.iter().map(AsRef::as_ref).collect::<Vec<_>>().join(", ");
|
||||
write!(
|
||||
f,
|
||||
"Attribute {} is not sortable, available sortable attributes are: {}",
|
||||
"Attribute `{}` is not sortable. Available sortable attributes are: `{}`.",
|
||||
field, valid_names
|
||||
)
|
||||
}
|
||||
Self::SortRankingRuleMissing => f.write_str(
|
||||
"You must specify where \"sort\" is listed in the \
|
||||
rankingRules setting to use the sort parameter at search time",
|
||||
"The sort ranking rule must be specified in the \
|
||||
ranking rules settings to use the sort parameter at search time.",
|
||||
),
|
||||
Self::MissingDocumentId { document } => {
|
||||
Self::MissingDocumentId { primary_key, document } => {
|
||||
let json = serde_json::to_string(document).unwrap();
|
||||
write!(f, "document doesn't have an identifier {}", json)
|
||||
write!(f, "Document doesn't have a `{}` attribute: `{}`.", primary_key, json)
|
||||
}
|
||||
Self::MissingPrimaryKey => f.write_str("missing primary key"),
|
||||
Self::MaxDatabaseSizeReached => f.write_str("maximum database size reached"),
|
||||
// TODO where can we find it instead of writing the text ourselves?
|
||||
Self::NoSpaceLeftOnDevice => f.write_str("no space left on device"),
|
||||
Self::InvalidStoreFile => f.write_str("store file is not a valid database file"),
|
||||
Self::PrimaryKeyCannotBeChanged => {
|
||||
f.write_str("primary key cannot be changed if the database contains documents")
|
||||
}
|
||||
Self::PrimaryKeyCannotBeReset => {
|
||||
f.write_str("primary key cannot be reset if the database contains documents")
|
||||
Self::MissingPrimaryKey => f.write_str("The primary key inference process failed because the engine did not find any fields containing `id` substring in their name. If your document identifier does not contain any `id` substring, you can set the primary key of the index."),
|
||||
Self::MaxDatabaseSizeReached => f.write_str("Maximum database size has been reached."),
|
||||
Self::NoSpaceLeftOnDevice => f.write_str("There is no more space left on the device. Consider increasing the size of the disk/partition."),
|
||||
Self::InvalidStoreFile => f.write_str("The database file is in an invalid state."),
|
||||
Self::PrimaryKeyCannotBeChanged(primary_key) => {
|
||||
write!(f, "Index already has a primary key: `{}`.", primary_key)
|
||||
}
|
||||
Self::SerdeJson(error) => error.fmt(f),
|
||||
Self::SortError(error) => write!(f, "{}", error),
|
||||
Self::UnknownInternalDocumentId { document_id } => {
|
||||
write!(f, "an unknown internal document id have been used ({})", document_id)
|
||||
write!(f, "An unknown internal document id have been used: `{}`.", document_id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue