Skip to content

Commit 27ee6a7

Browse files
committed
Remove Level from dependent-type-hood in Api objects; preliminary zio ZApi implementation.
1 parent 382faa8 commit 27ee6a7

File tree

4 files changed

+60
-14
lines changed

4 files changed

+60
-14
lines changed

build.mill

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,21 @@ object `package` extends RootModule with ScalaModule with PublishModule {
6868
}
6969
}
7070

71+
object zio extends ScalaModule with PublishModule {
72+
override def scalaVersion = Common.scalaVersion
73+
override def artifactName = T { "logadapter-scala-zio" }
74+
override def publishVersion = T { Common.publishVersion }
75+
override def pomSettings = T { Common.pomSettings("LogAdapter for scribe logging.") }
76+
override def scalacOptions = T { Common.scalacOptions }
77+
78+
def moduleDeps = Seq(build)
79+
override def ivyDeps = T {
80+
Agg(
81+
ivy"dev.zio::zio:2.1.18",
82+
)
83+
}
84+
}
85+
7186
object test extends ScalaModule {
7287
def moduleDeps = Seq(build,mlog,scribe)
7388
override def scalaVersion = Common.scalaVersion

src/logadapter/Api.scala

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,9 @@ trait Api[T <: LogAdapter]:
44

55
type LogAdapter = T
66

7-
enum Level:
8-
case CONFIG extends Level
9-
case DEBUG extends Level
10-
case FINE extends Level
11-
case FINER extends Level
12-
case FINEST extends Level
13-
case INFO extends Level
14-
case SEVERE extends Level
15-
case TRACE extends Level
16-
case WARNING extends Level
17-
7+
extension ( level : Level )
188
inline def log( message : =>String )( using la : T ) : Unit =
19-
inline this match
9+
inline level match
2010
case CONFIG => la.config(message)
2111
case DEBUG => la.debug(message)
2212
case FINE => la.fine(message)
@@ -29,7 +19,7 @@ trait Api[T <: LogAdapter]:
2919
end log
3020

3121
inline def log( message : =>String, t : =>Throwable )( using la : T ) : Unit =
32-
inline this match
22+
inline level match
3323
case CONFIG => la.config(message, t)
3424
case DEBUG => la.debug(message, t)
3525
case FINE => la.fine(message, t)
@@ -60,7 +50,7 @@ trait Api[T <: LogAdapter]:
6050
end logEval
6151

6252
inline def apply[X]( expression : =>X )( using la : T ) : X = logEval( expression )
63-
end Level
53+
end extension
6454

6555
export Level.*
6656

src/logadapter/Level.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package logadapter
2+
3+
enum Level:
4+
case CONFIG extends Level
5+
case DEBUG extends Level
6+
case FINE extends Level
7+
case FINER extends Level
8+
case FINEST extends Level
9+
case INFO extends Level
10+
case SEVERE extends Level
11+
case TRACE extends Level
12+
case WARNING extends Level
13+
end Level

zio/src/logadapter/zio/ZApi.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package logadapter.zio
2+
3+
import zio.{UIO,ZIO}
4+
5+
class ZApi[T <: logadapter.LogAdapter]( api : logadapter.Api[T] ):
6+
import api.*
7+
export api.*
8+
extension ( level : logadapter.Level )
9+
inline def zlog( message : =>String )( using la : T ) : UIO[Unit] = ZIO.succeed( level.log( message ) )
10+
inline def zlog( message : =>String, error : Throwable )( using la : T ) : UIO[Unit] = ZIO.succeed( level.log( message, error ) )
11+
12+
extension[R,E,A] ( effect : ZIO[R,E,A] )( using la : T )
13+
inline def zlogError( level : logadapter.Level, what : => String = "Effect" ) : ZIO[R,E,A] =
14+
effect
15+
.tapError { e =>
16+
e match
17+
case t : Throwable => level.zlog(s"${what} failed within error channel, on Throwable.", t)
18+
case other => level.zlog(s"${what} failed within error channel. Failure: " + other)
19+
}
20+
inline def zlogDefect( level : logadapter.Level, what : => String = "Effect" ) : ZIO[R,E,A] =
21+
effect
22+
.tapDefect { cause =>
23+
level.zlog(s"${what} failed outside of error channel with cause: " + cause)
24+
}
25+
inline def zlogErrorDefect( level : logadapter.Level, what : => String = "Effect" ) : ZIO[R,E,A] =
26+
effect
27+
.zlogError( level, what )
28+
.zlogDefect( level, what )

0 commit comments

Comments
 (0)