- Full support for Swift 6's Strict concurrency checking
- New
@ISO8601Coding
Property Wrappers usingDate.ISO8601FormatStyle
to fully supportSendable
- Updating Manifest to avoid versioning issues for Swift and SwiftSyntax
-
@ISO8601DateCoding
and@ISO8601DateFormatterCoding
and related Types are deprecated due toISO8601DateFormatter
not being Thread Safe.Generally any current usage should work fine as-is, but it may be removed in a future major release.
CodingKey macro support! Customized CodingKeys can now be generated with annotation!
- Deprectated symbols from 2.0 have been removed
-
@CustomCodable()
Macro to customize Codable -
CustomCodingKey(_:)
-
CodingKeyPrefix(_:)
-
CodingKeySuffix(_:)
-
CamelCase()
-
FlatCase()
-
PascalCase()
-
UpperCase()
-
SnakeCase()
-
CamelSnakeCase()
-
PascalSnakeCase()
-
ScreamingSnakeCase()
-
KebabCase()
-
CamelKebabCase()
-
PascalKebabCase()
-
ScreamingKebabCase()
See documentation for more details.
The major goal for this release is to reduce API surface level by unifying Property variation, make the abstractions more meaningful, and add a couple useful wrappers.
- Wrappers are now Mutable by default.
@Immutable
can be composed in front of a wrapper if a property is meant to be immutable. Types this replaces are marked as deprecated with renaming/fixits where possible. - Wrappers can now be made Optional by including it in the Type
@OptionalCoding
. e.g.OptionalCoding<Base64Coding>
. Types this replaces are marked as deprecated with renaming/fixits where possible.
@Immutable
: wrapper for simple composition of mutability@OptionalCoding<CodingWrapper>
: Unified composition of Optionality.@TransientCoding
: Handles (en/de)coding at current level of nestingprotocol TransientCodable
: ImplementsCodable
for the adhering Type and handles (en/de)coding at the current level of nesting.@FallbackEncoding<FallbackValueProvider>
: A Wrapper that will encode a fallback value when nil. e.g.@FallbackEncoding<EmptyString>
@FallbackDecoding<FallbackValueProvider>
: A Wrapper that will decode a fallback value when nil. e.g.@FallbackDecoding<EmptyString>
@FallbackCoding<FallbackValueProvider>
: A combination of the above two. e.g.@FallbackCoding<EmptyString>
FallbackValueProvider
: A Protocol to provide a value. Implementations included for typical Empty Types (.e.gEmptyString
)@EncodeNulls
: Encodes anil
value with an Encoder'ssingleValueContainer.encodeNil()
, so e.g. in JSON;"key": null
@Lossy(Array/Dictionary/Set)Decoding
: Filters any nil items from the collectionEmptyBool
EmptyString
EmptyInt
EmptyInt16
EmptyInt32
EmptyInt64
EmptyInt8
EmptyUInt
EmptyUInt16
EmptyUInt32
EmptyUInt64
EmptyUInt8
EmptyCGFloat
EmptyDouble
EmptyFloat
EmptyFloat16
EmptyArray
EmptyDictionary
EmptySet
EncodingUsesMutable
: Wrappers are now mutable by default
DecodingUsesMutable
: Wrappers are now mutable by default
CodingUsesMutable
: Wrappers are now mutable by default
EncodingUsesMutable
: Wrappers are now mutable by default
DecodingUsesMutable
: Wrappers are now mutable by default
EncodingUsesMutable
: Wrappers are now mutable by default
DecodingUsesMutable
: Wrappers are now mutable by default
CodingUsesMutable
: Wrappers are now mutable by default
DecodingUsesMutable
: Wrappers are now mutable by default
EncodingUsesMutable
: Wrappers are now mutable by default
CodingUsesMutable
: Wrappers are now mutable by default
OptionalStaticCoder
: Use @OptionalCoding<YourWrapperType>
instead
OptionalBase64DataStaticCoder
: Use @OptionalCoding<Base64DataCoding>
instead
OptionalNonConformingBoolStaticCoderOptionalStaticCoder
: Use @OptionalCoding<NonConformingBoolCoding<ValueProvider>>
instead
OptionalSecondsSince1970DateStaticCoder
: Use @OptionalCoding<SecondsSince1970DateCoding>
instead
OptionalMillisecondsSince1970DateStaticCoder
: Use @OptionalCoding<MillisecondsSince1970DateCoding>
instead
OptionalISO8601DateStaticCoder
: Use @OptionalCoding<ISO8601DateCoding>
instead
OptionalNonConformingDoubleStaticCoderOptionalStaticCoder
: Use @OptionalCoding<NonConformingDoubleCoding<ValueProvider>>
instead
OptionalNonConformingFloatStaticCoderOptionalStaticCoder
: Use @OptionalCoding<NonConformingFloatCoding<ValueProvider>>
instead
NonConformingFloatOptionalCoding
: Use OptionalCoding<NonConformingFloatEncoding>
instead
NonConformingFloatEncodingMutable
: renamed NonConformingFloatEncoding
NonConformingFloatDecodingMutable
: renamed NonConformingFloatDecoding
NonConformingFloatCodingMutable
: renamed NonConformingFloatCoding
NonConformingFloatOptionalCodingMutable
: Use OptionalCoding<NonConformingFloatCoding<ValueProvider>>
instead
NonConformingDoubleOptionalCoding
: Use OptionalCoding<NonConformingDoubleCoding<ValueProvider>>
instead
NonConformingDoubleEncodingMutable
: renamed: NonConformingDoubleEncoding
NonConformingDoubleDecodingMutable
: renamed: NonConformingDoubleDecoding
NonConformingDoubleCodingMutable
: renamed: NonConformingDoubleCoding
NonConformingDoubleOptionalCodingMutable
: Use OptionalCoding<NonConformingDoubleCoding<ValueProvider>>
instead
Base64OptionalCoding
: Use OptionalCoding<Base64Encoding>
instead
Base64EncodingMutable
: renamed: Base64Encoding
Base64DecodingMutable
: renamed: Base64Decoding
Base64CodingMutable
: renamed: Base64Coding
Base64OptionalCodingMutable
: Use OptionalCoding<Base64Encoding>
instead
MillisecondsSince1970DateOptionalCoding
: Use OptionalCoding<MillisecondsSince1970DateCoding>
instead
MillisecondsSince1970DateEncodingMutable
: renamed: MillisecondsSince1970DateEncoding
MillisecondsSince1970DateDecodingMutable
: renamed: MillisecondsSince1970DateDecoding
MillisecondsSince1970DateCodingMutable
: renamed: MillisecondsSince1970DateCoding
MillisecondsSince1970DateOptionalCodingMutable
: Use OptionalCoding<MillisecondsSince1970DateCoding>
instead
SecondsSince1970DateOptionalCoding
: Use OptionalCoding<SecondsSince1970DateCoding>
instead
SecondsSince1970DateEncodingMutable
: renamed: SecondsSince1970DateEncoding
SecondsSince1970DateDecodingMutable
: renamed: SecondsSince1970DateDecoding
SecondsSince1970DateCodingMutable
: renamed: SecondsSince1970DateCoding
SecondsSince1970DateOptionalCodingMutable
: Use OptionalCoding<SecondsSince1970DateCoding>
instead
ISO8601DateOptionalCoding
: Use OptionalCoding<ISO8601DateCoding>
instead
ISO8601DateEncodingMutable
: renamed: SecondsSince1970DateCoding
ISO8601DateDecodingMutable
: renamed: SecondsSince1970DateCoding
ISO8601DateCodingMutable
: renamed: SecondsSince1970DateCoding
ISO8601DateOptionalCodingMutable
: Use OptionalCoding<ISO8601DateCoding>
instead
ISO8601DateFormatterOptionalCoding
: Use OptionalCoding<ISO8601DateFormatterCoding<CustomCoder>>
instead
ISO8601DateFormatterEncodingMutable
: renamed: ISO8601DateFormatterEncoding
ISO8601DateFormatterDecodingMutable
: renamed: ISO8601DateFormatterDecoding
ISO8601DateFormatterCodingMutable
: renamed: ISO8601DateFormatterCoding
ISO8601DateFormatterOptionalCodingMutable
: Use OptionalCoding<ISO8601DateFormatterCoding<CustomCoder>>
instead
DateFormatterOptionalCoding
: Use OptionalCoding<DateFormatterCoding<CustomCoder>>
instead
DateFormatterEncodingMutable
: renamed: DateFormatterEncoding
DateFormatterDecodingMutable
: renamed: DateFormatterDecoding
DateFormatterCodingMutable
: renamed: DateFormatterCoding
DateFormatterOptionalCodingMutable
: Use OptionalCoding<DateFormatterCoding<CustomCoder>>
instead
NonConformingBoolOptionalCoding
: Use OptionalCoding<NonConformingBoolCoding<ValueProvider>>
instead
NonConformingBoolEncodingMutable
: renamed: NonConformingBoolEncoding
NonConformingBoolDecodingMutable
: renamed: NonConformingBoolDecoding
NonConformingBoolCodingMutable
: renamed: NonConformingBoolCoding
NonConformingBoolOptionalCodingMutable
: Use OptionalCoding<NonConformingBoolCoding<ValueProvider>>
instead
BoolAsIntegerOptionalCoding
: Use OptionalCoding<BoolAsIntegerCoding<ValueType>>
instead
BoolAsIntegerEncodingMutable
: renamed: BoolAsIntegerEncoding
BoolFromIntegerDecodingMutable
: renamed: BoolFromIntegerDecoding
BoolAsIntegerCodingMutable
: renamed: BoolAsIntegerCoding
BoolAsIntegerOptionalCodingMutable
: Use OptionalCoding<BoolAsIntegerCoding<ValueType>>
instead
BoolAsIntOptionalCoding
: Use OptionalCoding<BoolAsIntCoding>
instead
BoolAsIntEncodingMutable
: renamed: BoolAsIntEncoding
BoolFromIntDecodingMutable
: renamed: BoolFromIntDecoding
BoolAsIntCodingMutable
: renamed: BoolAsIntCoding
BoolAsIntOptionalCodingMutable
: Use OptionalCoding<BoolAsIntCoding>
instead
BoolAsStringOptionalCoding
: Use OptionalCoding<BoolAsStringCoding>
instead
BoolAsStringEncodingMutable
: renamed: BoolAsStringEncoding
BoolFromStringDecodingMutable
: renamed: BoolFromStringDecoding
BoolAsStringCodingMutable
: renamed: BoolAsStringCoding
BoolAsStringOptionalCodingMutable
: Use OptionalCoding<BoolAsStringCoding>
instead
Bool <-> Int
@BoolAsIntEncoding
@BoolFromIntDecoding
@BoolAsIntCoding
@BoolAsIntEncodingMutable
@BoolFromIntDecodingMutable
@BoolAsIntCodingMutable
@BoolAsIntOptionalCodingMutable
Bool <-> String
@BoolAsStringEncoding
@BoolFromStringDecoding
@BoolAsStringCoding
@BoolAsStringOptionalCoding
@BoolAsStringEncodingMutable
@BoolFromStringDecodingMutable
@BoolAsStringCodingMutable
@BoolAsStringOptionalCodingMutable
@NonConformingFloatOptionalCoding
@NonConformingFloatOptionalCodingMutable
@NonConformingDoubleOptionalCoding
@NonConformingDoubleOptionalCodingMutable
@Base64OptionalCoding
@Base64OptionalCodingMutable
@MillisecondsSince1970DateOptionalCoding
@MillisecondsSince1970DateOptionalCodingMutable
@SecondsSince1970DateOptionalCoding
@SecondsSince1970DateOptionalCodingMutable
@ISO8601DateOptionalCoding
@ISO8601DateOptionalCodingMutable
@DateFormatterOptionalCoding
@DateFormatterOptionalCodingMutable
-
ISO8601DateFormatterStaticDecoder
-
ISO8601DateFormatterStaticEncoder
-
ISO8601DateFormatterStaticCoder
-
@ISO8601DateFormatterEncoding
-
@ISO8601DateFormatterDecoding
-
@ISO8601DateFormatterCoding
-
@ISO8601DateFormatterOptionalCoding
-
@ISO8601DateFormatterEncodingMutable
-
@ISO8601DateFormatterDecodingMutable
-
@ISO8601DateFormatterCodingMutable
-
@ISO8601DateFormatterOptionalCodingMutable
@OmitCoding