- Full support for Swift 6's Strict concurrency checking
- New
@ISO8601CodingProperty Wrappers usingDate.ISO8601FormatStyleto fully supportSendable
- Updating Manifest to avoid versioning issues for Swift and SwiftSyntax
-
@ISO8601DateCodingand@ISO8601DateFormatterCodingand related Types are deprecated due toISO8601DateFormatternot 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.
@Immutablecan 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: ImplementsCodablefor 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 anilvalue with an Encoder'ssingleValueContainer.encodeNil(), so e.g. in JSON;"key": null@Lossy(Array/Dictionary/Set)Decoding: Filters any nil items from the collectionEmptyBoolEmptyStringEmptyIntEmptyInt16EmptyInt32EmptyInt64EmptyInt8EmptyUIntEmptyUInt16EmptyUInt32EmptyUInt64EmptyUInt8EmptyCGFloatEmptyDoubleEmptyFloatEmptyFloat16EmptyArrayEmptyDictionaryEmptySet
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