{"action":"created","comment":{"url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments/35927610","id":35927610,"diff_hunk":"@@ -0,0 +1,292 @@\n+/**\n+ * Copyright 2014 Netflix, Inc.\n+ * \n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ * \n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ * \n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package rx.observables;\n+\n+import java.util.concurrent.atomic.AtomicLong;\n+\n+import rx.Observable.OnSubscribe;\n+import rx.Producer;\n+import rx.Subscriber;\n+import rx.Subscription;\n+import rx.annotations.Experimental;\n+import rx.functions.Action0;\n+import rx.functions.Action1;\n+import rx.functions.Action2;\n+import rx.functions.Func0;\n+import rx.functions.Func2;\n+import rx.internal.operators.BackpressureUtils;\n+import rx.subscriptions.Subscriptions;\n+\n+/**\n+ * A utility class to create OnSubscribe functions which manages the back\n+ * pressure concerns that otherwise aren't handled by\n+ * {@link rx.Observable#create(OnSubscribe) Observable.create(OnSubscribe)}.\n+ * Note that the behavior in the {@code next} argument must serialize all calls\n+ * to the downstream subscriber.\n+ *\n+ * @param <S>\n+ *            the type of the user-define state used in {@link #generateState()\n+ *            generateState} , {@link #next(Object, Subscriber) next}, and\n+ *            {@link #onUnsubscribe(Object) onUnsubscribe}.\n+ * @param <T>\n+ *            the type of {@code Subscriber} that will be compatible with this\n+ *            {@code OnSubscribe}.\n+ */\n+@Experimental\n+public abstract class SyncOnSubscribe<S, T> implements OnSubscribe<T> {\n+\tprivate S state;\n+\n+\tprotected S generateState() {\n+\t\treturn null;\n+\t}\n+\n+\tprotected abstract S next(S state, Subscriber<? super T> subscriber);\n+\n+\tprotected void onUnsubscribe(S state) {\n+\n+\t}\n+\n+\t/**\n+\t * Generates a synchronous onSubscribe function that manages back pressure\n+\t * requests.\n+\t * \n+\t * @param generator\n+\t * @param next\n+\t * @param onUnsubscribe\n+\t * @return\n+\t */\n+\t@Experimental\n+\tpublic static <S, T> SyncOnSubscribe<S, T> create(Func0<S> generator,\n+\t\t\tFunc2<? super S, ? super Subscriber<? super T>, ? extends S> next, Action1<? super S> onUnsubscribe) {\n+\t\treturn new LambdaOnSubscribe<S, T>(generator, next, onUnsubscribe);\n+\t}\n+\n+\t/**\n+\t * @param next\n+\t * @return\n+\t */\n+\t@Experimental\n+\tpublic static <T> SyncOnSubscribe<Void, T> create(final Action1<Subscriber<? super T>> next) {\n+\t\tFunc2<Void, Subscriber<? super T>, Void> nextFunc1 = new Func2<Void, Subscriber<? super T>, Void>() {\n+\t\t\t@Override\n+\t\t\tpublic Void call(Void state, Subscriber<? super T> subscriber) {\n+\t\t\t\tnext.call(subscriber);\n+\t\t\t\treturn state;\n+\t\t\t}\n+\t\t};\n+\t\tFunc2<Void, Subscriber<? super T>, Void> nextFunc = nextFunc1;\n+\t\tAction1<Void> onUnsubscribe = new Action1<Void>() {\n+\t\t\t@Override\n+\t\t\tpublic void call(Void t) {\n+\n+\t\t\t}\n+\t\t};\n+\t\tFunc0<Void> generatorFunc = new Func0<Void>() {\n+\t\t\t@Override\n+\t\t\tpublic Void call() {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\t\t};\n+\t\treturn new LambdaOnSubscribe<Void, T>(generatorFunc, nextFunc, onUnsubscribe);\n+\t}\n+\n+\t/**\n+\t * @param generator\n+\t * @param next\n+\t * @return\n+\t */\n+\t@Experimental\n+\tpublic static <S, T> SyncOnSubscribe<S, T> create(Func0<S> generator,\n+\t\t\tfinal Action2<S, Subscriber<? super T>> next) {\n+\t\tFunc2<S, Subscriber<? super T>, S> nextFunc = new Func2<S, Subscriber<? super T>, S>() {\n+\t\t\t@Override\n+\t\t\tpublic S call(S state, Subscriber<? super T> subscriber) {\n+\t\t\t\tnext.call(state, subscriber);\n+\t\t\t\treturn state;\n+\t\t\t}\n+\t\t};\n+\t\tAction1<S> onUnsubscribe = new Action1<S>() {\n+\t\t\t@Override\n+\t\t\tpublic void call(S t) {\n+\n+\t\t\t}\n+\t\t};\n+\t\treturn new LambdaOnSubscribe<S, T>(generator, nextFunc, onUnsubscribe);\n+\t}\n+\n+\t/**\n+\t * @param next\n+\t * @param onUnsubscribe\n+\t * @return\n+\t */\n+\t@Experimental\n+\tpublic static <T> SyncOnSubscribe<Void, T> create(final Action1<Subscriber<? super T>> next,\n+\t\t\tfinal Action0 onUnsubscribe) {\n+\t\tFunc0<Void> generator = new Func0<Void>() {\n+\t\t\t@Override\n+\t\t\tpublic Void call() {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\t\t};\n+\t\tFunc2<Void, Subscriber<? super T>, Void> nextFunc = new Func2<Void, Subscriber<? super T>, Void>() {\n+\t\t\t@Override\n+\t\t\tpublic Void call(Void state, Subscriber<? super T> subscriber) {\n+\t\t\t\tnext.call(subscriber);\n+\t\t\t\treturn null;\n+\t\t\t}\n+\t\t};\n+\t\tAction1<Void> wrappedOnUnsubscribe = new Action1<Void>() {\n+\t\t\t@Override\n+\t\t\tpublic void call(Void t) {\n+\t\t\t\tonUnsubscribe.call();\n+\t\t\t}\n+\t\t};\n+\t\treturn new LambdaOnSubscribe<Void, T>(generator, nextFunc, wrappedOnUnsubscribe);\n+\t}\n+\n+\t@Override\n+\tpublic final void call(final Subscriber<? super T> subscriber) {\n+\t\tstate = generateState();\n+\t\tfinal SyncOnSubscribe<S, T> self = this;\n+\t\tfinal Subscription s = Subscriptions.create(new Action0() {\n+\t\t\t@Override\n+\t\t\tpublic void call() {\n+\t\t\t\tself.onUnsubscribe(state);\n+\t\t\t}\n+\t\t});\n+\t\tsubscriber.add(s);\n+\t\tAction1<Subscriber<? super T>> onNext = new Action1<Subscriber<? super T>>() {\n+\t\t\t@Override\n+\t\t\tpublic void call(Subscriber<? super T> subscriber) {\n+\t\t\t\tstate = next(state, subscriber);\n+\t\t\t}\n+\t\t};\n+\t\tsubscriber.setProducer(new SubscriptionProducer<T>(subscriber, onNext));\n+\t}\n+\n+\t/**\n+\t * An implementation that forwards the three main methods ({@code next},\n+\t * {@code onSubscribe}, and {@code onUnsubscribe}) to functional callbacks.\n+\t *\n+\t * @param <T>\n+\t *            the type of compatible Subscribers\n+\t * @param <S>\n+\t *            the type of the user-defined state\n+\t */\n+\tprivate static final class LambdaOnSubscribe<S, T> extends SyncOnSubscribe<S, T> {\n+\t\tprivate final Func0<S> generator;\n+\t\tprivate final Func2<? super S, ? super Subscriber<? super T>, ? extends S> next;\n+\t\tprivate final Action1<? super S> onUnsubscribe;\n+\n+\t\tprivate LambdaOnSubscribe(Func0<S> generator, Func2<? super S, ? super Subscriber<? super T>, ? extends S> next,\n+\t\t\t\tAction1<? super S> onUnsubscribe) {\n+\t\t\tthis.generator = generator;\n+\t\t\tthis.next = next;\n+\t\t\tthis.onUnsubscribe = onUnsubscribe;\n+\t\t}\n+\n+\t\t@Override\n+\t\tprotected S generateState() {\n+\t\t\treturn generator.call();\n+\t\t}\n+\n+\t\t@Override\n+\t\tprotected void onUnsubscribe(S state) {\n+\t\t\tonUnsubscribe.call(state);\n+\t\t}\n+\n+\t\t@Override\n+\t\tprotected S next(S state, Subscriber<? super T> subscriber) {\n+\t\t\treturn next.call(state, subscriber);\n+\t\t}\n+\t}\n+\n+\t/**\n+\t * Contains the producer loop that reacts to downstream requests of work.\n+\t *\n+\t * @param <T>\n+\t *            the type of compatible Subscribers\n+\t */\n+\tprivate static final class SubscriptionProducer<T> implements Producer {\n+\t\tprivate final AtomicLong requestCount = new AtomicLong(0);\n+\t\tprivate final AtomicLong sentCount = new AtomicLong(0);","path":"src/main/java/rx/observables/SyncOnSubscribe.java","position":null,"original_position":226,"commit_id":"68f8eaa653a39cb72b1eefcd754e4ec520f0d6a3","original_commit_id":"e7ed4e020251b0cde4019ebde67b2aa238a09da0","user":{"login":"stealthcode","id":1455238,"avatar_url":"https://avatars.githubusercontent.com/u/1455238?v=3","gravatar_id":"","url":"https://api.github.com/users/stealthcode","html_url":"https://github.com/stealthcode","followers_url":"https://api.github.com/users/stealthcode/followers","following_url":"https://api.github.com/users/stealthcode/following{/other_user}","gists_url":"https://api.github.com/users/stealthcode/gists{/gist_id}","starred_url":"https://api.github.com/users/stealthcode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stealthcode/subscriptions","organizations_url":"https://api.github.com/users/stealthcode/orgs","repos_url":"https://api.github.com/users/stealthcode/repos","events_url":"https://api.github.com/users/stealthcode/events{/privacy}","received_events_url":"https://api.github.com/users/stealthcode/received_events","type":"User","site_admin":false},"body":"Thanks. I've integrated this into my latest code.","created_at":"2015-07-30T22:16:12Z","updated_at":"2015-07-30T22:16:12Z","html_url":"https://github.com/ReactiveX/RxJava/pull/3118#discussion_r35927610","pull_request_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118","_links":{"self":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments/35927610"},"html":{"href":"https://github.com/ReactiveX/RxJava/pull/3118#discussion_r35927610"},"pull_request":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118"}}},"pull_request":{"url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118","id":41077739,"html_url":"https://github.com/ReactiveX/RxJava/pull/3118","diff_url":"https://github.com/ReactiveX/RxJava/pull/3118.diff","patch_url":"https://github.com/ReactiveX/RxJava/pull/3118.patch","issue_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/3118","number":3118,"state":"open","locked":false,"title":"Implementing the SyncOnSubscribe","user":{"login":"stealthcode","id":1455238,"avatar_url":"https://avatars.githubusercontent.com/u/1455238?v=3","gravatar_id":"","url":"https://api.github.com/users/stealthcode","html_url":"https://github.com/stealthcode","followers_url":"https://api.github.com/users/stealthcode/followers","following_url":"https://api.github.com/users/stealthcode/following{/other_user}","gists_url":"https://api.github.com/users/stealthcode/gists{/gist_id}","starred_url":"https://api.github.com/users/stealthcode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stealthcode/subscriptions","organizations_url":"https://api.github.com/users/stealthcode/orgs","repos_url":"https://api.github.com/users/stealthcode/repos","events_url":"https://api.github.com/users/stealthcode/events{/privacy}","received_events_url":"https://api.github.com/users/stealthcode/received_events","type":"User","site_admin":false},"body":"This is useful for creating an observable that reads from a data source in a synchronous manner. This is a rewrite of the `AbstractOnSubscribe` experimental class based on the ideas in #3003.","created_at":"2015-07-29T01:00:37Z","updated_at":"2015-07-30T22:16:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"25ec05e2e38a8b25413ebea8cbb1628ac7870621","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118/commits","review_comments_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118/comments","review_comment_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/3118/comments","statuses_url":"https://api.github.com/repos/ReactiveX/RxJava/statuses/68f8eaa653a39cb72b1eefcd754e4ec520f0d6a3","head":{"label":"stealthcode:sync-on-subscribe","ref":"sync-on-subscribe","sha":"68f8eaa653a39cb72b1eefcd754e4ec520f0d6a3","user":{"login":"stealthcode","id":1455238,"avatar_url":"https://avatars.githubusercontent.com/u/1455238?v=3","gravatar_id":"","url":"https://api.github.com/users/stealthcode","html_url":"https://github.com/stealthcode","followers_url":"https://api.github.com/users/stealthcode/followers","following_url":"https://api.github.com/users/stealthcode/following{/other_user}","gists_url":"https://api.github.com/users/stealthcode/gists{/gist_id}","starred_url":"https://api.github.com/users/stealthcode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stealthcode/subscriptions","organizations_url":"https://api.github.com/users/stealthcode/orgs","repos_url":"https://api.github.com/users/stealthcode/repos","events_url":"https://api.github.com/users/stealthcode/events{/privacy}","received_events_url":"https://api.github.com/users/stealthcode/received_events","type":"User","site_admin":false},"repo":{"id":20514872,"name":"RxJava","full_name":"stealthcode/RxJava","owner":{"login":"stealthcode","id":1455238,"avatar_url":"https://avatars.githubusercontent.com/u/1455238?v=3","gravatar_id":"","url":"https://api.github.com/users/stealthcode","html_url":"https://github.com/stealthcode","followers_url":"https://api.github.com/users/stealthcode/followers","following_url":"https://api.github.com/users/stealthcode/following{/other_user}","gists_url":"https://api.github.com/users/stealthcode/gists{/gist_id}","starred_url":"https://api.github.com/users/stealthcode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stealthcode/subscriptions","organizations_url":"https://api.github.com/users/stealthcode/orgs","repos_url":"https://api.github.com/users/stealthcode/repos","events_url":"https://api.github.com/users/stealthcode/events{/privacy}","received_events_url":"https://api.github.com/users/stealthcode/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stealthcode/RxJava","description":"RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.","fork":true,"url":"https://api.github.com/repos/stealthcode/RxJava","forks_url":"https://api.github.com/repos/stealthcode/RxJava/forks","keys_url":"https://api.github.com/repos/stealthcode/RxJava/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stealthcode/RxJava/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stealthcode/RxJava/teams","hooks_url":"https://api.github.com/repos/stealthcode/RxJava/hooks","issue_events_url":"https://api.github.com/repos/stealthcode/RxJava/issues/events{/number}","events_url":"https://api.github.com/repos/stealthcode/RxJava/events","assignees_url":"https://api.github.com/repos/stealthcode/RxJava/assignees{/user}","branches_url":"https://api.github.com/repos/stealthcode/RxJava/branches{/branch}","tags_url":"https://api.github.com/repos/stealthcode/RxJava/tags","blobs_url":"https://api.github.com/repos/stealthcode/RxJava/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stealthcode/RxJava/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stealthcode/RxJava/git/refs{/sha}","trees_url":"https://api.github.com/repos/stealthcode/RxJava/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stealthcode/RxJava/statuses/{sha}","languages_url":"https://api.github.com/repos/stealthcode/RxJava/languages","stargazers_url":"https://api.github.com/repos/stealthcode/RxJava/stargazers","contributors_url":"https://api.github.com/repos/stealthcode/RxJava/contributors","subscribers_url":"https://api.github.com/repos/stealthcode/RxJava/subscribers","subscription_url":"https://api.github.com/repos/stealthcode/RxJava/subscription","commits_url":"https://api.github.com/repos/stealthcode/RxJava/commits{/sha}","git_commits_url":"https://api.github.com/repos/stealthcode/RxJava/git/commits{/sha}","comments_url":"https://api.github.com/repos/stealthcode/RxJava/comments{/number}","issue_comment_url":"https://api.github.com/repos/stealthcode/RxJava/issues/comments{/number}","contents_url":"https://api.github.com/repos/stealthcode/RxJava/contents/{+path}","compare_url":"https://api.github.com/repos/stealthcode/RxJava/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stealthcode/RxJava/merges","archive_url":"https://api.github.com/repos/stealthcode/RxJava/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stealthcode/RxJava/downloads","issues_url":"https://api.github.com/repos/stealthcode/RxJava/issues{/number}","pulls_url":"https://api.github.com/repos/stealthcode/RxJava/pulls{/number}","milestones_url":"https://api.github.com/repos/stealthcode/RxJava/milestones{/number}","notifications_url":"https://api.github.com/repos/stealthcode/RxJava/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stealthcode/RxJava/labels{/name}","releases_url":"https://api.github.com/repos/stealthcode/RxJava/releases{/id}","created_at":"2014-06-05T06:50:19Z","updated_at":"2014-08-19T03:49:53Z","pushed_at":"2015-07-30T22:10:00Z","git_url":"git://github.com/stealthcode/RxJava.git","ssh_url":"git@github.com:stealthcode/RxJava.git","clone_url":"https://github.com/stealthcode/RxJava.git","svn_url":"https://github.com/stealthcode/RxJava","homepage":"","size":17345,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ReactiveX:1.x","ref":"1.x","sha":"072ffada8cbb1cc5b4d8d27f1c22a54d7a62e69b","user":{"login":"ReactiveX","id":6407041,"avatar_url":"https://avatars.githubusercontent.com/u/6407041?v=3","gravatar_id":"","url":"https://api.github.com/users/ReactiveX","html_url":"https://github.com/ReactiveX","followers_url":"https://api.github.com/users/ReactiveX/followers","following_url":"https://api.github.com/users/ReactiveX/following{/other_user}","gists_url":"https://api.github.com/users/ReactiveX/gists{/gist_id}","starred_url":"https://api.github.com/users/ReactiveX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ReactiveX/subscriptions","organizations_url":"https://api.github.com/users/ReactiveX/orgs","repos_url":"https://api.github.com/users/ReactiveX/repos","events_url":"https://api.github.com/users/ReactiveX/events{/privacy}","received_events_url":"https://api.github.com/users/ReactiveX/received_events","type":"Organization","site_admin":false},"repo":{"id":7508411,"name":"RxJava","full_name":"ReactiveX/RxJava","owner":{"login":"ReactiveX","id":6407041,"avatar_url":"https://avatars.githubusercontent.com/u/6407041?v=3","gravatar_id":"","url":"https://api.github.com/users/ReactiveX","html_url":"https://github.com/ReactiveX","followers_url":"https://api.github.com/users/ReactiveX/followers","following_url":"https://api.github.com/users/ReactiveX/following{/other_user}","gists_url":"https://api.github.com/users/ReactiveX/gists{/gist_id}","starred_url":"https://api.github.com/users/ReactiveX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ReactiveX/subscriptions","organizations_url":"https://api.github.com/users/ReactiveX/orgs","repos_url":"https://api.github.com/users/ReactiveX/repos","events_url":"https://api.github.com/users/ReactiveX/events{/privacy}","received_events_url":"https://api.github.com/users/ReactiveX/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ReactiveX/RxJava","description":"RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.","fork":false,"url":"https://api.github.com/repos/ReactiveX/RxJava","forks_url":"https://api.github.com/repos/ReactiveX/RxJava/forks","keys_url":"https://api.github.com/repos/ReactiveX/RxJava/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ReactiveX/RxJava/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ReactiveX/RxJava/teams","hooks_url":"https://api.github.com/repos/ReactiveX/RxJava/hooks","issue_events_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/events{/number}","events_url":"https://api.github.com/repos/ReactiveX/RxJava/events","assignees_url":"https://api.github.com/repos/ReactiveX/RxJava/assignees{/user}","branches_url":"https://api.github.com/repos/ReactiveX/RxJava/branches{/branch}","tags_url":"https://api.github.com/repos/ReactiveX/RxJava/tags","blobs_url":"https://api.github.com/repos/ReactiveX/RxJava/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ReactiveX/RxJava/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ReactiveX/RxJava/git/refs{/sha}","trees_url":"https://api.github.com/repos/ReactiveX/RxJava/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ReactiveX/RxJava/statuses/{sha}","languages_url":"https://api.github.com/repos/ReactiveX/RxJava/languages","stargazers_url":"https://api.github.com/repos/ReactiveX/RxJava/stargazers","contributors_url":"https://api.github.com/repos/ReactiveX/RxJava/contributors","subscribers_url":"https://api.github.com/repos/ReactiveX/RxJava/subscribers","subscription_url":"https://api.github.com/repos/ReactiveX/RxJava/subscription","commits_url":"https://api.github.com/repos/ReactiveX/RxJava/commits{/sha}","git_commits_url":"https://api.github.com/repos/ReactiveX/RxJava/git/commits{/sha}","comments_url":"https://api.github.com/repos/ReactiveX/RxJava/comments{/number}","issue_comment_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/comments{/number}","contents_url":"https://api.github.com/repos/ReactiveX/RxJava/contents/{+path}","compare_url":"https://api.github.com/repos/ReactiveX/RxJava/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ReactiveX/RxJava/merges","archive_url":"https://api.github.com/repos/ReactiveX/RxJava/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ReactiveX/RxJava/downloads","issues_url":"https://api.github.com/repos/ReactiveX/RxJava/issues{/number}","pulls_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls{/number}","milestones_url":"https://api.github.com/repos/ReactiveX/RxJava/milestones{/number}","notifications_url":"https://api.github.com/repos/ReactiveX/RxJava/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ReactiveX/RxJava/labels{/name}","releases_url":"https://api.github.com/repos/ReactiveX/RxJava/releases{/id}","created_at":"2013-01-08T20:11:48Z","updated_at":"2015-07-30T18:27:13Z","pushed_at":"2015-07-30T22:10:03Z","git_url":"git://github.com/ReactiveX/RxJava.git","ssh_url":"git@github.com:ReactiveX/RxJava.git","clone_url":"https://github.com/ReactiveX/RxJava.git","svn_url":"https://github.com/ReactiveX/RxJava","homepage":"","size":547845,"stargazers_count":6678,"watchers_count":6678,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":921,"mirror_url":null,"open_issues_count":174,"forks":921,"open_issues":174,"watchers":6678,"default_branch":"1.x"}},"_links":{"self":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118"},"html":{"href":"https://github.com/ReactiveX/RxJava/pull/3118"},"issue":{"href":"https://api.github.com/repos/ReactiveX/RxJava/issues/3118"},"comments":{"href":"https://api.github.com/repos/ReactiveX/RxJava/issues/3118/comments"},"review_comments":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118/comments"},"review_comment":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/3118/commits"},"statuses":{"href":"https://api.github.com/repos/ReactiveX/RxJava/statuses/68f8eaa653a39cb72b1eefcd754e4ec520f0d6a3"}}}}