Display default value when proximityPrecision is not set

This commit is contained in:
ManyTheFish 2024-01-08 11:09:37 +01:00
parent 6203f4acef
commit f75f22e026
3 changed files with 31 additions and 14 deletions

View File

@ -37,6 +37,17 @@ where
.serialize(s) .serialize(s)
} }
fn serialize_with_default<T, S>(field: &Setting<T>, s: S) -> std::result::Result<S::Ok, S::Error>
where
T: Default + Serialize,
S: Serializer,
{
match field {
Setting::Set(value) => value.serialize(s),
Setting::Reset | Setting::NotSet => T::default().serialize(s),
}
}
#[derive(Clone, Default, Debug, Serialize, PartialEq, Eq)] #[derive(Clone, Default, Debug, Serialize, PartialEq, Eq)]
pub struct Checked; pub struct Checked;
@ -186,7 +197,11 @@ pub struct Settings<T> {
#[serde(default, skip_serializing_if = "Setting::is_not_set")] #[serde(default, skip_serializing_if = "Setting::is_not_set")]
#[deserr(default, error = DeserrJsonError<InvalidSettingsDistinctAttribute>)] #[deserr(default, error = DeserrJsonError<InvalidSettingsDistinctAttribute>)]
pub distinct_attribute: Setting<String>, pub distinct_attribute: Setting<String>,
#[serde(default, skip_serializing_if = "Setting::is_not_set")] #[serde(
default,
serialize_with = "serialize_with_default",
skip_serializing_if = "Setting::is_not_set"
)]
#[deserr(default, error = DeserrJsonError<InvalidSettingsProximityPrecision>)] #[deserr(default, error = DeserrJsonError<InvalidSettingsProximityPrecision>)]
pub proximity_precision: Setting<ProximityPrecisionView>, pub proximity_precision: Setting<ProximityPrecisionView>,
#[serde(default, skip_serializing_if = "Setting::is_not_set")] #[serde(default, skip_serializing_if = "Setting::is_not_set")]
@ -735,10 +750,11 @@ impl From<RankingRuleView> for Criterion {
} }
} }
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserr, Serialize, Deserialize)] #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Deserr, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")] #[serde(deny_unknown_fields, rename_all = "camelCase")]
#[deserr(error = DeserrJsonError<InvalidSettingsProximityPrecision>, rename_all = camelCase, deny_unknown_fields)] #[deserr(error = DeserrJsonError<InvalidSettingsProximityPrecision>, rename_all = camelCase, deny_unknown_fields)]
pub enum ProximityPrecisionView { pub enum ProximityPrecisionView {
#[default]
ByWord, ByWord,
ByAttribute, ByAttribute,
} }

View File

@ -59,7 +59,7 @@ async fn import_dump_v1_movie_raw() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -221,7 +221,7 @@ async fn import_dump_v1_movie_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -369,7 +369,7 @@ async fn import_dump_v1_rubygems_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -503,7 +503,7 @@ async fn import_dump_v2_movie_raw() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -649,7 +649,7 @@ async fn import_dump_v2_movie_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -794,7 +794,7 @@ async fn import_dump_v2_rubygems_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -928,7 +928,7 @@ async fn import_dump_v3_movie_raw() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -1074,7 +1074,7 @@ async fn import_dump_v3_movie_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -1219,7 +1219,7 @@ async fn import_dump_v3_rubygems_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -1353,7 +1353,7 @@ async fn import_dump_v4_movie_raw() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -1499,7 +1499,7 @@ async fn import_dump_v4_movie_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {
@ -1644,7 +1644,7 @@ async fn import_dump_v4_rubygems_with_settings() {
"dictionary": [], "dictionary": [],
"synonyms": {}, "synonyms": {},
"distinctAttribute": null, "distinctAttribute": null,
"proximityPrecision": null, "proximityPrecision": "byWord",
"typoTolerance": { "typoTolerance": {
"enabled": true, "enabled": true,
"minWordSizeForTypos": { "minWordSizeForTypos": {

View File

@ -84,6 +84,7 @@ async fn get_settings() {
}) })
); );
assert_eq!(settings["embedders"], json!({})); assert_eq!(settings["embedders"], json!({}));
assert_eq!(settings["proximityPrecision"], json!("byWord"));
} }
#[actix_rt::test] #[actix_rt::test]