Skip to content

Commit d78e7df

Browse files
authored
support the "not": {} construction (#869)
1 parent 30da1a4 commit d78e7df

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

typify-impl/src/convert.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,6 +1619,25 @@ impl TypeSpace {
16191619
Ok((type_entry, metadata))
16201620
}
16211621

1622+
// The permissive schema is equivalent to the `true` schema.
1623+
Schema::Object(SchemaObject {
1624+
metadata: _,
1625+
instance_type: None,
1626+
format: None,
1627+
enum_values: None,
1628+
const_value: None,
1629+
subschemas: None,
1630+
number: None,
1631+
string: None,
1632+
array: None,
1633+
object: None,
1634+
reference: None,
1635+
extensions: _,
1636+
}) => {
1637+
let (type_entry, _) = self.convert_schema(type_name, &Schema::Bool(false))?;
1638+
Ok((type_entry, metadata))
1639+
}
1640+
16221641
// An explicit type and enumerated values.
16231642
Schema::Object(
16241643
schema @ SchemaObject {

typify/tests/schemas/various-enums.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,9 @@
168168
"NeverEver": {
169169
"not": true
170170
},
171+
"NeverEverForever": {
172+
"not": {}
173+
},
171174
"AnyOfNothing": {
172175
"enum": []
173176
},

typify/tests/schemas/various-enums.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,33 @@ impl ::std::convert::From<&Self> for NeverEver {
938938
value.clone()
939939
}
940940
}
941+
#[doc = "`NeverEverForever`"]
942+
#[doc = r""]
943+
#[doc = r" <details><summary>JSON schema</summary>"]
944+
#[doc = r""]
945+
#[doc = r" ```json"]
946+
#[doc = "false"]
947+
#[doc = r" ```"]
948+
#[doc = r" </details>"]
949+
#[derive(
950+
:: serde :: Deserialize,
951+
:: serde :: Serialize,
952+
Clone,
953+
Copy,
954+
Debug,
955+
Eq,
956+
Hash,
957+
Ord,
958+
PartialEq,
959+
PartialOrd,
960+
)]
961+
#[serde(deny_unknown_fields)]
962+
pub enum NeverEverForever {}
963+
impl ::std::convert::From<&Self> for NeverEverForever {
964+
fn from(value: &NeverEverForever) -> Self {
965+
value.clone()
966+
}
967+
}
941968
#[doc = "`NullStringEnumWithUnknownFormat`"]
942969
#[doc = r""]
943970
#[doc = r" <details><summary>JSON schema</summary>"]

0 commit comments

Comments
 (0)