Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Need to support more Codable types and support PropertyList coders #27

Open
minacle opened this issue Oct 1, 2019 · 1 comment
Open

Comments

@minacle
Copy link
Collaborator

minacle commented Oct 1, 2019

I've checked some structures presented by Foundation framework, and tested them.

There are JSON coders and _PropertyList coders in Foundation framework, so I tested them on JSONEncoder and PropertyListEncoder using this simple script.

And results are below:


  • AnyEncodable<Array<Int>>

    • [JSON] PASS.
    • [PLIST] PASS.
  • Array

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<Calendar>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Calendar

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<CharacterSet>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • CharacterSet

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<Data>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Data

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<Date>

    • [JSON] PASS.
    • [PLIST] ERROR.
  • Date

    • [JSON] PASS.
    • [PLIST] ERROR.

  • AnyEncodable<DateInterval>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • DateInterval

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<NSDecimal>

    • [JSON] PASS.
    • [PLIST] ERROR.
  • NSDecimal

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<Dictionary<String, Int>>

    • [JSON] PASS.
    • [PLIST] PASS.
  • Dictionary<String, Int>

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<IndexPath>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • IndexPath

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<IndexSet>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • IndexSet

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<Locale>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Locale

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<Set<Int>>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Set<Int>

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<String>

    • [JSON] PASS.
    • [PLIST] ERROR.
  • String

    • [JSON] PASS.
    • [PLIST] ERROR.

  • AnyEncodable<TimeZone>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • TimeZone

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<URL>

    • [JSON] PASS.
    • [PLIST] PASS.
  • URL

    • [JSON] PASS.
    • [PLIST] PASS.

  • AnyEncodable<UUID>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • UUID

    • [JSON] PASS.
    • [PLIST] ERROR.

According to results, AnyCodable doesn't cover some major types, and it doesn't support PropertyList coders completely.

@cheungbo-mong
Copy link

I've checked some structures presented by Foundation framework, and tested them.

There are JSON coders and _PropertyList coders in Foundation framework, so I tested them on JSONEncoder and PropertyListEncoder using this simple script.

And results are below:

  • AnyEncodable<Array>

    • [JSON] PASS.
    • [PLIST] PASS.
  • Array

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Calendar

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • CharacterSet

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Data

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] PASS.
    • [PLIST] ERROR.
  • Date

    • [JSON] PASS.
    • [PLIST] ERROR.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • DateInterval

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] PASS.
    • [PLIST] ERROR.
  • NSDecimal

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable<Dictionary<String, Int>>

    • [JSON] PASS.
    • [PLIST] PASS.
  • Dictionary<String, Int>

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • IndexPath

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • IndexSet

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Locale

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable<Set>

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • Set

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] PASS.
    • [PLIST] ERROR.
  • String

    • [JSON] PASS.
    • [PLIST] ERROR.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • TimeZone

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] PASS.
    • [PLIST] PASS.
  • URL

    • [JSON] PASS.
    • [PLIST] PASS.
  • AnyEncodable

    • [JSON] ERROR.
    • [PLIST] ERROR.
  • UUID

    • [JSON] PASS.
    • [PLIST] ERROR.

According to results, AnyCodable doesn't cover some major types, and it doesn't support PropertyList coders completely.

Thanks for you types.

I re-implemented it to support "exact type", which is that types like UInt won't be implicitly coerced.

Already passed the test using the types you mentioned above, except Calendar and Local. Somehow, even after encoding and decoding using JSONEncoder and JSONDecoder, the result is still not equatable. Any there will be a crash if Calendar and Locale are both supported at the same time. Still needs further researches.

You can check it out here.

There are huge changes, so I didn't prepare to pr.😶

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants