Skip to content

Instantly share code, notes, and snippets.

@citizenmatt
Created March 25, 2014 10:40
Show Gist options
  • Save citizenmatt/9758988 to your computer and use it in GitHub Desktop.
Save citizenmatt/9758988 to your computer and use it in GitHub Desktop.
RX + Kotlin
fun get(url: String, headers: Headers = Headers()): Observable<Response> {
//return getWithExplicitClass(url, headers)!!
//return getWithAnonymousClass(url, headers)!!
//return getWithInlineUsingObsoleteSubscribeFunc(url, headers)!!
return getWithFailingInlineFunction(url, headers)!!
}
fun getWithFailingInlineFunction(url: String, headers: Headers = Headers()) : Observable<Response>? {
// This fails. Looks like a bug in Kotlin: http://youtrack.jetbrains.com/issue/KT-4598
return Observable.create(OnSubscribe<Response> { (it : Subscriber<in Response>?) ->
get(url, headers, {
it?.onNext(this)
it?.onCompleted()
})
})
}
fun getWithInlineUsingObsoleteSubscribeFunc(url: String, headers: Headers = Headers()) : Observable<Response>? {
return Observable.create(OnSubscribeFunc<Response> {
get(url, headers, {
it?.onNext(this)
it?.onCompleted()
})
Subscriptions.empty()
})
}
fun getWithAnonymousClass(url: String, headers: Headers = Headers()) : Observable<Response>? {
return Observable.create(object : OnSubscribe<Response> {
override fun call(s: Subscriber<in Response>?){
get (url, headers, {
s?.onNext(this)
s?.onCompleted()
})
}
})
}
fun getWithExplicitClass(url: String, headers: Headers = Headers()) : Observable<Response>? {
return Observable.create(Foo(url, headers))
}
// Needs to be inner to get access to EasyHttp.get
inner class Foo(val url: String, val headers: Headers) : OnSubscribe<Response> {
override fun call(s: Subscriber<in Response>?) {
get(url, headers, {
s?.onNext(this)
s?.onCompleted()
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment