Feature request: support sum type in macwire.
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
Inizia tracciando gli entry point di wire[...] e l’esempio MainAppInjected per capire come vengono attualmente risolte le dipendenze. Definisci come devono essere rappresentati e composti i binding di tipo somma o di ambiente, quindi verifica che il pattern di utilizzo richiesto di Scala 3 compili e supporti il grafo delle dipendenze mostrato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
As the code show in gitter
trait DesuConfigModel:
val configIO: IO[DesuConfig] = ???
end DesuConfigModel
trait AppConfig(config: DesuConfig):
end AppConfig
trait DoobieDB(config: DesuConfig):
private val dsConfigIO = IO(config.mysqlDesuQuillDB.dataSource)
val transactor: Resource[IO, HikariTransactor[IO]] = ???
end DoobieDB
trait FileFinder(appConfig: AppConfig, xa: Transactor[IO]):
// code
end FileFinder
trait AppRoutes(fileFinder: FileFinder, appConfig: AppConfig):
// code
end AppRoutes
val configModel = wire[DesuConfigModel]
val appRoutes: Resource[IO, AppRoutes] = for
desuConfig <- Resource.eval(configModel.configIO)
appConfig = wire[AppConfig]
doobieDB = wire[DoobieDB]
xa <- doobieDB.transactor
yield
val fileFinder = wire[FileFinder]
wire[AppRoutes]
Macwire can support wire in F[_] like distage. Since implicit value and constructor value is fetched by type. You can declare a implicit value like
implicit val implicitVarName = constructorVarName
Here request a feature that support sum type in macwire like zio.ZEnvironment. Then we can support something like distage's Module include(simple version) in Scala2 and Scala3.(distage doc)
Here is the code also in gitter
class DesuConfigModelImpl extends DesuConfigModel
class AppConfigImpl(using DesuConfig) extends AppConfig(summon)
class DoobieDBImpl(using DesuConfig) extends DoobieDB(summon)
class FileFinderImpl(using AppConfig, Transactor[IO]) extends FileFinder(summon, summon)
class AppRoutesImpl(using FileFinder, AppConfig) extends AppRoutes(summon, summon)
import zio.{IO as _, *}
object MainAppInjected:
type ProjectEnvModule1 = DesuConfig & AppConfig & Transactor[IO]
given [T: Tag, S <: T](using ZEnvironment[S]): T = summon[ZEnvironment[S]].get
val envResource: Resource[IO, ZEnvironment[ProjectEnvModule1]] = for
given DesuConfig <- Resource.eval((new DesuConfigModelImpl).configIO)
given AppConfig = new AppConfigImpl
doobieDB = new DoobieDBImpl
given Transactor[IO] <- doobieDB.transactor
yield ZEnvironment(implicitly[DesuConfig], implicitly[Transactor[IO]], implicitly[AppConfig])
val appRoutes: Resource[IO, AppRoutes] = for
given ZEnvironment[ProjectEnvModule1] <- envResource // distage include(simple version)
yield
given FileFinder = new FileFinderImpl
new AppRoutesImpl
end MainAppInjected
It circuitously performs the macwire function I imagined use Scala3 and zio.ZEnvironment.
- Lingua principale
- Scala
- Stelle
- 1.3k
- Fork
- 77
- Merge medio
- 9m
- PR unite (30g)
- 4
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di softwaremill/macwire
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
softwaremill/macwire#412 · 3 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
softwaremill/macwire#391 · 1 commento ·
-
macrosakka Pekko alternative Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
softwaremill/macwire#301 · 2 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
softwaremill/macwire#281 · 5 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
softwaremill/macwire#278 · 3 commenti ·
Tutte le issue di softwaremill/macwire
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
ergoplatform/ergodocs#614 ·
-
area:ci enhancement requires-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
apache/datafusion-comet#6078 ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
bug delta-datalayout flink
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100