[swift-evolution] Add transformers to Codable

Charlie Monroe charlie at charliemonroe.net
Mon Dec 18 22:18:05 CST 2017


For me definitely +1 as it's getting near to what I need to call the Decoding usable.

> On Dec 18, 2017, at 5:51 PM, Arsen Gasparyan via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Hello everyone,
> 
> I’m suggesting to add a new way to encode/decode JSON properties for relevantly complex data formats such as regular expressions, well-known text, hex colours, custom date formats.
> 
> The problem:
> 
> Image you have a struct called House
> 
> struct House {
>     let color: UIColor
> }
> 
> and it has a properly called color and the color represented in JSON as hex value (#ffffff). Currently to make it working you have to extract the underline value (string with a hex value) and then try to make a UIColor from it. It works but it makes you to copy/past a lot of code and it leads to problems. Also it shifts focus from what to decode to how to decode.
> 
> The suggested solution:
> 
> I suggest that we have to introduce protocols for classes that will encapsulate transformation from a source data type to a destination data type. The source data types are all existing data that support of decoding. 
> 
> We will provide only protocols (one for decoding and one for encoding) and users will be able to create transformers for their own data types.
> 
> The implementation:
> 
> The implementation is fairly easy. We only need introduce two protocols (encoding/decoding) and add a method to KeyedEncodingContainerProtocol that will accept a key and a transformer. In the method we will extract source data from JSON and then will ask the transformer to try to convert it to the desire data type.
> 
> Example of the decoding protocol:
> 
> protocol DecodingTransformer {
>     associatedtype Input: Decodable
>     associatedtype Output
>     func transform(_ decoded: Input) throws -> Output
> }
> 
> 
> Inspired by: https://github.com/Hearst-DD/ObjectMapper#custom-transforms <https://github.com/Hearst-DD/ObjectMapper#custom-transforms>
> 
> Cheers,
> Arsen
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171219/c6ac908f/attachment.html>


More information about the swift-evolution mailing list