{"action":"created","comment":{"url":"https://api.github.com/repos/fluencelabs/codec/pulls/comments/195085918","pull_request_review_id":128381582,"id":195085918,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NTA4NTkxOA==","diff_hunk":"@@ -0,0 +1,122 @@\n+package fluence.codec.examples\n+\n+import cats.Id\n+import cats.data.EitherT\n+import cats.implicits._\n+import fluence.codec.{CodecError, PureCodec}\n+import fluence.codec.PureCodec.Bijection\n+import fluence.codec.PureCodec.Point\n+\n+import scala.util.Try\n+\n+object PureCodecExample {\n+  def main(args: Array[String]): Unit = {\n+    // Here we are defining a simple codec transforming a string to integer and back.\n+    //\n+    // It's not really a bijection: even not taking into account unparseable strings like \"test\", there are\n+    // different string values (e.g., \"+20\" and \"20\") producing the same integer value. It's good enough for\n+    // demonstration purposes though, so we keep using it.\n+    val str2intCodec: Bijection[String, Int] = PureCodec.build[String, Int](\n+      (x: String) => x.toInt,\n+      (x: Int) => x.toString\n+    )\n+\n+\n+    // Using an identity monad, we can parse a valid string into integer (which produces EitherT) and then map\n+    // the result. Now, we can use EitherT[F, E, B] or convert it into F[Either[E, B]] representation.\n+    {\n+      val res: EitherT[Id, CodecError, Int] = str2intCodec.direct[Id](\"31330\").map(_ + 7)\n+      val resMonad: Id[Either[CodecError, Int]] = res.value\n+      assert(res.toString == \"EitherT(Right(31337))\")\n+      assert(resMonad.toString == \"Right(31337)\")\n+    }\n+\n+\n+    // We can also supply a different type class (Monad[F[_]]) – in this case the result will be wrapped into\n+    // the corresponding type F[_] using the `F.pure(_)` method.\n+    {\n+      val res = str2intCodec.direct[Option](\"42\")\n+      val resMonad = res.value\n+      assert(res.toString == \"EitherT(Some(Right(42)))\")\n+      assert(resMonad.toString == \"Some(Right(42))\")\n+    }\n+\n+\n+    // Here we attempt to pass an unparseable string value. Note that PureCodec won't catch a thrown exception\n+    // automatically despite that return type is EitherT (this might be a bit confusing). Instead, the exception\n+    // will come all the way up to the caller, which will have to handle it manually.\n+    {\n+      val resWrapped = Try {\n+        val res: EitherT[Id, CodecError, Int] = str2intCodec.direct[Id](\"foo\")\n+        res\n+      }\n+      assert(resWrapped.toString == \"Failure(java.lang.NumberFormatException: For input string: \\\"foo\\\")\")\n+    }\n+\n+\n+    // To handle exceptions automatically, we can use Try monad. Note that we get `EitherT(Failure(...))`, not\n+    // `EitherT(Failure(Right(...)))` as one might expect by analogy with previous examples. It's not\n+    // `EitherT(Left(...))` too which could have been more convenient potentially.\n+    {\n+      val res = str2intCodec.direct[Try](\"foo\")\n+      val resMonad: Try[Either[CodecError, Int]] = res.value\n+      assert(res.toString == \"EitherT(Failure(java.lang.NumberFormatException: For input string: \\\"foo\\\"))\")\n+      assert(resMonad.toString == \"Failure(java.lang.NumberFormatException: For input string: \\\"foo\\\")\")\n+    }\n+\n+\n+    // If we really want to receive Left with the exception info when the string argument can't be parsed, a little\n+    // more effort is needed. The problem we had before was that the supplied function `(x: String) => x.toInt`\n+    // could throw parse exceptions and therefore was not really pure.\n+    //\n+    // However, we can catch exceptions in this function and return an Either, which will make it pure. Now, all we\n+    // need to do is to lift this function into the Func context.\n+    val str2intEitherCodec: Bijection[String, Int] = PureCodec.build(\n+      PureCodec.liftFuncEither((x: String) => Either.catchNonFatal(x.toInt).left.map(e => CodecError(e.getMessage))),\n+      PureCodec.liftFuncEither((x: Int) => Either.catchNonFatal(x.toString).left.map(e => CodecError(e.getMessage)))\n+    )\n+\n+\n+    // For lawful strings – those which can be parsed into an integer the behavior hasn't really changed.\n+    // Note that we receive Right(...) wrapped in the supplied monadic type.\n+    {\n+      val res: EitherT[Option, CodecError, Int] = str2intEitherCodec.direct[Option](\"1024\")\n+      val resMonad = res.value\n+      assert(res.toString == \"EitherT(Some(Right(1024)))\")\n+      assert(resMonad.toString == \"Some(Right(1024))\")\n+    }\n+\n+\n+    // However, for strings that can't be parsed, we will receive Left(...) – which is a desired behavior!\n+    {\n+      val res: EitherT[Option, CodecError, Int] = str2intEitherCodec.direct[Option](\"bar\")\n+      val resMonad = res.value\n+      assert(res.toString == \"EitherT(Some(Left(fluence.codec.CodecError: For input string: \\\"bar\\\")))\")\n+      assert(resMonad.toString == \"Some(Left(fluence.codec.CodecError: For input string: \\\"bar\\\"))\")\n+    }\n+\n+\n+    // It's also totally possible to perform an inverse transformation: after all, a codec is a bijection.\n+    {\n+      val res: EitherT[Id, CodecError, String] = str2intCodec.inverse[Id](720)\n+      val resMonad: Id[Either[CodecError, String]] = res.value\n+      assert(res.toString == \"EitherT(Right(720))\")\n+      assert(resMonad.toString == \"Right(720)\")\n+    }\n+\n+\n+    // It's also possible to pass the to-be-converted value first, but perform the actual transformation only\n+    // later on (using different enclosing monads if desired). To achieve this, `pointAt` method which returns a\n+    // lazily evaluated function can be used.\n+    {\n+      val point: Point[Int] = str2intCodec.direct.pointAt(\"333\")\n+      val resId: EitherT[Id, CodecError, Int] = point[Id]()\n+      val resOption: EitherT[Option, CodecError, Int] = point[Option]()\n+      assert(resId.toString == \"EitherT(Right(333))\")\n+      assert(resOption.toString == \"EitherT(Some(Right(333)))\")\n+    }\n+\n+\n+    // TODO: describe `runF` and `toKleisli`","path":"examples/src/main/scala/fluence/codec/examples/PureCodecExample.scala","position":120,"original_position":120,"commit_id":"e4ab5f147f4a5d5e398b8a4abd94061f9e5ee52b","original_commit_id":"e4ab5f147f4a5d5e398b8a4abd94061f9e5ee52b","user":{"login":"xdralex","id":1021271,"node_id":"MDQ6VXNlcjEwMjEyNzE=","avatar_url":"https://avatars2.githubusercontent.com/u/1021271?v=4","gravatar_id":"","url":"https://api.github.com/users/xdralex","html_url":"https://github.com/xdralex","followers_url":"https://api.github.com/users/xdralex/followers","following_url":"https://api.github.com/users/xdralex/following{/other_user}","gists_url":"https://api.github.com/users/xdralex/gists{/gist_id}","starred_url":"https://api.github.com/users/xdralex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xdralex/subscriptions","organizations_url":"https://api.github.com/users/xdralex/orgs","repos_url":"https://api.github.com/users/xdralex/repos","events_url":"https://api.github.com/users/xdralex/events{/privacy}","received_events_url":"https://api.github.com/users/xdralex/received_events","type":"User","site_admin":false},"body":"Actually, it seems that `runF` example noted on the readme page is off. When I've tried to use `runF` accordingly to it, the compilation error has occurred. The code was:\r\n```\r\nval x = str2intCodec.direct.runF[Id](\"foo\")\r\nprintln(x)\r\n```\r\n\r\nThe error was:\r\n```\r\n[error] /Users/xdralex/Work/fluence/codec/examples/src/main/scala/fluence/codec/examples/PureCodecExample.scala:55:41: could not find implicit value for parameter F: cats.MonadError[cats.Id, _ >: fluence.codec.CodecError]\r\n[error]     val x = str2intCodec.direct.runF[Id](\"foo\")\r\n[error]                                         ^\r\n[error] one error found\r\n```","created_at":"2018-06-13T13:43:10Z","updated_at":"2018-06-13T13:43:10Z","html_url":"https://github.com/fluencelabs/codec/pull/9#discussion_r195085918","pull_request_url":"https://api.github.com/repos/fluencelabs/codec/pulls/9","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/fluencelabs/codec/pulls/comments/195085918"},"html":{"href":"https://github.com/fluencelabs/codec/pull/9#discussion_r195085918"},"pull_request":{"href":"https://api.github.com/repos/fluencelabs/codec/pulls/9"}}},"pull_request":{"url":"https://api.github.com/repos/fluencelabs/codec/pulls/9","id":194548407,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk0NTQ4NDA3","html_url":"https://github.com/fluencelabs/codec/pull/9","diff_url":"https://github.com/fluencelabs/codec/pull/9.diff","patch_url":"https://github.com/fluencelabs/codec/pull/9.patch","issue_url":"https://api.github.com/repos/fluencelabs/codec/issues/9","number":9,"state":"open","locked":false,"title":"[WIP] Added PureCodec examples","user":{"login":"xdralex","id":1021271,"node_id":"MDQ6VXNlcjEwMjEyNzE=","avatar_url":"https://avatars2.githubusercontent.com/u/1021271?v=4","gravatar_id":"","url":"https://api.github.com/users/xdralex","html_url":"https://github.com/xdralex","followers_url":"https://api.github.com/users/xdralex/followers","following_url":"https://api.github.com/users/xdralex/following{/other_user}","gists_url":"https://api.github.com/users/xdralex/gists{/gist_id}","starred_url":"https://api.github.com/users/xdralex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xdralex/subscriptions","organizations_url":"https://api.github.com/users/xdralex/orgs","repos_url":"https://api.github.com/users/xdralex/repos","events_url":"https://api.github.com/users/xdralex/events{/privacy}","received_events_url":"https://api.github.com/users/xdralex/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-06-13T11:02:19Z","updated_at":"2018-06-13T13:43:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f84e994431f89b1d3481604f9a582f2d155edfa8","assignee":null,"assignees":[],"requested_reviewers":[{"login":"alari","id":683668,"node_id":"MDQ6VXNlcjY4MzY2OA==","avatar_url":"https://avatars1.githubusercontent.com/u/683668?v=4","gravatar_id":"","url":"https://api.github.com/users/alari","html_url":"https://github.com/alari","followers_url":"https://api.github.com/users/alari/followers","following_url":"https://api.github.com/users/alari/following{/other_user}","gists_url":"https://api.github.com/users/alari/gists{/gist_id}","starred_url":"https://api.github.com/users/alari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alari/subscriptions","organizations_url":"https://api.github.com/users/alari/orgs","repos_url":"https://api.github.com/users/alari/repos","events_url":"https://api.github.com/users/alari/events{/privacy}","received_events_url":"https://api.github.com/users/alari/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/fluencelabs/codec/pulls/9/commits","review_comments_url":"https://api.github.com/repos/fluencelabs/codec/pulls/9/comments","review_comment_url":"https://api.github.com/repos/fluencelabs/codec/pulls/comments{/number}","comments_url":"https://api.github.com/repos/fluencelabs/codec/issues/9/comments","statuses_url":"https://api.github.com/repos/fluencelabs/codec/statuses/e4ab5f147f4a5d5e398b8a4abd94061f9e5ee52b","head":{"label":"fluencelabs:examples","ref":"examples","sha":"e4ab5f147f4a5d5e398b8a4abd94061f9e5ee52b","user":{"login":"fluencelabs","id":30414417,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwNDE0NDE3","avatar_url":"https://avatars1.githubusercontent.com/u/30414417?v=4","gravatar_id":"","url":"https://api.github.com/users/fluencelabs","html_url":"https://github.com/fluencelabs","followers_url":"https://api.github.com/users/fluencelabs/followers","following_url":"https://api.github.com/users/fluencelabs/following{/other_user}","gists_url":"https://api.github.com/users/fluencelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/fluencelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fluencelabs/subscriptions","organizations_url":"https://api.github.com/users/fluencelabs/orgs","repos_url":"https://api.github.com/users/fluencelabs/repos","events_url":"https://api.github.com/users/fluencelabs/events{/privacy}","received_events_url":"https://api.github.com/users/fluencelabs/received_events","type":"Organization","site_admin":false},"repo":{"id":128778314,"node_id":"MDEwOlJlcG9zaXRvcnkxMjg3NzgzMTQ=","name":"codec","full_name":"fluencelabs/codec","owner":{"login":"fluencelabs","id":30414417,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwNDE0NDE3","avatar_url":"https://avatars1.githubusercontent.com/u/30414417?v=4","gravatar_id":"","url":"https://api.github.com/users/fluencelabs","html_url":"https://github.com/fluencelabs","followers_url":"https://api.github.com/users/fluencelabs/followers","following_url":"https://api.github.com/users/fluencelabs/following{/other_user}","gists_url":"https://api.github.com/users/fluencelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/fluencelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fluencelabs/subscriptions","organizations_url":"https://api.github.com/users/fluencelabs/orgs","repos_url":"https://api.github.com/users/fluencelabs/repos","events_url":"https://api.github.com/users/fluencelabs/events{/privacy}","received_events_url":"https://api.github.com/users/fluencelabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/fluencelabs/codec","description":"Pure bijection-like codecs library","fork":false,"url":"https://api.github.com/repos/fluencelabs/codec","forks_url":"https://api.github.com/repos/fluencelabs/codec/forks","keys_url":"https://api.github.com/repos/fluencelabs/codec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fluencelabs/codec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fluencelabs/codec/teams","hooks_url":"https://api.github.com/repos/fluencelabs/codec/hooks","issue_events_url":"https://api.github.com/repos/fluencelabs/codec/issues/events{/number}","events_url":"https://api.github.com/repos/fluencelabs/codec/events","assignees_url":"https://api.github.com/repos/fluencelabs/codec/assignees{/user}","branches_url":"https://api.github.com/repos/fluencelabs/codec/branches{/branch}","tags_url":"https://api.github.com/repos/fluencelabs/codec/tags","blobs_url":"https://api.github.com/repos/fluencelabs/codec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fluencelabs/codec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fluencelabs/codec/git/refs{/sha}","trees_url":"https://api.github.com/repos/fluencelabs/codec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fluencelabs/codec/statuses/{sha}","languages_url":"https://api.github.com/repos/fluencelabs/codec/languages","stargazers_url":"https://api.github.com/repos/fluencelabs/codec/stargazers","contributors_url":"https://api.github.com/repos/fluencelabs/codec/contributors","subscribers_url":"https://api.github.com/repos/fluencelabs/codec/subscribers","subscription_url":"https://api.github.com/repos/fluencelabs/codec/subscription","commits_url":"https://api.github.com/repos/fluencelabs/codec/commits{/sha}","git_commits_url":"https://api.github.com/repos/fluencelabs/codec/git/commits{/sha}","comments_url":"https://api.github.com/repos/fluencelabs/codec/comments{/number}","issue_comment_url":"https://api.github.com/repos/fluencelabs/codec/issues/comments{/number}","contents_url":"https://api.github.com/repos/fluencelabs/codec/contents/{+path}","compare_url":"https://api.github.com/repos/fluencelabs/codec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fluencelabs/codec/merges","archive_url":"https://api.github.com/repos/fluencelabs/codec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fluencelabs/codec/downloads","issues_url":"https://api.github.com/repos/fluencelabs/codec/issues{/number}","pulls_url":"https://api.github.com/repos/fluencelabs/codec/pulls{/number}","milestones_url":"https://api.github.com/repos/fluencelabs/codec/milestones{/number}","notifications_url":"https://api.github.com/repos/fluencelabs/codec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fluencelabs/codec/labels{/name}","releases_url":"https://api.github.com/repos/fluencelabs/codec/releases{/id}","deployments_url":"https://api.github.com/repos/fluencelabs/codec/deployments","created_at":"2018-04-09T13:42:31Z","updated_at":"2018-06-13T13:23:54Z","pushed_at":"2018-06-13T13:21:19Z","git_url":"git://github.com/fluencelabs/codec.git","ssh_url":"git@github.com:fluencelabs/codec.git","clone_url":"https://github.com/fluencelabs/codec.git","svn_url":"https://github.com/fluencelabs/codec","homepage":null,"size":73,"stargazers_count":6,"watchers_count":6,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1,"open_issues":5,"watchers":6,"default_branch":"master"}},"base":{"label":"fluencelabs:master","ref":"master","sha":"6efaac148b8d2bc39bc7480861876ca62523d97f","user":{"login":"fluencelabs","id":30414417,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwNDE0NDE3","avatar_url":"https://avatars1.githubusercontent.com/u/30414417?v=4","gravatar_id":"","url":"https://api.github.com/users/fluencelabs","html_url":"https://github.com/fluencelabs","followers_url":"https://api.github.com/users/fluencelabs/followers","following_url":"https://api.github.com/users/fluencelabs/following{/other_user}","gists_url":"https://api.github.com/users/fluencelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/fluencelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fluencelabs/subscriptions","organizations_url":"https://api.github.com/users/fluencelabs/orgs","repos_url":"https://api.github.com/users/fluencelabs/repos","events_url":"https://api.github.com/users/fluencelabs/events{/privacy}","received_events_url":"https://api.github.com/users/fluencelabs/received_events","type":"Organization","site_admin":false},"repo":{"id":128778314,"node_id":"MDEwOlJlcG9zaXRvcnkxMjg3NzgzMTQ=","name":"codec","full_name":"fluencelabs/codec","owner":{"login":"fluencelabs","id":30414417,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwNDE0NDE3","avatar_url":"https://avatars1.githubusercontent.com/u/30414417?v=4","gravatar_id":"","url":"https://api.github.com/users/fluencelabs","html_url":"https://github.com/fluencelabs","followers_url":"https://api.github.com/users/fluencelabs/followers","following_url":"https://api.github.com/users/fluencelabs/following{/other_user}","gists_url":"https://api.github.com/users/fluencelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/fluencelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fluencelabs/subscriptions","organizations_url":"https://api.github.com/users/fluencelabs/orgs","repos_url":"https://api.github.com/users/fluencelabs/repos","events_url":"https://api.github.com/users/fluencelabs/events{/privacy}","received_events_url":"https://api.github.com/users/fluencelabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/fluencelabs/codec","description":"Pure bijection-like codecs library","fork":false,"url":"https://api.github.com/repos/fluencelabs/codec","forks_url":"https://api.github.com/repos/fluencelabs/codec/forks","keys_url":"https://api.github.com/repos/fluencelabs/codec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fluencelabs/codec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fluencelabs/codec/teams","hooks_url":"https://api.github.com/repos/fluencelabs/codec/hooks","issue_events_url":"https://api.github.com/repos/fluencelabs/codec/issues/events{/number}","events_url":"https://api.github.com/repos/fluencelabs/codec/events","assignees_url":"https://api.github.com/repos/fluencelabs/codec/assignees{/user}","branches_url":"https://api.github.com/repos/fluencelabs/codec/branches{/branch}","tags_url":"https://api.github.com/repos/fluencelabs/codec/tags","blobs_url":"https://api.github.com/repos/fluencelabs/codec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fluencelabs/codec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fluencelabs/codec/git/refs{/sha}","trees_url":"https://api.github.com/repos/fluencelabs/codec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fluencelabs/codec/statuses/{sha}","languages_url":"https://api.github.com/repos/fluencelabs/codec/languages","stargazers_url":"https://api.github.com/repos/fluencelabs/codec/stargazers","contributors_url":"https://api.github.com/repos/fluencelabs/codec/contributors","subscribers_url":"https://api.github.com/repos/fluencelabs/codec/subscribers","subscription_url":"https://api.github.com/repos/fluencelabs/codec/subscription","commits_url":"https://api.github.com/repos/fluencelabs/codec/commits{/sha}","git_commits_url":"https://api.github.com/repos/fluencelabs/codec/git/commits{/sha}","comments_url":"https://api.github.com/repos/fluencelabs/codec/comments{/number}","issue_comment_url":"https://api.github.com/repos/fluencelabs/codec/issues/comments{/number}","contents_url":"https://api.github.com/repos/fluencelabs/codec/contents/{+path}","compare_url":"https://api.github.com/repos/fluencelabs/codec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fluencelabs/codec/merges","archive_url":"https://api.github.com/repos/fluencelabs/codec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fluencelabs/codec/downloads","issues_url":"https://api.github.com/repos/fluencelabs/codec/issues{/number}","pulls_url":"https://api.github.com/repos/fluencelabs/codec/pulls{/number}","milestones_url":"https://api.github.com/repos/fluencelabs/codec/milestones{/number}","notifications_url":"https://api.github.com/repos/fluencelabs/codec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fluencelabs/codec/labels{/name}","releases_url":"https://api.github.com/repos/fluencelabs/codec/releases{/id}","deployments_url":"https://api.github.com/repos/fluencelabs/codec/deployments","created_at":"2018-04-09T13:42:31Z","updated_at":"2018-06-13T13:23:54Z","pushed_at":"2018-06-13T13:21:19Z","git_url":"git://github.com/fluencelabs/codec.git","ssh_url":"git@github.com:fluencelabs/codec.git","clone_url":"https://github.com/fluencelabs/codec.git","svn_url":"https://github.com/fluencelabs/codec","homepage":null,"size":73,"stargazers_count":6,"watchers_count":6,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1,"open_issues":5,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/fluencelabs/codec/pulls/9"},"html":{"href":"https://github.com/fluencelabs/codec/pull/9"},"issue":{"href":"https://api.github.com/repos/fluencelabs/codec/issues/9"},"comments":{"href":"https://api.github.com/repos/fluencelabs/codec/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/fluencelabs/codec/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/fluencelabs/codec/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/fluencelabs/codec/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/fluencelabs/codec/statuses/e4ab5f147f4a5d5e398b8a4abd94061f9e5ee52b"}},"author_association":"NONE"}}
{"actor":{"display_login":"xdralex"}}