diff --git a/schemars/tests/enum.rs b/schemars/tests/enum.rs new file mode 100644 index 0000000..cb3073c --- /dev/null +++ b/schemars/tests/enum.rs @@ -0,0 +1,44 @@ +mod util; +use schemars::MakeSchema; +use util::*; + +#[derive(Debug, MakeSchema)] +#[schemars(rename_all = "camelCase")] +pub enum External { + UnitOne, + String(String), + Struct{ foo: i32, bar: bool }, + UnitTwo, +} + +#[test] +fn enum_external_tag() -> TestResult { + test_default_generated_schema::("enum-external") +} +/* +#[derive(Debug, MakeSchema)] +#[schemars(tag = "typeProperty")] +pub enum Internal { + UnitOne, + String(String), + Struct{ foo: i32, bar: bool }, + UnitTwo, +} + +#[test] +fn enum_internal_tag() -> TestResult { + test_default_generated_schema::("enum-internal") +} +*/ +#[derive(Debug, MakeSchema)] +#[schemars(untagged)] +pub enum Untagged { + UnitOne, + String(String), + Struct{ foo: i32, bar: bool } +} + +#[test] +fn enum_untagged() -> TestResult { + test_default_generated_schema::("enum-untagged") +} diff --git a/schemars/tests/expected/enum-external.json b/schemars/tests/expected/enum-external.json new file mode 100644 index 0000000..021fcba --- /dev/null +++ b/schemars/tests/expected/enum-external.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "External", + "anyOf": [ + { + "enum": [ + "unitOne", + "unitTwo" + ] + }, + { + "type": "object", + "properties": { + "string": { + "type": "string" + } + }, + "required": [ + "string" + ] + }, + { + "type": "object", + "properties": { + "struct": { + "type": "object", + "properties": { + "bar": { + "type": "boolean" + }, + "foo": { + "type": "integer" + } + }, + "required": [ + "bar", + "foo" + ] + } + }, + "required": [ + "struct" + ] + } + ] +} \ No newline at end of file diff --git a/schemars/tests/expected/enum-internal.json b/schemars/tests/expected/enum-internal.json new file mode 100644 index 0000000..f50e5de --- /dev/null +++ b/schemars/tests/expected/enum-internal.json @@ -0,0 +1,222 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Schema", + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/Ref" + }, + { + "$ref": "#/definitions/SchemaObject" + } + ], + "definitions": { + "InstanceType": { + "enum": [ + "null", + "boolean", + "object", + "array", + "number", + "string", + "integer" + ] + }, + "Schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/Ref" + }, + { + "$ref": "#/definitions/SchemaObject" + } + ] + }, + "SchemaObject": { + "type": "object", + "properties": { + "$id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "allOf": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/Schema" + } + }, + { + "type": "null" + } + ] + }, + "anyOf": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/Schema" + } + }, + { + "type": "null" + } + ] + }, + "definitions": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Schema" + } + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enum": { + "anyOf": [ + { + "type": "array", + "items": true + }, + { + "type": "null" + } + ] + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/SingleOrVec_For_Schema" + }, + { + "type": "null" + } + ] + }, + "not": { + "anyOf": [ + { + "$ref": "#/definitions/Schema" + }, + { + "type": "null" + } + ] + }, + "oneOf": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/Schema" + } + }, + { + "type": "null" + } + ] + }, + "properties": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Schema" + } + }, + "required": { + "type": "array", + "items": { + "type": "string" + } + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/SingleOrVec_For_InstanceType" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": true + }, + "Ref": { + "type": "object", + "properties": { + "$ref": { + "type": "string" + } + }, + "required": [ + "$ref" + ] + }, + "SingleOrVec_For_InstanceType": { + "anyOf": [ + { + "$ref": "#/definitions/InstanceType" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/InstanceType" + } + } + ] + }, + "SingleOrVec_For_Schema": { + "anyOf": [ + { + "$ref": "#/definitions/Schema" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/Schema" + } + } + ] + } + } +} \ No newline at end of file diff --git a/schemars/tests/expected/enum-untagged.json b/schemars/tests/expected/enum-untagged.json new file mode 100644 index 0000000..441329b --- /dev/null +++ b/schemars/tests/expected/enum-untagged.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Untagged", + "anyOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "object", + "properties": { + "bar": { + "type": "boolean" + }, + "foo": { + "type": "integer" + } + }, + "required": [ + "bar", + "foo" + ] + } + ] +} \ No newline at end of file