File tree Expand file tree Collapse file tree 2 files changed +34
-0
lines changed Expand file tree Collapse file tree 2 files changed +34
-0
lines changed Original file line number Diff line number Diff line change 1+ import scala .quoted ._
2+
3+ case class FileName private (name : String )
4+
5+ object FileName {
6+ def unsafe (s : String ) = new FileName (s)
7+
8+ implicit inline def ToFileName (inline s : String ): FileName =
9+ $ {createFileName(' {s})}
10+
11+ def fileNameFromString (s : String ): Either [String , FileName ] =
12+ Right (FileName .unsafe(s))
13+
14+ def createFileName (fileName : Expr [String ])(using qctx : QuoteContext ): Expr [FileName ] =
15+ fileName match {
16+ case e@ Const (s) =>
17+ fileNameFromString(s) match {
18+ case Right (fn) =>
19+ ' {FileName .unsafe($ {Expr (fn.name)})} // Or `Expr(fn)` if there is a `Liftable[FileName]`
20+ case Left (_) =>
21+ qctx.throwError(s " $s is not a valid file name! It must not contain a / " , fileName)
22+ }
23+
24+ case _ =>
25+ qctx.throwError(s " $fileName is not a valid file name. It must be a literal string " , fileName)
26+ }
27+ }
28+
Original file line number Diff line number Diff line change 1+ import FileName ._
2+
3+ @ main def Test = {
4+ val fileName1 : FileName = ToFileName (" fileName1" )
5+ println(fileName1)
6+ }
You can’t perform that action at this time.
0 commit comments