Re: [swift-evolution] Add transformers to Codable

2017-12-19 Thread Tony Parker via swift-evolution
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 
>  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 (#ff). 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 
> 
> 
> 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


Re: [swift-evolution] Add transformers to Codable

2017-12-19 Thread Goffredo Marocchi via swift-evolution
+1 this is missing functionality at the moment and what still puts tools like 
Mantle ahead.

Sent from my iPhone

> On 19 Dec 2017, at 04:18, Charlie Monroe via swift-evolution 
>  wrote:
> 
> 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 
>>  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 (#ff). 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
>> 
>> 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
___
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


Re: [swift-evolution] Add transformers to Codable

2017-12-18 Thread Charlie Monroe via swift-evolution
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 
>  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 (#ff). 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 
> 
> 
> 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