{"action":"created","issue":{"url":"https://api.github.com/repos/spring-projects/spring-reactive/issues/49","labels_url":"https://api.github.com/repos/spring-projects/spring-reactive/issues/49/labels{/name}","comments_url":"https://api.github.com/repos/spring-projects/spring-reactive/issues/49/comments","events_url":"https://api.github.com/repos/spring-projects/spring-reactive/issues/49/events","html_url":"https://github.com/spring-projects/spring-reactive/issues/49","id":120004564,"number":49,"title":"Should we introduce a type to be used instead Publisher<Void>?","user":{"login":"sdeleuze","id":141109,"avatar_url":"https://avatars.githubusercontent.com/u/141109?v=3","gravatar_id":"","url":"https://api.github.com/users/sdeleuze","html_url":"https://github.com/sdeleuze","followers_url":"https://api.github.com/users/sdeleuze/followers","following_url":"https://api.github.com/users/sdeleuze/following{/other_user}","gists_url":"https://api.github.com/users/sdeleuze/gists{/gist_id}","starred_url":"https://api.github.com/users/sdeleuze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sdeleuze/subscriptions","organizations_url":"https://api.github.com/users/sdeleuze/orgs","repos_url":"https://api.github.com/users/sdeleuze/repos","events_url":"https://api.github.com/users/sdeleuze/events{/privacy}","received_events_url":"https://api.github.com/users/sdeleuze/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":7,"created_at":"2015-12-02T18:18:49Z","updated_at":"2015-12-22T00:20:52Z","closed_at":null,"body":"In various places in our codebase, we are returning `Publisher<Void>` to express that the something will be complete later, without any value emitted.\r\n\r\nAs reported by @rstoyanchev we should introduce a dedicated type instead of `Publisher<Void>`, mainly because `Publisher` purpose is to be a stream of elements, and in that case there is no element, just a complete signal.\r\n\r\nYou can see related interesting RxJava discussions:\r\n - [`Observable<Void>` Usage or `VoidObservable`](https://github.com/ReactiveX/RxJava/issues/3037)\r\n - [`RxJava Completable extension`](https://github.com/akarnokd/RxJavaCompletable)\r\n\r\nI would be in favor of creating an interface with default methods for this type.\r\n\r\nAbout the name, I am not sure but perhaps `Listenable` could be a good fit, since we have already `ListenableFuture` in Spring, or `Deferred` since we also have `DeferredResult`, or `Completable` since it is about something that will complete at some point.\r\n\r\nMaybe it could provide operators that make sense for such value less completable object, like `concat`.\r\n\r\nI am also wondering it it should extends `Publisher<Void>`, or as an alternative provide a `Publisher<Void>` default method for interoperability?\r\n\r\nAny thoughts?"},"comment":{"url":"https://api.github.com/repos/spring-projects/spring-reactive/issues/comments/166465219","html_url":"https://github.com/spring-projects/spring-reactive/issues/49#issuecomment-166465219","issue_url":"https://api.github.com/repos/spring-projects/spring-reactive/issues/49","id":166465219,"user":{"login":"sdeleuze","id":141109,"avatar_url":"https://avatars.githubusercontent.com/u/141109?v=3","gravatar_id":"","url":"https://api.github.com/users/sdeleuze","html_url":"https://github.com/sdeleuze","followers_url":"https://api.github.com/users/sdeleuze/followers","following_url":"https://api.github.com/users/sdeleuze/following{/other_user}","gists_url":"https://api.github.com/users/sdeleuze/gists{/gist_id}","starred_url":"https://api.github.com/users/sdeleuze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sdeleuze/subscriptions","organizations_url":"https://api.github.com/users/sdeleuze/orgs","repos_url":"https://api.github.com/users/sdeleuze/repos","events_url":"https://api.github.com/users/sdeleuze/events{/privacy}","received_events_url":"https://api.github.com/users/sdeleuze/received_events","type":"User","site_admin":false},"created_at":"2015-12-22T00:20:52Z","updated_at":"2015-12-22T00:20:52Z","body":"Another solution proposed by @smaldini is to just use `Promise<Void>` (as defined in issue https://github.com/spring-projects/spring-reactive/issues/50)."}}