Add default deserialize value

This commit is contained in:
ManyTheFish 2025-03-11 17:44:03 +01:00
parent ea7e299663
commit d500c7f625
2 changed files with 80 additions and 1 deletions

View File

@ -523,7 +523,12 @@ async fn granular_filterable_attributes() {
index.update_settings(json!({ "filterableAttributes": [
{ "attributePatterns": ["name"], "features": { "facetSearch": true, "filter": {"equality": true, "comparison": false} } },
{ "attributePatterns": ["age"], "features": { "facetSearch": false, "filter": {"equality": true, "comparison": true} } },
{ "attributePatterns": ["id"] }
{ "attributePatterns": ["id"] },
{ "attributePatterns": ["default-filterable-features-null"], "features": { "facetSearch": true } },
{ "attributePatterns": ["default-filterable-features-equality"], "features": { "facetSearch": true, "filter": {"comparison": true} } },
{ "attributePatterns": ["default-filterable-features-comparison"], "features": { "facetSearch": true, "filter": {"equality": true} } },
{ "attributePatterns": ["default-filterable-features-empty"], "features": { "facetSearch": true, "filter": {} } },
{ "attributePatterns": ["default-facet-search"], "features": { "filter": {"equality": true, "comparison": true} } },
] })).await;
assert_eq!(code, 202);
index.wait_task(response.uid()).await.succeeded();
@ -567,6 +572,66 @@ async fn granular_filterable_attributes() {
"comparison": false
}
}
},
{
"attributePatterns": [
"default-filterable-features-null"
],
"features": {
"facetSearch": true,
"filter": {
"equality": true,
"comparison": false
}
}
},
{
"attributePatterns": [
"default-filterable-features-equality"
],
"features": {
"facetSearch": true,
"filter": {
"equality": true,
"comparison": true
}
}
},
{
"attributePatterns": [
"default-filterable-features-comparison"
],
"features": {
"facetSearch": true,
"filter": {
"equality": true,
"comparison": false
}
}
},
{
"attributePatterns": [
"default-filterable-features-empty"
],
"features": {
"facetSearch": true,
"filter": {
"equality": true,
"comparison": false
}
}
},
{
"attributePatterns": [
"default-facet-search"
],
"features": {
"facetSearch": false,
"filter": {
"equality": true,
"comparison": true
}
}
}
]
"###);

View File

@ -71,7 +71,11 @@ impl FilterableAttributesPatterns {
#[deserr(rename_all = camelCase, deny_unknown_fields)]
#[derive(Default)]
pub struct FilterableAttributesFeatures {
#[serde(default)]
#[deserr(default)]
facet_search: bool,
#[serde(default)]
#[deserr(default)]
filter: FilterFeatures,
}
@ -144,11 +148,21 @@ impl<E: DeserializeError> Deserr<E> for FilterableAttributesRule {
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Copy, Debug, Deserr, ToSchema)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
#[deserr(rename_all = camelCase, deny_unknown_fields)]
pub struct FilterFeatures {
#[serde(default = "default_true")]
#[deserr(default = true)]
equality: bool,
#[serde(default)]
#[deserr(default)]
comparison: bool,
}
fn default_true() -> bool {
true
}
impl FilterFeatures {
/// Get the allowed operators for the filter.
pub fn allowed_operators(&self) -> Vec<String> {