Add some guice binding helpers for Java
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / test / Guice.kt
index 5eca8fa..a5df14e 100644 (file)
@@ -8,3 +8,17 @@ fun <T : Any> KClass<T>.isInstance(instance: T) = Module { it.bind(this.java).to
 fun <T : Any> KClass<T>.isProvidedBy(instance: T) = Module { it.bind(this.java).toProvider { instance } }
 fun <T : Any> KClass<T>.isProvidedBy(provider: com.google.inject.Provider<T>) = Module { it.bind(this.java).toProvider(provider) }
 fun <T : Any> KClass<T>.isProvidedBy(provider: KClass<out Provider<T>>) = Module { it.bind(this.java).toProvider(provider.java) }
+
+fun <T : Any> supply(javaClass: Class<T>): Source<T> = object : Source<T> {
+       override fun fromInstance(instance: T) = Module { it.bind(javaClass).toInstance(instance) }
+       override fun byInstance(instance: T) = Module { it.bind(javaClass).toProvider { instance } }
+       override fun byProvider(provider: com.google.inject.Provider<T>) = Module { it.bind(javaClass).toProvider(provider) }
+       override fun byProvider(provider: Class<Provider<T>>) = Module { it.bind(javaClass).toProvider(provider) }
+}
+
+interface Source<T : Any> {
+       fun fromInstance(instance: T): Module
+       fun byInstance(instance: T): Module
+       fun byProvider(provider: com.google.inject.Provider<T>): Module
+       fun byProvider(provider: Class<Provider<T>>): Module
+}