@@ -4,51 +4,47 @@ package progscala3.contexts.typeclass.old
4
4
5
5
import progscala3 .introscala .shapes .{Point , Shape , Circle , Rectangle , Triangle }
6
6
7
- trait ToJSONOld [T ]:
8
- def toJSON (name : String = " " , level : Int = 0 ): String // <1>
7
+ // DeanW: September 14, 2025. Scala is dropping support for implicit classes, so the
8
+ // `implicit final class PointToJSON`, etc. are now replaced by extension methods
9
+ // and the trait ToJSONOld is converted to an object for its methods.
9
10
10
- protected val indent = " "
11
- protected def indentation (level : Int ): (String ,String ) =
11
+ object ToJSONOld :
12
+ val indent = " "
13
+ def indentation (level : Int ): (String ,String ) =
12
14
(indent * level, indent * (level+ 1 ))
13
- protected def handleName (name : String ): String =
15
+ def handleName (name : String ): String =
14
16
if name.length > 0 then s """ " $name": """ else " "
15
- // end::trait[]
17
+ end ToJSONOld
16
18
17
- // tag::pointcircle[]
18
- implicit final class PointToJSON (
19
- point : Point ) extends ToJSONOld [Point ]:
20
- def toJSON (name : String = " " , level : Int = 0 ): String =
21
- val (outdent, indent) = indentation(level)
22
- s """ ${handleName(name)}{
19
+ extension(point : Point )
20
+ def toJSON (name : String , level : Int ): String =
21
+ val (outdent, indent) = ToJSONOld .indentation(level)
22
+ s """ ${ToJSONOld .handleName(name)}{
23
23
| ${indent}"x": " ${point.x}",
24
24
| ${indent}"y": " ${point.y}"
25
25
| $outdent} """ .stripMargin
26
26
27
- implicit final class CircleToJSON (
28
- circle : Circle ) extends ToJSONOld [Circle ]:
29
- def toJSON (name : String = " " , level : Int = 0 ): String =
30
- val (outdent, indent) = indentation(level)
31
- s """ ${handleName(name)}{
27
+ extension(circle : Circle )
28
+ def toJSON (name : String , level : Int ): String =
29
+ val (outdent, indent) = ToJSONOld .indentation(level)
30
+ s """ ${ToJSONOld .handleName(name)}{
32
31
| ${indent}${circle.center.toJSON(" center" , level + 1 )},
33
32
| ${indent}"radius": ${circle.radius}
34
33
| $outdent} """ .stripMargin
35
- // end::pointcircle[]
36
34
37
- implicit final class RectangleToJSON (
38
- rect : Rectangle ) extends ToJSONOld [Rectangle ]:
39
- def toJSON (name : String = " " , level : Int = 0 ): String =
40
- val (outdent, indent) = indentation(level)
41
- s """ ${handleName(name)}{
35
+ extension(rect : Rectangle )
36
+ def toJSON (name : String , level : Int ): String =
37
+ val (outdent, indent) = ToJSONOld .indentation(level)
38
+ s """ ${ToJSONOld .handleName(name)}{
42
39
| ${indent}${rect.lowerLeft.toJSON(" lowerLeft" , level + 1 )},
43
40
| ${indent}"height": ${rect.height}
44
41
| ${indent}"width": ${rect.width}
45
42
| $outdent} """ .stripMargin
46
43
47
- implicit final class TriangleToJSON (
48
- tri : Triangle ) extends ToJSONOld [Triangle ]:
49
- def toJSON (name : String = " " , level : Int = 0 ): String =
50
- val (outdent, indent) = indentation(level)
51
- s """ ${handleName(name)}{
44
+ extension(tri : Triangle )
45
+ def toJSON (name : String , level : Int ): String =
46
+ val (outdent, indent) = ToJSONOld .indentation(level)
47
+ s """ ${ToJSONOld .handleName(name)}{
52
48
| ${indent}${tri.point1.toJSON(" point1" , level + 1 )},
53
49
| ${indent}${tri.point2.toJSON(" point2" , level + 1 )},
54
50
| ${indent}${tri.point3.toJSON(" point3" , level + 1 )},
0 commit comments