Contents

CodableConfiguration

A property wrapper that makes a type codable, by supplying a configuration that provides additional information for serialization.

Declaration

@propertyWrapper struct CodableConfiguration<T, ConfigurationProvider> where T : DecodableWithConfiguration, T : EncodableWithConfiguration, ConfigurationProvider : DecodingConfigurationProviding, ConfigurationProvider : EncodingConfigurationProviding, T.DecodingConfiguration == ConfigurationProvider.DecodingConfiguration, T.EncodingConfiguration == ConfigurationProvider.EncodingConfiguration

Overview

CodableConfiguration allows you to create Codable types whose members don’t all conform to Codable. For types that can’t support encoding and decoding by themselves but could become encodable and decodable with some statically-defined information, use the @CodableConfiguration wrapper. This lets you assign a configuration provider — a type that conforms to both EncodingConfigurationProviding and DecodingConfigurationProviding — to supply this data.

Limiting the CodableConfiguration to statically-defined information protects clients from loading unexpected data, similar to the protection provided by NSSecureCoding.

In the following example, the Message type uses @CodableConfiguration for an AttributedString property called content. While AttributedString does conform to Codable, it can only encode its known attributes — those declared by the platform SDK — as part of this conformance. By adding a CodableConfiguration for the custom MyAttributes type, Message uses encode(to:configuration:) when encoding content, which preserves the custom attributes.

struct Message: Codable {
    let date: Date
    let sender: Person
    @CodableConfiguration(from: MyAttributes.self) var content = AttributedString()
}

Topics

Creating a Codable Configuration

Accessing the Wrapped Value

See Also

Serializing Arbitrary Payloads