mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-05-25 09:03:59 +02:00
Box the large GeoError error variant
This commit is contained in:
parent
4d90e3d2ec
commit
64477aac60
@ -151,7 +151,7 @@ and can not be more than 511 bytes.", .document_id.to_string()
|
|||||||
matching_rule_indices: HashMap<String, usize>,
|
matching_rule_indices: HashMap<String, usize>,
|
||||||
},
|
},
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
InvalidGeoField(#[from] GeoError),
|
InvalidGeoField(#[from] Box<GeoError>),
|
||||||
#[error("Invalid vector dimensions: expected: `{}`, found: `{}`.", .expected, .found)]
|
#[error("Invalid vector dimensions: expected: `{}`, found: `{}`.", .expected, .found)]
|
||||||
InvalidVectorDimensions { expected: usize, found: usize },
|
InvalidVectorDimensions { expected: usize, found: usize },
|
||||||
#[error("The `_vectors` field in the document with id: `{document_id}` is not an object. Was expecting an object with a key for each embedder with manually provided vectors, but instead got `{value}`")]
|
#[error("The `_vectors` field in the document with id: `{document_id}` is not an object. Was expecting an object with a key for each embedder with manually provided vectors, but instead got `{value}`")]
|
||||||
@ -519,7 +519,7 @@ error_from_sub_error! {
|
|||||||
str::Utf8Error => InternalError,
|
str::Utf8Error => InternalError,
|
||||||
ThreadPoolBuildError => InternalError,
|
ThreadPoolBuildError => InternalError,
|
||||||
SerializationError => InternalError,
|
SerializationError => InternalError,
|
||||||
GeoError => UserError,
|
Box<GeoError> => UserError,
|
||||||
CriterionError => UserError,
|
CriterionError => UserError,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2954,10 +2954,15 @@ pub(crate) mod tests {
|
|||||||
documents!({ "id" : 6, RESERVED_GEO_FIELD_NAME: {"lat": "unparseable", "lng": "unparseable"}}),
|
documents!({ "id" : 6, RESERVED_GEO_FIELD_NAME: {"lat": "unparseable", "lng": "unparseable"}}),
|
||||||
)
|
)
|
||||||
.unwrap_err();
|
.unwrap_err();
|
||||||
assert!(matches!(
|
match err1 {
|
||||||
err1,
|
Error::UserError(UserError::InvalidGeoField(err)) => match *err {
|
||||||
Error::UserError(UserError::InvalidGeoField(GeoError::BadLatitudeAndLongitude { .. }))
|
GeoError::BadLatitudeAndLongitude { .. } => (),
|
||||||
));
|
otherwise => {
|
||||||
|
panic!("err1 is not a BadLatitudeAndLongitude error but rather a {otherwise:?}")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => panic!("err1 is not a BadLatitudeAndLongitude error but rather a {err1:?}"),
|
||||||
|
}
|
||||||
|
|
||||||
db_snap!(index, geo_faceted_documents_ids); // ensure that no more document was inserted
|
db_snap!(index, geo_faceted_documents_ids); // ensure that no more document was inserted
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ pub fn enrich_documents_batch<R: Read + Seek>(
|
|||||||
|
|
||||||
if let Some(geo_value) = geo_field_id.and_then(|fid| document.get(fid)) {
|
if let Some(geo_value) = geo_field_id.and_then(|fid| document.get(fid)) {
|
||||||
if let Err(user_error) = validate_geo_from_json(&document_id, geo_value)? {
|
if let Err(user_error) = validate_geo_from_json(&document_id, geo_value)? {
|
||||||
return Ok(Err(UserError::from(user_error)));
|
return Ok(Err(UserError::from(Box::new(user_error))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,22 +80,28 @@ fn extract_lat_lng(
|
|||||||
let (lat, lng) = match (lat, lng) {
|
let (lat, lng) = match (lat, lng) {
|
||||||
(Some(lat), Some(lng)) => (lat, lng),
|
(Some(lat), Some(lng)) => (lat, lng),
|
||||||
(Some(_), None) => {
|
(Some(_), None) => {
|
||||||
return Err(GeoError::MissingLatitude { document_id: document_id() }.into())
|
return Err(
|
||||||
|
Box::new(GeoError::MissingLatitude { document_id: document_id() }).into()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
(None, Some(_)) => {
|
(None, Some(_)) => {
|
||||||
return Err(GeoError::MissingLongitude { document_id: document_id() }.into())
|
return Err(
|
||||||
|
Box::new(GeoError::MissingLongitude { document_id: document_id() }).into()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
(None, None) => return Ok(None),
|
(None, None) => return Ok(None),
|
||||||
};
|
};
|
||||||
let lat = extract_finite_float_from_value(
|
let lat = extract_finite_float_from_value(
|
||||||
serde_json::from_slice(lat).map_err(InternalError::SerdeJson)?,
|
serde_json::from_slice(lat).map_err(InternalError::SerdeJson)?,
|
||||||
)
|
)
|
||||||
.map_err(|lat| GeoError::BadLatitude { document_id: document_id(), value: lat })?;
|
.map_err(|lat| GeoError::BadLatitude { document_id: document_id(), value: lat })
|
||||||
|
.map_err(Box::new)?;
|
||||||
|
|
||||||
let lng = extract_finite_float_from_value(
|
let lng = extract_finite_float_from_value(
|
||||||
serde_json::from_slice(lng).map_err(InternalError::SerdeJson)?,
|
serde_json::from_slice(lng).map_err(InternalError::SerdeJson)?,
|
||||||
)
|
)
|
||||||
.map_err(|lng| GeoError::BadLongitude { document_id: document_id(), value: lng })?;
|
.map_err(|lng| GeoError::BadLongitude { document_id: document_id(), value: lng })
|
||||||
|
.map_err(Box::new)?;
|
||||||
Ok(Some([lat, lng]))
|
Ok(Some([lat, lng]))
|
||||||
}
|
}
|
||||||
None => Ok(None),
|
None => Ok(None),
|
||||||
|
@ -258,9 +258,11 @@ pub fn extract_geo_coordinates(
|
|||||||
Value::Null => return Ok(None),
|
Value::Null => return Ok(None),
|
||||||
Value::Object(map) => map,
|
Value::Object(map) => map,
|
||||||
value => {
|
value => {
|
||||||
return Err(
|
return Err(Box::new(GeoError::NotAnObject {
|
||||||
GeoError::NotAnObject { document_id: Value::from(external_id), value }.into()
|
document_id: Value::from(external_id),
|
||||||
)
|
value,
|
||||||
|
})
|
||||||
|
.into())
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -269,23 +271,29 @@ pub fn extract_geo_coordinates(
|
|||||||
if geo.is_empty() {
|
if geo.is_empty() {
|
||||||
[lat, lng]
|
[lat, lng]
|
||||||
} else {
|
} else {
|
||||||
return Err(GeoError::UnexpectedExtraFields {
|
return Err(Box::new(GeoError::UnexpectedExtraFields {
|
||||||
document_id: Value::from(external_id),
|
document_id: Value::from(external_id),
|
||||||
value: Value::from(geo),
|
value: Value::from(geo),
|
||||||
}
|
})
|
||||||
.into());
|
.into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(Some(_), None) => {
|
(Some(_), None) => {
|
||||||
return Err(GeoError::MissingLongitude { document_id: Value::from(external_id) }.into())
|
return Err(Box::new(GeoError::MissingLongitude {
|
||||||
|
document_id: Value::from(external_id),
|
||||||
|
})
|
||||||
|
.into())
|
||||||
}
|
}
|
||||||
(None, Some(_)) => {
|
(None, Some(_)) => {
|
||||||
return Err(GeoError::MissingLatitude { document_id: Value::from(external_id) }.into())
|
return Err(Box::new(GeoError::MissingLatitude {
|
||||||
|
document_id: Value::from(external_id),
|
||||||
|
})
|
||||||
|
.into())
|
||||||
}
|
}
|
||||||
(None, None) => {
|
(None, None) => {
|
||||||
return Err(GeoError::MissingLatitudeAndLongitude {
|
return Err(Box::new(GeoError::MissingLatitudeAndLongitude {
|
||||||
document_id: Value::from(external_id),
|
document_id: Value::from(external_id),
|
||||||
}
|
})
|
||||||
.into())
|
.into())
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -293,16 +301,18 @@ pub fn extract_geo_coordinates(
|
|||||||
match (extract_finite_float_from_value(lat), extract_finite_float_from_value(lng)) {
|
match (extract_finite_float_from_value(lat), extract_finite_float_from_value(lng)) {
|
||||||
(Ok(lat), Ok(lng)) => Ok(Some([lat, lng])),
|
(Ok(lat), Ok(lng)) => Ok(Some([lat, lng])),
|
||||||
(Ok(_), Err(value)) => {
|
(Ok(_), Err(value)) => {
|
||||||
Err(GeoError::BadLongitude { document_id: Value::from(external_id), value }.into())
|
Err(Box::new(GeoError::BadLongitude { document_id: Value::from(external_id), value })
|
||||||
|
.into())
|
||||||
}
|
}
|
||||||
(Err(value), Ok(_)) => {
|
(Err(value), Ok(_)) => {
|
||||||
Err(GeoError::BadLatitude { document_id: Value::from(external_id), value }.into())
|
Err(Box::new(GeoError::BadLatitude { document_id: Value::from(external_id), value })
|
||||||
|
.into())
|
||||||
}
|
}
|
||||||
(Err(lat), Err(lng)) => Err(GeoError::BadLatitudeAndLongitude {
|
(Err(lat), Err(lng)) => Err(Box::new(GeoError::BadLatitudeAndLongitude {
|
||||||
document_id: Value::from(external_id),
|
document_id: Value::from(external_id),
|
||||||
lat,
|
lat,
|
||||||
lng,
|
lng,
|
||||||
}
|
})
|
||||||
.into()),
|
.into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user