Skip to content

Commit 188074a

Browse files
committed
Fix min_properties handing in schemars v0.8 code
This backports the commit c14ced8 from #849.
1 parent 4dd13f2 commit 188074a

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

serde_with/src/schemars_0_8.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ where
668668
*max = max.saturating_sub(1);
669669
}
670670

671-
if let Some(min) = &mut object.max_properties {
671+
if let Some(min) = &mut object.min_properties {
672672
*min = min.saturating_sub(1);
673673
}
674674
}

serde_with/tests/schemars_0_8.rs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,8 @@ fn test_set_prevent_duplicates_with_duplicates() {
890890

891891
mod key_value_map {
892892
use super::*;
893-
use std::collections::BTreeMap;
893+
use schemars::schema::ObjectValidation;
894+
use std::{collections::BTreeMap, vec};
894895

895896
#[serde_as]
896897
#[derive(Clone, Debug, JsonSchema, Serialize)]
@@ -936,6 +937,35 @@ mod key_value_map {
936937
},
937938
}
938939

940+
#[derive(Clone, Debug, Serialize)]
941+
#[serde(transparent)]
942+
struct LimitedProperties(serde_json::Value);
943+
944+
impl JsonSchema for LimitedProperties {
945+
fn schema_name() -> String {
946+
"LimitedProperties".into()
947+
}
948+
949+
fn json_schema(_: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
950+
schemars::schema::Schema::Object(schemars::schema::SchemaObject {
951+
instance_type: Some(schemars::schema::InstanceType::Object.into()),
952+
object: Some(Box::new(ObjectValidation {
953+
max_properties: Some(5),
954+
min_properties: Some(1),
955+
additional_properties: Some(Box::new(schemars::schema::Schema::Object(
956+
schemars::schema::SchemaObject {
957+
instance_type: Some(schemars::schema::InstanceType::String.into()),
958+
..Default::default()
959+
},
960+
))),
961+
..Default::default()
962+
})),
963+
964+
..Default::default()
965+
})
966+
}
967+
}
968+
939969
#[test]
940970
fn test_untagged_nested_enum() {
941971
let value = KVMap(vec![
@@ -962,6 +992,25 @@ mod key_value_map {
962992

963993
check_valid_json_schema(&value);
964994
}
995+
996+
#[test]
997+
fn test_num_properties() {
998+
let value = KVMap(vec![
999+
LimitedProperties(serde_json::json!({
1000+
"$key$": "A",
1001+
"a": "b",
1002+
"c": "d",
1003+
"e": "f",
1004+
"g": "h",
1005+
})),
1006+
LimitedProperties(serde_json::json!({
1007+
"$key$": "B",
1008+
"a": "b",
1009+
})),
1010+
]);
1011+
1012+
check_valid_json_schema(&value);
1013+
}
9651014
}
9661015

9671016
mod one_or_many {

0 commit comments

Comments
 (0)