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