{"action":"created","comment":{"url":"https://api.github.com/repos/AVSystem/scala-commons/pulls/comments/202326754","pull_request_review_id":137007209,"id":202326754,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMjMyNjc1NA==","diff_hunk":"@@ -0,0 +1,11 @@\n+package com.avsystem.commons\n+package jiop\n+\n+import java.time.Instant\n+\n+import com.avsystem.commons.misc.TimestampConversions\n+\n+trait JavaTimeInterop {\n+  implicit def instantTimestampConversions(instant: Instant): TimestampConversions =","path":"commons-core/jvm/src/main/scala/com/avsystem/commons/jiop/JavaTimeInterop.scala","position":9,"original_position":9,"commit_id":"3b6b5c0e882429b591836e38b7ddca9aa43800ce","original_commit_id":"3b6b5c0e882429b591836e38b7ddca9aa43800ce","user":{"login":"ghik","id":1022675,"node_id":"MDQ6VXNlcjEwMjI2NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/1022675?v=4","gravatar_id":"","url":"https://api.github.com/users/ghik","html_url":"https://github.com/ghik","followers_url":"https://api.github.com/users/ghik/followers","following_url":"https://api.github.com/users/ghik/following{/other_user}","gists_url":"https://api.github.com/users/ghik/gists{/gist_id}","starred_url":"https://api.github.com/users/ghik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ghik/subscriptions","organizations_url":"https://api.github.com/users/ghik/orgs","repos_url":"https://api.github.com/users/ghik/repos","events_url":"https://api.github.com/users/ghik/events{/privacy}","received_events_url":"https://api.github.com/users/ghik/received_events","type":"User","site_admin":false},"body":"It's already in `JBasicUtils` because `JDate` is available also in ScalaJS while `JavaTimeInterop` is JVM only.","created_at":"2018-07-13T11:58:01Z","updated_at":"2018-07-13T11:58:01Z","html_url":"https://github.com/AVSystem/scala-commons/pull/74#discussion_r202326754","pull_request_url":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/AVSystem/scala-commons/pulls/comments/202326754"},"html":{"href":"https://github.com/AVSystem/scala-commons/pull/74#discussion_r202326754"},"pull_request":{"href":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74"}},"in_reply_to_id":202250055},"pull_request":{"url":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74","id":200186465,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwMTg2NDY1","html_url":"https://github.com/AVSystem/scala-commons/pull/74","diff_url":"https://github.com/AVSystem/scala-commons/pull/74.diff","patch_url":"https://github.com/AVSystem/scala-commons/pull/74.patch","issue_url":"https://api.github.com/repos/AVSystem/scala-commons/issues/74","number":74,"state":"open","locked":false,"title":"Input/Output refactor, breaking changes","user":{"login":"ghik","id":1022675,"node_id":"MDQ6VXNlcjEwMjI2NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/1022675?v=4","gravatar_id":"","url":"https://api.github.com/users/ghik","html_url":"https://github.com/ghik","followers_url":"https://api.github.com/users/ghik/followers","following_url":"https://api.github.com/users/ghik/following{/other_user}","gists_url":"https://api.github.com/users/ghik/gists{/gist_id}","starred_url":"https://api.github.com/users/ghik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ghik/subscriptions","organizations_url":"https://api.github.com/users/ghik/orgs","repos_url":"https://api.github.com/users/ghik/repos","events_url":"https://api.github.com/users/ghik/events{/privacy}","received_events_url":"https://api.github.com/users/ghik/received_events","type":"User","site_admin":false},"body":"This PR contains some controversial, breaking but IMHO necessary changes in serialization framework:\r\n\r\n* `InputType` has been dropped. \r\n\r\nIt was used only to check if `Input` contains `null` so it was replaced by simple `isNull` method. This change is primarily motivated by the fact that some \"simple\" types may need to use array/object encoding, e.g. https://github.com/AVSystem/scala-commons/issues/64 - this way array/object values would not be properly distinguishable from \"simple\" values and `inputType` method would have to lie in some way.\r\n\r\n* `GenCodec` for `Option` **has been changed** to use unwrapped encoding with `null` representing `None`.\r\n\r\nMy original motivation for using list-based encoding was to be able to express `null` and `Some(null)` values for `Option`. It was additionally supported by an assumption that we don't care too much about serialized format as long as deserializes properly. This is no longer true as `GenCodec` is now being used for various purposes and may affect the way our OSS is used outside the company (e.g. through Udash).\r\n\r\nCurrently, the only way to ensure unwrapped encoding of optional values is to use `Opt`/`OptArg` which I definitely don't want to impose on people using our libraries. For this reason I see no other choice but to introduce this breaking change and somehow manage the breakage in our own use cases which primarily involve serialization to MongoDB. Therefore, I left an ugly backdoor that `Input` and `Output` implementations may use to retain the previous encoding of `Option` for compatibility purposes - see `LegacyOptionEncodingInput`/`LegacyOptionEncodingOutput`.\r\n\r\n* Introduced `JsonOptions` for better control of output format of `JsonStringOutput` (timestamp format, binary data format, etc.). See documentation of `JsonOptions` for more details.\r\n\r\nThe main breaking changes in JSON serialization is that timestamps are now by default serialized as ISO formatted strings, e.g. `\"2010-04-10T08:50:41.262Z\"` and byte arrays are serialized as actual JSON (signed) byte arrays instead of hex strings. This of course can be adjusted in `JsonOptions` to use previous format.\r\n\r\n* Introduced general purpose `Timestamp` type that serves as a minimal, **platform-independent** representation of UTC based instant.","created_at":"2018-07-09T18:44:49Z","updated_at":"2018-07-13T11:58:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"67f03ff46d84a5a4ecbb976b5514a0b21d3a42e5","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mkej","id":8829798,"node_id":"MDQ6VXNlcjg4Mjk3OTg=","avatar_url":"https://avatars0.githubusercontent.com/u/8829798?v=4","gravatar_id":"","url":"https://api.github.com/users/mkej","html_url":"https://github.com/mkej","followers_url":"https://api.github.com/users/mkej/followers","following_url":"https://api.github.com/users/mkej/following{/other_user}","gists_url":"https://api.github.com/users/mkej/gists{/gist_id}","starred_url":"https://api.github.com/users/mkej/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkej/subscriptions","organizations_url":"https://api.github.com/users/mkej/orgs","repos_url":"https://api.github.com/users/mkej/repos","events_url":"https://api.github.com/users/mkej/events{/privacy}","received_events_url":"https://api.github.com/users/mkej/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74/commits","review_comments_url":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74/comments","review_comment_url":"https://api.github.com/repos/AVSystem/scala-commons/pulls/comments{/number}","comments_url":"https://api.github.com/repos/AVSystem/scala-commons/issues/74/comments","statuses_url":"https://api.github.com/repos/AVSystem/scala-commons/statuses/3b6b5c0e882429b591836e38b7ddca9aa43800ce","head":{"label":"AVSystem:io-refactor","ref":"io-refactor","sha":"3b6b5c0e882429b591836e38b7ddca9aa43800ce","user":{"login":"AVSystem","id":5795681,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU3OTU2ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/5795681?v=4","gravatar_id":"","url":"https://api.github.com/users/AVSystem","html_url":"https://github.com/AVSystem","followers_url":"https://api.github.com/users/AVSystem/followers","following_url":"https://api.github.com/users/AVSystem/following{/other_user}","gists_url":"https://api.github.com/users/AVSystem/gists{/gist_id}","starred_url":"https://api.github.com/users/AVSystem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AVSystem/subscriptions","organizations_url":"https://api.github.com/users/AVSystem/orgs","repos_url":"https://api.github.com/users/AVSystem/repos","events_url":"https://api.github.com/users/AVSystem/events{/privacy}","received_events_url":"https://api.github.com/users/AVSystem/received_events","type":"Organization","site_admin":false},"repo":{"id":52271346,"node_id":"MDEwOlJlcG9zaXRvcnk1MjI3MTM0Ng==","name":"scala-commons","full_name":"AVSystem/scala-commons","owner":{"login":"AVSystem","id":5795681,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU3OTU2ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/5795681?v=4","gravatar_id":"","url":"https://api.github.com/users/AVSystem","html_url":"https://github.com/AVSystem","followers_url":"https://api.github.com/users/AVSystem/followers","following_url":"https://api.github.com/users/AVSystem/following{/other_user}","gists_url":"https://api.github.com/users/AVSystem/gists{/gist_id}","starred_url":"https://api.github.com/users/AVSystem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AVSystem/subscriptions","organizations_url":"https://api.github.com/users/AVSystem/orgs","repos_url":"https://api.github.com/users/AVSystem/repos","events_url":"https://api.github.com/users/AVSystem/events{/privacy}","received_events_url":"https://api.github.com/users/AVSystem/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/AVSystem/scala-commons","description":"AVSystem commons library for Scala","fork":false,"url":"https://api.github.com/repos/AVSystem/scala-commons","forks_url":"https://api.github.com/repos/AVSystem/scala-commons/forks","keys_url":"https://api.github.com/repos/AVSystem/scala-commons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AVSystem/scala-commons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AVSystem/scala-commons/teams","hooks_url":"https://api.github.com/repos/AVSystem/scala-commons/hooks","issue_events_url":"https://api.github.com/repos/AVSystem/scala-commons/issues/events{/number}","events_url":"https://api.github.com/repos/AVSystem/scala-commons/events","assignees_url":"https://api.github.com/repos/AVSystem/scala-commons/assignees{/user}","branches_url":"https://api.github.com/repos/AVSystem/scala-commons/branches{/branch}","tags_url":"https://api.github.com/repos/AVSystem/scala-commons/tags","blobs_url":"https://api.github.com/repos/AVSystem/scala-commons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AVSystem/scala-commons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AVSystem/scala-commons/git/refs{/sha}","trees_url":"https://api.github.com/repos/AVSystem/scala-commons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AVSystem/scala-commons/statuses/{sha}","languages_url":"https://api.github.com/repos/AVSystem/scala-commons/languages","stargazers_url":"https://api.github.com/repos/AVSystem/scala-commons/stargazers","contributors_url":"https://api.github.com/repos/AVSystem/scala-commons/contributors","subscribers_url":"https://api.github.com/repos/AVSystem/scala-commons/subscribers","subscription_url":"https://api.github.com/repos/AVSystem/scala-commons/subscription","commits_url":"https://api.github.com/repos/AVSystem/scala-commons/commits{/sha}","git_commits_url":"https://api.github.com/repos/AVSystem/scala-commons/git/commits{/sha}","comments_url":"https://api.github.com/repos/AVSystem/scala-commons/comments{/number}","issue_comment_url":"https://api.github.com/repos/AVSystem/scala-commons/issues/comments{/number}","contents_url":"https://api.github.com/repos/AVSystem/scala-commons/contents/{+path}","compare_url":"https://api.github.com/repos/AVSystem/scala-commons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AVSystem/scala-commons/merges","archive_url":"https://api.github.com/repos/AVSystem/scala-commons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AVSystem/scala-commons/downloads","issues_url":"https://api.github.com/repos/AVSystem/scala-commons/issues{/number}","pulls_url":"https://api.github.com/repos/AVSystem/scala-commons/pulls{/number}","milestones_url":"https://api.github.com/repos/AVSystem/scala-commons/milestones{/number}","notifications_url":"https://api.github.com/repos/AVSystem/scala-commons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AVSystem/scala-commons/labels{/name}","releases_url":"https://api.github.com/repos/AVSystem/scala-commons/releases{/id}","deployments_url":"https://api.github.com/repos/AVSystem/scala-commons/deployments","created_at":"2016-02-22T12:17:48Z","updated_at":"2018-07-13T11:52:40Z","pushed_at":"2018-07-13T11:52:38Z","git_url":"git://github.com/AVSystem/scala-commons.git","ssh_url":"git@github.com:AVSystem/scala-commons.git","clone_url":"https://github.com/AVSystem/scala-commons.git","svn_url":"https://github.com/AVSystem/scala-commons","homepage":"http://www.avsystem.com","size":11030,"stargazers_count":49,"watchers_count":49,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":13,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":13,"open_issues":6,"watchers":49,"default_branch":"master"}},"base":{"label":"AVSystem:master","ref":"master","sha":"d4993715cfe5d01e4db1ee5147bd0af7a7725837","user":{"login":"AVSystem","id":5795681,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU3OTU2ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/5795681?v=4","gravatar_id":"","url":"https://api.github.com/users/AVSystem","html_url":"https://github.com/AVSystem","followers_url":"https://api.github.com/users/AVSystem/followers","following_url":"https://api.github.com/users/AVSystem/following{/other_user}","gists_url":"https://api.github.com/users/AVSystem/gists{/gist_id}","starred_url":"https://api.github.com/users/AVSystem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AVSystem/subscriptions","organizations_url":"https://api.github.com/users/AVSystem/orgs","repos_url":"https://api.github.com/users/AVSystem/repos","events_url":"https://api.github.com/users/AVSystem/events{/privacy}","received_events_url":"https://api.github.com/users/AVSystem/received_events","type":"Organization","site_admin":false},"repo":{"id":52271346,"node_id":"MDEwOlJlcG9zaXRvcnk1MjI3MTM0Ng==","name":"scala-commons","full_name":"AVSystem/scala-commons","owner":{"login":"AVSystem","id":5795681,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU3OTU2ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/5795681?v=4","gravatar_id":"","url":"https://api.github.com/users/AVSystem","html_url":"https://github.com/AVSystem","followers_url":"https://api.github.com/users/AVSystem/followers","following_url":"https://api.github.com/users/AVSystem/following{/other_user}","gists_url":"https://api.github.com/users/AVSystem/gists{/gist_id}","starred_url":"https://api.github.com/users/AVSystem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AVSystem/subscriptions","organizations_url":"https://api.github.com/users/AVSystem/orgs","repos_url":"https://api.github.com/users/AVSystem/repos","events_url":"https://api.github.com/users/AVSystem/events{/privacy}","received_events_url":"https://api.github.com/users/AVSystem/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/AVSystem/scala-commons","description":"AVSystem commons library for Scala","fork":false,"url":"https://api.github.com/repos/AVSystem/scala-commons","forks_url":"https://api.github.com/repos/AVSystem/scala-commons/forks","keys_url":"https://api.github.com/repos/AVSystem/scala-commons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AVSystem/scala-commons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AVSystem/scala-commons/teams","hooks_url":"https://api.github.com/repos/AVSystem/scala-commons/hooks","issue_events_url":"https://api.github.com/repos/AVSystem/scala-commons/issues/events{/number}","events_url":"https://api.github.com/repos/AVSystem/scala-commons/events","assignees_url":"https://api.github.com/repos/AVSystem/scala-commons/assignees{/user}","branches_url":"https://api.github.com/repos/AVSystem/scala-commons/branches{/branch}","tags_url":"https://api.github.com/repos/AVSystem/scala-commons/tags","blobs_url":"https://api.github.com/repos/AVSystem/scala-commons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AVSystem/scala-commons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AVSystem/scala-commons/git/refs{/sha}","trees_url":"https://api.github.com/repos/AVSystem/scala-commons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AVSystem/scala-commons/statuses/{sha}","languages_url":"https://api.github.com/repos/AVSystem/scala-commons/languages","stargazers_url":"https://api.github.com/repos/AVSystem/scala-commons/stargazers","contributors_url":"https://api.github.com/repos/AVSystem/scala-commons/contributors","subscribers_url":"https://api.github.com/repos/AVSystem/scala-commons/subscribers","subscription_url":"https://api.github.com/repos/AVSystem/scala-commons/subscription","commits_url":"https://api.github.com/repos/AVSystem/scala-commons/commits{/sha}","git_commits_url":"https://api.github.com/repos/AVSystem/scala-commons/git/commits{/sha}","comments_url":"https://api.github.com/repos/AVSystem/scala-commons/comments{/number}","issue_comment_url":"https://api.github.com/repos/AVSystem/scala-commons/issues/comments{/number}","contents_url":"https://api.github.com/repos/AVSystem/scala-commons/contents/{+path}","compare_url":"https://api.github.com/repos/AVSystem/scala-commons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AVSystem/scala-commons/merges","archive_url":"https://api.github.com/repos/AVSystem/scala-commons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AVSystem/scala-commons/downloads","issues_url":"https://api.github.com/repos/AVSystem/scala-commons/issues{/number}","pulls_url":"https://api.github.com/repos/AVSystem/scala-commons/pulls{/number}","milestones_url":"https://api.github.com/repos/AVSystem/scala-commons/milestones{/number}","notifications_url":"https://api.github.com/repos/AVSystem/scala-commons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AVSystem/scala-commons/labels{/name}","releases_url":"https://api.github.com/repos/AVSystem/scala-commons/releases{/id}","deployments_url":"https://api.github.com/repos/AVSystem/scala-commons/deployments","created_at":"2016-02-22T12:17:48Z","updated_at":"2018-07-13T11:52:40Z","pushed_at":"2018-07-13T11:52:38Z","git_url":"git://github.com/AVSystem/scala-commons.git","ssh_url":"git@github.com:AVSystem/scala-commons.git","clone_url":"https://github.com/AVSystem/scala-commons.git","svn_url":"https://github.com/AVSystem/scala-commons","homepage":"http://www.avsystem.com","size":11030,"stargazers_count":49,"watchers_count":49,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":13,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":13,"open_issues":6,"watchers":49,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74"},"html":{"href":"https://github.com/AVSystem/scala-commons/pull/74"},"issue":{"href":"https://api.github.com/repos/AVSystem/scala-commons/issues/74"},"comments":{"href":"https://api.github.com/repos/AVSystem/scala-commons/issues/74/comments"},"review_comments":{"href":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74/comments"},"review_comment":{"href":"https://api.github.com/repos/AVSystem/scala-commons/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/AVSystem/scala-commons/pulls/74/commits"},"statuses":{"href":"https://api.github.com/repos/AVSystem/scala-commons/statuses/3b6b5c0e882429b591836e38b7ddca9aa43800ce"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"ghik"}}