macwire
macwire copied to clipboard
Optional dependencies
Would it be possible to add feature which would allow to resolve optional dependencies?
Pseudo-implementation (which doesn't work):
def wireOpt[T](enabled: Boolean): Option[T] = {
if (enabled) {
Some(wire[T])
} else {
None
}
}
Thanks for awesome library!
You can achieve similar functionality on module level. Here is a minimal working example:
package com.example
import com.softwaremill.macwire._
object WireTest extends App {
class A()
class B(val oa: Option[A])
trait BaseModule {
def enabled: Boolean
lazy val oa: Option[A] = if (enabled) {
Some(new A())
} else {
None
}
}
object Module1 extends BaseModule {
val enabled = false
val b = wire[B]
}
object Module2 extends BaseModule {
val enabled = true
val b = wire[B]
}
require(Module1.b.oa.isEmpty)
require(Module2.b.oa.contains(Module2.oa.get))
}