1 /* 2 * SPDX-FileCopyrightText: none 3 * SPDX-License-Identifier: CC0-1.0 4 */ 5 6 package gov.nist.secauto.metaschema.schemagen.json.impl; 7 8 import com.fasterxml.jackson.databind.node.ObjectNode; 9 10 import edu.umd.cs.findbugs.annotations.NonNull; 11 12 /** 13 * Represents a JSON schema for a given Metaschema-based model object, which may 14 * be part of a larger JSON schema. 15 */ 16 public interface IJsonSchema { 17 18 /** 19 * Generate an inline JSON schema. 20 * 21 * @param node 22 * the property JSON object 23 * @param state 24 * the schema generation state used for context 25 */ 26 void generateInlineJsonSchema(@NonNull ObjectNode node, @NonNull IJsonGenerationState state); 27 28 /** 29 * Generate a JSON schema or a reference to a JSON schema definition. 30 * <p> 31 * This method will determine if this schema is intended to be inline or used as 32 * a JSON schema definition by reference. 33 * 34 * @param node 35 * the property JSON object 36 * @param state 37 * the schema generation state used for context 38 */ 39 default void generateJsonSchemaOrDefinitionRef(@NonNull ObjectNode node, @NonNull IJsonGenerationState state) { 40 generateInlineJsonSchema(node, state); 41 } 42 43 /** 44 * Determine if the schema is defined inline or as a global definition. 45 * 46 * @param state 47 * the schema generation state used for context 48 * @return {@code true} if the schema is to be defined inline or {@code false} 49 * if the schema is to be defined globally 50 */ 51 default boolean isInline(@NonNull IJsonGenerationState state) { 52 return true; 53 } 54 }