Skip to main content

Default Values

Null Default

When the smithy.api#default trait annotating a shape contains a null value, and the shape is not additionally annotated explicitly as nullable, Smithy4s will (where possible) assume a "zero value" as the default. For example:

structure Test {
@default // same thing as @default(null)
one: String
}

Here the default for the field one will be assumed to be an empty string (""). Below is a table showing what all the zero values are for each different Smithy shape type:

Smithy TypeZero Value
blobArray.empty
booleanfalse
string""
byte0
short0
integer0
long0
float0
double0
bigInteger0
bigDecimal0
timestamp0 epoch (01 Jan 1970)
documentDocument.DNull
enumN/A
intEnumN/A
listList.empty
mapMap.empty
structureN/A
unionN/A
serviceN/A
operationN/A
resourceN/A

Not every shape type has a corresponding zero value. For example, there is no reasonable zero value for a structure or a union type. As such, they will not have a zero value set even if they are marked with a null default trait.

Decoding and defaults

The following table shows different scenarios for decoding of a structure named Foo with a single field s. The type of the field will differ depending on the scenario. However, the input for each scenario is the same: an empty JSON Object ({}). We are using JSON to show this behavior (based on the smithy4s json module), but the same is true of how smithy4s decodes Document with Document.DObject(Map.empty) as an input.

RequiredNullableNull DefaultScala RepresentationInput: {}
falsetruetrueFoo(s: Nullable[String])Foo(Null)
falsetruefalseFoo(s: Option[Nullable[String]])Foo(None)
falsefalsetrueFoo(s: String)Foo("")
falsefalsefalseFoo(s: Option[String])Foo(None)
truefalsefalseFoo(s: String)Missing required field error
truefalsetrueFoo(s: String)Foo("")
truetruefalseFoo(s: Nullable[String])Missing required field error
truetruetrueFoo(s: Nullable[String])Foo(Null)

Key for Table Above

  • Required - True if the field is required, false if not (using smithy.api#required trait)
  • Nullable - True if the field is nullable, false if not (using alloy#nullable trait)
  • Null Default - True if the field has a default value of null, false if it has no default (using smithy.api#default trait)
  • Scala Representation - Shows what type is generated for this schema by smithy4s
  • Input: {} - Shows the result of what smithy4s will return when decoding the input of an empty JSON object ({})