Interface IValueDescriptorFactory

All Known Implementing Classes:
ValueDescriptorFactory

public interface IValueDescriptorFactory
Factory for creating IValueDescriptors. This includes methods that create IValueDescriptorBuilders that let you configure the descriptor, as well as some convenience methods that return preconfigured descriptors. A value descriptor indicates the type a value must have and may impose additional restrictions on the allowed values.

You may create descriptors once during startup and store them statically. Also, please note that these builder methods perform checks and will throw an error if an invalid configuration is detected.

Since:
7.0.0
Author:
XIMA MEDIA GmbH
  • Method Details

    • accessAtPath

      List<?> accessAtPath(Object base, String path)
      Access a nested property in an object at a given JSON path.
      Parameters:
      base - Base object with data to access.
      path - JSON path to the data to access.
      Returns:
      The data at the given path in the base object.
    • any

      default IAnyValueDescriptor any()
      Gets a value descriptor that allows any type of value. When no value is provided, defaults to null (i.e. like a INullValueDescriptor).
      Returns:
      A descriptor for an any value that defaults to the given value. The description uses the default i18n key determined from the root class and the path to this property.
    • any

      default IAnyValueDescriptor any(Object defaultValue)
      Gets a value descriptor that allows any type of value. Uses the given default value when no value is provided. explicitly.
      Parameters:
      defaultValue - The default value for the property of type any, used when no other value is supplied.
      Returns:
      A descriptor for an any value that defaults to the given value. The description uses the default i18n key determined from the root class and the path to this property.
    • anyBuilder

      Returns:
      A descriptor builder for an any value.
    • bool

      default IBooleanValueDescriptor bool()
      Returns:
      A descriptor for a boolean value that defaults to false. The description uses the default i18n key determined from the root class and the path to this property.
    • bool

      default IBooleanValueDescriptor bool(boolean defaultValue)
      Parameters:
      defaultValue - The default value for the boolean property, used when no other value is supplied.
      Returns:
      A descriptor for a boolean value that defaults to the given value. The description uses the default i18n key determined from the root class and the path to this property.
    • bool

      @Deprecated default IBooleanValueDescriptor bool(boolean defaultValue, String descriptionI18n)
      Parameters:
      defaultValue - The default value for the boolean property, used when no other value is supplied.
      descriptionI18n - The i18n key to use for the description of the boolean property.
      Returns:
      A descriptor for a boolean value that defaults to the given value and uses the given description.
    • boolBuilder

      Returns:
      A descriptor builder for a boolean value.
    • constant

      default IConstValueDescriptor<Boolean> constant(boolean value)
      Creates a value descriptor that only admits the given constant value.
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor for a value that only admits the given constant boolean value.
    • constant

      IValueDescriptor<?,?> constant(Object value)
      Creates a value descriptor that only admits the given constant value. The given value must be a JSON-like value, i.e. null, a Boolean, a Number, a String or LargeString, a List of JSON values, or a Map from strings to JSON values.
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor for a value that only admits the given constant boolean value.
      Throws:
      IllegalArgumentException - When the value is not a valid JSON value, e.g. when it is a map with non-string keys, or some object that is not a JSON value.
    • constant

      IValueDescriptor<?,?> constant(Object value, IValueStructureAccessor adapter)
      Creates a value descriptor that only admits the given constant value.
      Parameters:
      value - The constant value that the descriptor should allow.
      adapter - The adapter to access the structure of the value.
      Returns:
      A descriptor for a value that only admits the given constant boolean value.
      Throws:
      IllegalArgumentException - When the value is not a valid JSON value, e.g. when it is a map with non-string keys, or some object that is not a JSON value.
    • constant

      default IConstValueDescriptor<Double> constant(double value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor for a value that only admits the given constant floating point value.
    • constant

      default IConstValueDescriptor<LargeString> constant(LargeString value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor for a value that only admits the given constant large string value.
    • constant

      default IConstValueDescriptor<Long> constant(long value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor for a value that only admits the given constant integer value.
    • constant

      default IConstValueDescriptor<String> constant(String value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor for a value that only admits the given constant string value.
    • constantBuilder

      IConstValueDescriptorBuilder<Boolean> constantBuilder(boolean value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor builder for a boolean value that only admits a constant instance.
    • constantBuilder

      IConstValueDescriptorBuilder<Double> constantBuilder(double value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor builder for a floating point value that only admits a constant instance.
    • constantBuilder

      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor builder for a large string value that only admits a constant instance.
    • constantBuilder

      IConstValueDescriptorBuilder<Long> constantBuilder(long value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor builder for an integer value that only admits a constant instance.
    • constantBuilder

      IConstValueDescriptorBuilder<String> constantBuilder(String value)
      Parameters:
      value - The constant value that the descriptor should allow.
      Returns:
      A descriptor builder for a string value that only admits a constant instance.
    • floating

      default IFloatValueDescriptor floating()
      Returns:
      A descriptor for a floating point value that defaults to 0. The description uses the default i18n key determined from the root class and the path to this property.
    • floating

      default IFloatValueDescriptor floating(double defaultValue)
      Parameters:
      defaultValue - The default value for the floating point property, used when no other value is supplied.
      Returns:
      A descriptor for a floating point value that defaults to the given value. The description uses the default i18n key determined from the root class and the path to this property.
    • floating

      @Deprecated default IFloatValueDescriptor floating(double defaultValue, String descriptionI18n)
      Parameters:
      defaultValue - The default value for the floating point property, used when no other value is supplied.
      descriptionI18n - The i18n key to use for the description of the floating point property.
      Returns:
      A descriptor for a floating point value that defaults to the given value and uses the given description.
    • floatingBuilder

      IFloatValueDescriptorBuilder floatingBuilder()
      Returns:
      A descriptor builder for a floating point value.
    • integer

      default IIntegerValueDescriptor integer()
      Returns:
      A descriptor for an integer value that defaults to 0. The description uses the default i18n key determined from the root class and the path to this property.
    • integer

      default IIntegerValueDescriptor integer(long defaultValue)
      Parameters:
      defaultValue - The default value for the integer property, used when no other value is supplied.
      Returns:
      A descriptor for an integer value that defaults to the given value. The description uses the default i18n key determined from the root class and the path to this property.
    • integer

      @Deprecated default IIntegerValueDescriptor integer(long defaultValue, String descriptionI18n)
      Parameters:
      defaultValue - The default value for the integer property, used when no other value is supplied.
      descriptionI18n - The i18n key to use for the description of the integer property.
      Returns:
      A descriptor for an integer value that defaults to the given value and uses the given description.
    • integerBuilder

      Returns:
      A descriptor builder for an integer value.
    • intersect

      IValueDescriptor<?,?> intersect(IValueDescriptor<?,?> first, IValueDescriptor<?,?> second)
      Intersects two value descriptors with each other. The intersection is the value descriptor that is compatible with both given descriptors, i.e. let c be intersect(first, second), then for all values v:
      c.acceptsValue(v) <=> first.acceptsValue(v) & second.acceptsValue(v)
      
      If the descriptors are incompatible with each other, IVoidValueDescriptor is returned, which does not accept any values.

      When there are conflicts, the default value and the attributes of the second descriptor are used. Disregarding the default value and the attributes, this is a symmetric operation, i.e.

      intersect(a,b) = intersect(b,a)
      For example:
      intersect(null, void) = void
      intersect(string, string) = string
      intersect(string, boolean) = void
      intersect(string, null) = void
      intersect(string, void) = void
      intersect(string, "foo") = "foo"
      intersect(string, "foo" | "bar") = "foo"
      
      intersect(float, float) = float
      intersect(float, integer) = integer
      intersect(float[1,6], float[3,8]) = float[3,6]
      intersect(float[1,6), float(3,8]) = float(3,6)
      intersect(integer[1,6], integer[3,8]) = integer[3,6]
      
      // A union with a single string
      intersect(string, string | boolean) = string
      intersect(float | string | boolean, boolean | string) = string
      
      intersect(List[string], List[number]) = void
      intersect(List[string], List[string | number]) = List[string]
      
      intersect([string, string], List[string]) = [string, string]
      intersect([string, number], List[string]) = void
      
      intersect(Map[string], Map[number]) = void
      intersect(Map[string], Map[string]) = Map[string]
      intersect(Map[string|number], Map[string|number]) = Map[string]
      
      intersect({a=string|boolean,b=number}, Map[string|number]) = {a=string,b=number}
      intersect({a:string,b:number}, Map[string]) = void
      
      intersect({a:string}, {b:string}) = void
      intersect({a:string, b?:string}, {b:string}) = void
      intersect({a:string, b?:string}, {a?:string, b:string}) = {a:string, b:string}
      intersect({a:string, b:number}, {a:string, b:string}) = void
      intersect({type:"foo" | "bar"}, {type:"foo"}) = {type:"foo"}
      intersect(
        {type:"number", value:number} | {type:"string", value:string, optional?:boolean},
        {type:"string", value:string}
      ) = {type:"string", value:string}
      
      Parameters:
      first - A descriptor to intersect with the other.
      second - A descriptor to intersect with the other.
      Returns:
      The intersection of the two given value descriptors. If either is null, the other is returned. If both are null, voidish() is returned.
      Since:
      8.1.0
    • intersectAll

      IValueDescriptor<?,?> intersectAll(Iterable<? extends IValueDescriptor<?,?>> descriptors)
      Intersects all value descriptors, returning a descriptor that represents their intersection. If no descriptors are given, returns any(). See intersect(first, second) for more details on the intersection of two value descriptors. This is a convenience method that is functionally equivalent to:
      var result = any();
      for (var descriptor : descriptors) {
        result = result.intersect(descriptor);
      }
      return result;
      
      Parameters:
      descriptors - Value descriptors to intersect.
      Returns:
      The intersected value descriptor.
      Since:
      8.5.0
      See Also:
    • intersectDescriptorMap

      Map<String, IValueDescriptor<?,?>> intersectDescriptorMap(Map<String, IValueDescriptor<?,?>> first, Map<String, IValueDescriptor<?,?>> second)
      Intersects two maps of value descriptors with each other. The intersection is the map that contains only those entries that are present in both maps, and where the value descriptors are intersected using intersect(first, second). If the descriptors are incompatible with each other, the entry is omitted from the result.
      Parameters:
      first - The first map of descriptors.
      second - The second map of descriptors.
      Returns:
      The intersection of the two given maps of value descriptors.
      Since:
      8.5.0
    • largeString

      default ILargeStringValueDescriptor largeString()
      Returns:
      A descriptor for a large string value that defaults to the empty string. The description uses the default i18n key determined from the root class and the path to this property.
    • largeString

      default ILargeStringValueDescriptor largeString(LargeString defaultValue)
      Parameters:
      defaultValue - The default value for the string property, used when no other value is supplied.
      Returns:
      A descriptor for a large string value that defaults to the given value. The description uses the default i18n key determined from the root class and the path to this property.
    • largeString

      @Deprecated default ILargeStringValueDescriptor largeString(LargeString defaultValue, String descriptionI18n)
      Parameters:
      defaultValue - The default value for the string property, used when no other value is supplied.
      descriptionI18n - The i18n key to use for the description of the string property.
      Returns:
      A descriptor for a large string value that defaults to the given value and uses the given description.
    • largeStringBuilder

      Returns:
      A descriptor builder for a large string value.
    • list

      default <V> IListValueDescriptor<V> list(IValueDescriptor<V, ? extends IValueBuilder<V>> descriptor)
      Type Parameters:
      V - Type of the elements contained in the list.
      Parameters:
      descriptor - Descriptor for the elements contained in the list.
      Returns:
      A descriptor for a list value (List<V>) that defaults to an empty list and may contain any number of elements.
    • list

      default IListValueDescriptor<?> list(IValueDescriptorCreator elementType)
      Parameters:
      elementType - Creates the descriptor for the type of the list elements.
      Returns:
      A descriptor for a list value (List<V>) that defaults to an empty list and may contain any number of elements.
    • listBuilder

      <V> IListValueDescriptorBuilder<V> listBuilder(IValueDescriptor<V, ? extends IValueBuilder<V>> descriptor)
      Type Parameters:
      V - Type of the elements contained in the list.
      Parameters:
      descriptor - Descriptor for the elements contained in the list.
      Returns:
      A descriptor builder for a list value (List<V>).
    • listBuilder

      Parameters:
      elementType - Creates the descriptor for the type of the list elements.
      Returns:
      A descriptor builder for a list value (List<V>).
    • listOfLargeStrings

      default IListValueDescriptor<LargeString> listOfLargeStrings()
      Returns:
      A descriptor builder for a value of type List<LargeString>. The description uses the default i18n key determined from the root class and the path to this property.
    • listOfLargeStrings

      @Deprecated default IListValueDescriptor<LargeString> listOfLargeStrings(String descriptionI18n)
      Parameters:
      descriptionI18n - The i18n key to use for the description of the list-valued property.
      Returns:
      A descriptor builder for a value of type List<LargeString>.
    • listOfStrings

      default IListValueDescriptor<String> listOfStrings()
      Returns:
      A descriptor builder for a value of type List<String>. The description uses the default i18n key determined from the root class and the path to this property.
    • listOfStrings

      @Deprecated default IListValueDescriptor<String> listOfStrings(String descriptionI18n)
      Parameters:
      descriptionI18n - The i18n key to use for the description of the list-valued property.
      Returns:
      A descriptor builder for a value of type List<String>.
    • map

      default <V> IMapValueDescriptor<V> map(IValueDescriptor<V, ? extends IValueBuilder<V>> descriptor)
      Type Parameters:
      V - Type of the mapped values.
      Parameters:
      descriptor - Descriptor for the type of the mapped values.
      Returns:
      A descriptor for a map value (Map<String, V>) that defaults to an empty map.
    • map

      default IMapValueDescriptor<?> map(IValueDescriptorCreator elementType)
      Parameters:
      elementType - Creates the descriptor for the type of the mapped values.
      Returns:
      A descriptor for a map value (Map<String, V>) that defaults to an empty map.
    • mapBuilder

      <V> IMapValueDescriptorBuilder<V> mapBuilder(IValueDescriptor<V, ? extends IValueBuilder<V>> descriptor)
      Type Parameters:
      V - Type of the mapped values.
      Parameters:
      descriptor - Descriptor for the type of the mapped values.
      Returns:
      A descriptor builder for a map value (Map<String, V>).
    • mapBuilder

      Parameters:
      elementType - Creates the descriptor for the type of the mapped values.
      Returns:
      A descriptor builder for a map value (Map<String, V>).
    • mapToLargeStrings

      default IMapValueDescriptor<LargeString> mapToLargeStrings()
      Returns:
      A descriptor builder for a value of type Map<String, LargeString>. The description uses the default i18n key determined from the root class and the path to this property.
    • mapToLargeStrings

      @Deprecated default IMapValueDescriptor<LargeString> mapToLargeStrings(String descriptionI18n)
      Parameters:
      descriptionI18n - The i18n key to use for the description of the map-valued property.
      Returns:
      A descriptor builder for a value of type Map<String, LargeString>.
    • mapToStrings

      default IMapValueDescriptor<String> mapToStrings()
      Returns:
      A descriptor builder for a value of type Map<String, String>. The description uses the default i18n key determined from the root class and the path to this property.
    • mapToStrings

      @Deprecated default IMapValueDescriptor<String> mapToStrings(String descriptionI18n)
      Parameters:
      descriptionI18n - The i18n key to use for the description of the map-valued property.
      Returns:
      A descriptor builder for a value of type Map<String, String>.
    • normalizeUnion

      IValueDescriptor<?,?> normalizeUnion(IUnionValueDescriptor descriptor)
      Normalizes a union value descriptor by removing duplicate types, flattening nested unions, and merging types that can be merged (e.g. integer and float become float). If a union only has a single member after normalization, that type is returned instead of a union. If a union has no members after normalization, void is returned.
      Parameters:
      descriptor - The union descriptor to normalize.
      Returns:
      A normalized union descriptor.
      Since:
      8.5.0
    • nullish

      default INullValueDescriptor nullish()
      Returns:
      A descriptor for a value that can only be null.
    • nullish

      @Deprecated default INullValueDescriptor nullish(String descriptionI18n)
      Parameters:
      descriptionI18n - The i18n key to use for the description of the map-valued property.
      Returns:
      A descriptor for a value that can only be null.
    • nullishBuilder

      INullValueDescriptorBuilder nullishBuilder()
      Returns:
      A descriptor builder for a value that can only be null.
    • record

      default IRecordValueDescriptor record()
      Returns:
      A descriptor for an empty record value.
    • recordBuilder

      Returns:
      A descriptor builder for a record value.
    • requiredString

      default IStringValueDescriptor requiredString()
      Gets a string descriptor for a string value that must have a length of at least one and defaults to " ".
      Returns:
      A descriptor for a string value that defaults to the empty string.
    • requiredString

      default IStringValueDescriptor requiredString(String defaultValue)
      Parameters:
      defaultValue - The default value for the string property, used when no other value is supplied.
      Returns:
      A descriptor for a string value that defaults to the given value and must have a length of at least 1.
    • requiredStringBuilder

      default IStringValueDescriptorBuilder requiredStringBuilder()
      Creates a new builder for a string and sets it up so the string is required, i.e. must have a length of at least 1.
      Returns:
      A descriptor builder for a required string value.
    • string

      default IStringValueDescriptor string()
      Gets a string descriptor that defaults to the empty string.
      Returns:
      A descriptor for a string value that defaults to the empty string.
    • string

      default IStringValueDescriptor string(String defaultValue)
      Parameters:
      defaultValue - The default value for the string property, used when no other value is supplied.
      Returns:
      A descriptor for a string value that defaults to the given value.
    • string

      @Deprecated default IStringValueDescriptor string(String defaultValue, String descriptionI18n)
      Parameters:
      defaultValue - The default value for the string property, used when no other value is supplied.
      descriptionI18n - The i18n key to use for the description of the string property.
      Returns:
      A descriptor for a string value that defaults to the given value and uses the given description.
    • stringBuilder

      Returns:
      A descriptor builder for a string value.
    • tuple

      default ITupleValueDescriptor tuple()
      Creates an empty tuple descriptor.
      Returns:
      A descriptor for a tuple value that has a fixed length and where each element may have a different type. Each tuple element defaults to the default value of the given descriptor.
    • tuple

      default ITupleValueDescriptor tuple(IValueDescriptor<?, ? extends IValueBuilder<?>>... types)
      Parameters:
      types - Descriptor for each element in the tuple.
      Returns:
      A descriptor for a tuple value that has a fixed length and where each element may have a different type. Each tuple element defaults to the default value of the given descriptor.
    • tuple

      Parameters:
      types - Creates the descriptor for each element in the tuple.
      Returns:
      A descriptor for a tuple value that has a fixed length and where each element may have a different type. Each tuple element defaults to the default value of the given descriptor.
    • tupleBuilder

      Returns:
      A descriptor builder for a tuple value with a fixed length and where each element has the same type. Each tuple element defaults to the default value of the given descriptor.
    • tupleOfSame

      default <V> ITupleValueDescriptor tupleOfSame(int count, IValueDescriptor<V, ? extends IValueBuilder<V>> type)
      Type Parameters:
      V - Common type of the tuple elements.
      Parameters:
      count - Number of elements in the tuple.
      type - Descriptor for each element in the tuple.
      Returns:
      A descriptor for a tuple value of the given length and where each element has the same type. Each tuple element defaults to the default value of the given descriptor.
    • tupleOfSame

      default ITupleValueDescriptor tupleOfSame(int count, IValueDescriptorCreator creator)
      Parameters:
      count - Number of elements in the tuple.
      creator - Creates the descriptor for each element in the tuple.
      Returns:
      A descriptor for a tuple value of the given length and where each element has the same type. Each tuple element defaults to the default value of the given descriptor.
    • unionBuilder

      @Deprecated default IUnionValueDescriptorBuilder unionBuilder(Class<?> ignoredDiscriminatorClass)
      Deprecated.
      Use unionBuilder() instead.
      Creates a new union descriptor builder.
      Parameters:
      ignoredDiscriminatorClass - Unused.
      Returns:
      A descriptor builder for a union value that uses instances of the given type as discriminators.
    • unionBuilder

      Creates a new union descriptor builder.
      Returns:
      A descriptor builder for a union value that uses instances of the given type as discriminators.
    • unionEmpty

      default IUnionValueDescriptor unionEmpty()
      Returns:
      An empty union type, the same as nullish().
    • unionEnumBuilder

      @Deprecated default IUnionValueDescriptorBuilder unionEnumBuilder(Class<?> ignoredDiscriminatorClass)
      Deprecated.
      Use unionBuilder() instead.
      Parameters:
      ignoredDiscriminatorClass - Unused.
      Returns:
      A descriptor builder for a union value that uses enum constants of the given type as discriminators.
    • unionOfEnumConst

      @Deprecated default IUnionValueDescriptor unionOfEnumConst(Class<? extends Enum<?>> enumClass)
      Deprecated.
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      Returns:
      A descriptor for a union value that consists of all enum constants. Uses the enum constants as the discriminator.
    • unionOfEnumConst

      @Deprecated default <E extends Enum<E>> IUnionValueDescriptor unionOfEnumConst(Class<E> enumClass, E defaultValue)
      Deprecated.
      Type Parameters:
      E - Type of the enum constants that are put in a union.
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      defaultValue - Default value of the union.
      Returns:
      A descriptor for a union value that consists of all enum constants. Uses the enum constants as the discriminator.
    • unionOfEnumConstBuilder

      @Deprecated default IUnionValueDescriptorBuilder unionOfEnumConstBuilder(Class<? extends Enum<?>> enumClass)
      Deprecated.
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      Returns:
      A descriptor builder for a union value that consists of all enum constants. Uses the enum constants as the discriminator.
    • unionOfEnumConstBuilder

      @Deprecated default <E extends Enum<E>> IUnionValueDescriptorBuilder unionOfEnumConstBuilder(Class<E> enumClass, E defaultValue)
      Deprecated.
      Type Parameters:
      E - Type of the enum constants that are put in a union.
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      defaultValue - Default value of the union.
      Returns:
      A descriptor builder for a union value that consists of all enum constants. Uses the enum constants as the discriminator.
    • unionOfStringConst

      default IUnionValueDescriptor unionOfStringConst(Class<? extends Enum<?>> enumClass)
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      Returns:
      A descriptor for a union value that consists of all enum constants names. Uses the enum constants names as the discriminator.
    • unionOfStringConst

      default <E extends Enum<E>> IUnionValueDescriptor unionOfStringConst(Class<E> enumClass, E defaultValue)
      Type Parameters:
      E - Type of the enum constants that are put in a union.
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      defaultValue - Default value of the union.
      Returns:
      A descriptor for a union value that consists of all enum constants names. Uses the enum constants names as the discriminator.
    • unionOfStringConst

      default IUnionValueDescriptor unionOfStringConst(String first, String... moreStrings)
      Parameters:
      first - First string in the union. This is also the default value.
      moreStrings - More strings in the union.
      Returns:
      A value descriptor that represents the algebraic sum type "string1" | "string2" | "string3" | ....
    • unionOfStringConstBuilder

      default IUnionValueDescriptorBuilder unionOfStringConstBuilder(Class<? extends Enum<?>> enumClass)
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      Returns:
      A descriptor builder for a union value that consists of all enum constants names. Uses the enum constants names as the discriminator.
    • unionOfStringConstBuilder

      default <E extends Enum<E>> IUnionValueDescriptorBuilder unionOfStringConstBuilder(Class<E> enumClass, E defaultValue)
      Type Parameters:
      E - Type of the enum constants that are put in a union.
      Parameters:
      enumClass - Class of the enum constants that are put in a union.
      defaultValue - Default value of the union.
      Returns:
      A descriptor builder for a union value that consists of all enum constants names. Uses the enum constants names as the discriminator.
    • unionOfStringConstBuilder

      default IUnionValueDescriptorBuilder unionOfStringConstBuilder(String first, String... moreStrings)
      Parameters:
      first - First string in the union. This is also the default value.
      moreStrings - More strings in the union.
      Returns:
      A value descriptor builder that represents the algebraic sum type "string1" | "string2" | "string3" | ....
    • unionStringBuilder

      @Deprecated default IUnionValueDescriptorBuilder unionStringBuilder()
      Deprecated.
      Use unionBuilder() instead.
      Returns:
      A descriptor builder for a union value that uses string constants as discriminators.
    • unionWithNull

      default IUnionValueDescriptor unionWithNull(IValueDescriptor<?,?> valueDescriptor)
      Creates a union value descriptor with two members, one being null and the other being the given descriptor. The discriminator type is String, with the discriminator value being "null" for null and "value" for the other member.

      This can be used e.g. to create optional values, e.g. integer | null.

      Parameters:
      valueDescriptor - Descriptor for the non-null member of the union.
      Returns:
      A descriptor for a union value that is either null or a value that is accepted by the given descriptor.
    • unionWithNullBuilder

      default IUnionValueDescriptorBuilder unionWithNullBuilder(IValueDescriptor<?,?> valueDescriptor)
      Creates a union value descriptor builder set up with two members, one being null and the other being the given descriptor.

      This can be used e.g. to create optional values, e.g. integer | null.

      Parameters:
      valueDescriptor - Descriptor for the non-null member of the union.
      Returns:
      A descriptor for a union value that is either null or a value that is accepted by the given descriptor.
    • voidish

      Returns:
      A value descriptor for a void result. This is valid only as a root value for the return value of a method.