From ea28450c30924d0d5833006a8a9998a6a547dc38 Mon Sep 17 00:00:00 2001 From: Graham Esau Date: Fri, 27 Dec 2019 14:38:58 +0000 Subject: [PATCH] Add test for remote deriving with generic types --- .../tests/expected/remote_derive_generic.json | 59 +++++++++++++++++++ schemars/tests/remote_derive_generic.rs | 49 +++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 schemars/tests/expected/remote_derive_generic.json create mode 100644 schemars/tests/remote_derive_generic.rs diff --git a/schemars/tests/expected/remote_derive_generic.json b/schemars/tests/expected/remote_derive_generic.json new file mode 100644 index 0000000..d15bc97 --- /dev/null +++ b/schemars/tests/expected/remote_derive_generic.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MyStruct_for_int32", + "type": "object", + "required": [ + "byte_or_bool2", + "fake_map", + "s", + "unit_or_t2" + ], + "properties": { + "byte_or_bool2": { + "$ref": "#/definitions/OrDef_for_uint8_and_Boolean" + }, + "fake_map": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "s": { + "$ref": "#/definitions/StrDef" + }, + "unit_or_t2": { + "$ref": "#/definitions/OrDef_for_Null_and_int32" + } + }, + "definitions": { + "OrDef_for_Null_and_int32": { + "anyOf": [ + { + "type": "null" + }, + { + "type": "integer", + "format": "int32" + } + ] + }, + "OrDef_for_uint8_and_Boolean": { + "anyOf": [ + { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + { + "type": "boolean" + } + ] + }, + "StrDef": { + "type": "string" + } + } +} \ No newline at end of file diff --git a/schemars/tests/remote_derive_generic.rs b/schemars/tests/remote_derive_generic.rs new file mode 100644 index 0000000..f38d162 --- /dev/null +++ b/schemars/tests/remote_derive_generic.rs @@ -0,0 +1,49 @@ +mod util; + +use schemars::JsonSchema; +use serde::{Serialize}; +use util::*; +use std::collections::{HashMap, HashSet}; + +enum Or { + #[allow(dead_code)] + A(A), + #[allow(dead_code)] + B(B), +} + +#[derive(JsonSchema, Serialize)] +#[serde(untagged, remote = "Or")] +enum OrDef { + A(A), + B(B), +} + +struct Str<'a>(&'a str); + +#[derive(JsonSchema, Serialize)] +#[serde(remote = "Str")] +struct StrDef<'a>(&'a str); + +#[derive(JsonSchema, Serialize)] +struct MyStruct<'a, T: Serialize> { + // #[serde(with = "OrDef::<_, _>")] + // byte_or_bool1: Or, + #[serde(with = "OrDef::")] + byte_or_bool2: Or, + // #[serde(with = "OrDef::<_, _>")] + // unit_or_t1: Or<(), T>, + #[serde(with = "OrDef::<(), T>")] + unit_or_t2: Or<(), T>, + #[serde(borrow, with = "StrDef")] + s: Str<'a>, + // #[schemars(with = "HashMap::<_, HashSet<_>>")] + // map: BTreeMap>, + #[schemars(with = "HashMap::>")] + fake_map: (), +} + +#[test] +fn remote_derive_json_schema() -> TestResult { + test_default_generated_schema::>("remote_derive_generic") +}