Hi Arsen,

What’s the difference between providing a method that takes a transformable 
object on the keyed container protocol and just transforming it yourself before 
you encode it?

- Tony

> On Dec 18, 2017, at 8:51 AM, Arsen Gasparyan via swift-evolution 
> <swift-evolution@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@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to