macwire icon indicating copy to clipboard operation
macwire copied to clipboard

Optional dependencies

Open dbronecki opened this issue 6 years ago • 1 comments

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!

dbronecki avatar Feb 17 '19 07:02 dbronecki

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))
}

mkrzemien avatar May 24 '20 18:05 mkrzemien