forked from zio/zio-sql
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Renderable.scala
32 lines (29 loc) · 896 Bytes
/
Renderable.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package zio.sql
trait Renderable {
def render(mode: RenderMode): String = {
val builder = new StringBuilder
renderBuilder(builder, mode)
builder.toString()
}
private[zio] def renderBuilder(builder: StringBuilder, mode: RenderMode): Unit
}
object Renderable {
implicit class ListOps(val list: List[Renderable]) extends Renderable {
override private[zio] def renderBuilder(builder: StringBuilder, mode: RenderMode): Unit =
list match {
case head :: tail =>
head.renderBuilder(builder, mode)
tail match {
case _ :: _ => builder.append(", ")
case Nil => ()
}
tail.renderBuilder(builder, mode)
case Nil => ()
}
}
}
sealed trait RenderMode
object RenderMode {
case object Compact extends RenderMode
final case class Pretty(indent: Int) extends RenderMode
}