Skip to content

Commit

Permalink
chore(docs): add example for dependentRequired usage (#464)
Browse files Browse the repository at this point in the history
  • Loading branch information
CarstenWickner authored Jul 29, 2024
1 parent 92277e2 commit 565dbb1
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright 2024 VicTools.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.github.victools.jsonschema.examples;

import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.victools.jsonschema.generator.OptionPreset;
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfig;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.github.victools.jsonschema.generator.SchemaVersion;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
* Example created in response to <a href="https://github.com/victools/jsonschema-generator/issues/463">#463</a>.
* <br/>
* Demonstrating the use of "dependentRequired" by using a custom annotation.
*/
public class DependentRequiredExample implements SchemaGenerationExampleInterface {

@Override
public ObjectNode generateSchema() {
SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12, OptionPreset.PLAIN_JSON);
configBuilder.forFields().withDependentRequiresResolver(field -> Optional
.ofNullable(field.getAnnotationConsideringFieldAndGetter(IfPresentAlsoRequire.class))
.map(IfPresentAlsoRequire::value)
.map(Arrays::asList)
.orElse(null));
SchemaGeneratorConfig config = configBuilder.build();
SchemaGenerator generator = new SchemaGenerator(config);
return generator.generateSchema(Example.class);
}

static class Example {
@IfPresentAlsoRequire({"foobar", "bar"})
public String foo;
public Integer foobar;
public List<String> bar;
public Double baz;
}

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface IfPresentAlsoRequire {
String[] value();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class ExampleTest {
@ParameterizedTest
@ValueSource(classes = {
AnnotationInheritanceExample.class,
DependentRequiredExample.class,
EnumMapExample.class,
ExternalRefAnnotationExample.class,
ExternalRefPackageExample.class,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"$schema" : "https://json-schema.org/draft/2020-12/schema",
"type" : "object",
"properties" : {
"bar" : {
"type" : "array",
"items" : {
"type" : "string"
}
},
"baz" : {
"type" : "number"
},
"foo" : {
"type" : "string"
},
"foobar" : {
"type" : "integer"
}
},
"dependentRequired" : {
"foo" : [ "foobar", "bar" ]
}
}
2 changes: 1 addition & 1 deletion slate-docs/source/includes/_main-generator-individual.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ configBuilder.forMethods()
```java
configBuilder.forFields()
.withDependentRequiresResolver(field -> Optional
.ofNullable(field.getAnnotationConsideringFieldAndGetter(IfPresentAlsoRequire.class)
.ofNullable(field.getAnnotationConsideringFieldAndGetter(IfPresentAlsoRequire.class))
.map(IfPresentAlsoRequire::value)
.map(Arrays::asList)
.orElse(null));
Expand Down

0 comments on commit 565dbb1

Please sign in to comment.