@@ -31,13 +31,13 @@ import org.scalatest.matchers.should.Matchers
3131class TransformableTest extends AnyFlatSpec with Matchers {
3232
3333 " TransformableTest simple case" should " ok for Transformable" in {
34-
3534 case class A1 (a : String , b : Int , cc : Long , d : Option [String ])
3635 case class A2 (a : String , b : Int , c : Int , d : Option [String ])
3736
3837 val a = A1 (" hello" , 1 , 2 , None )
3938 val b : A2 = Transformable [A1 , A2 ] // todo `fromField: Long` type Long cannot be ignored.
40- .mapField[Long , Int ](_.cc, _.c, (fromField : Long ) => if (fromField > 0 ) fromField.toInt else 0 )
39+ .setName(_.cc, _.c)
40+ .setType[Long , Int ](_.cc, fromField => if (fromField > 0 ) fromField.toInt else 0 )
4141 .instance
4242 .transform(a)
4343
@@ -52,14 +52,27 @@ class TransformableTest extends AnyFlatSpec with Matchers {
5252 b2.toString shouldEqual " B2(List(hello))"
5353 }
5454
55+ " TransformableTest simple case, name is equals, but type not" should " ok for Transformable" in {
56+ case class A1 (a : String )
57+ case class A2 (a : Int )
58+
59+ val a = A1 (" 1112" )
60+ val b : A2 = Transformable [A1 , A2 ]
61+ .setType[String , Int ](_.a, _.toInt)
62+ .instance
63+ .transform(a)
64+
65+ b.toString shouldEqual " A2(1112)"
66+ }
67+
5568 " TransformableTest simple case" should " ok for implicit Transformable" in {
5669 case class A1 (a : String , b : Int , cc : Long , d : Option [String ])
5770 case class A2 (a : String , b : Int , c : Int , d : Option [String ])
5871 val a = A1 (" hello" , 1 , 2 , None )
5972 implicit val transformer = Transformable [A1 , A2 ]
60- .mapField (_.b, _.c)
61- .mapField (_.a, _.a)
62- .mapField [Option [String ], Option [String ]](_.d, _.d, (map : Option [String ]) => map)
73+ .setName (_.b, _.c)
74+ .setName (_.a, _.a)
75+ .setType [Option [String ], Option [String ]](_.d, (map : Option [String ]) => map)
6376 .instance
6477
6578 Transformer [A1 , A2 ].transform(a).toString shouldEqual " A2(hello,1,1,None)"
@@ -72,7 +85,7 @@ class TransformableTest extends AnyFlatSpec with Matchers {
7285 | case class A2(a: String, b: Int, c: Int, d: Option[String])
7386 | val a = A1("hello", 1, 2, None)
7487 | val b: A2 = Transformable[A1, A2]
75- | .mapField (_.cc, _.c)
88+ | .setName (_.cc, _.c)
7689 | .instance
7790 | .transform(a)
7891 |""" .stripMargin shouldNot compile
@@ -85,7 +98,7 @@ class TransformableTest extends AnyFlatSpec with Matchers {
8598 case class D2 (c2 : C2 )
8699
87100 implicit val cTransformer : Transformer [C1 , C2 ] = Transformable [C1 , C2 ].instance
88- implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ].mapField (_.c1, _.c2).instance
101+ implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ].setName (_.c1, _.c2).instance
89102
90103 val d1 = D1 (C1 (1 ))
91104 val d2 : D2 = Transformer [D1 , D2 ].transform(d1)
@@ -99,14 +112,14 @@ class TransformableTest extends AnyFlatSpec with Matchers {
99112 case class D2 (c2 : List [C2 ])
100113
101114 implicit val cTransformer : Transformer [C1 , C2 ] = Transformable [C1 , C2 ].instance
102- implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ].mapField (_.c1, _.c2).instance
115+ implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ].setName (_.c1, _.c2).instance
103116
104117 val d1 = D1 (List (C1 (1 ), C1 (2 )))
105118 val d2 : D2 = Transformer [D1 , D2 ].transform(d1)
106119 println(d2)
107120 }
108121
109- " TransformableTest more complex case for two-layer nest field" should " ok for implicit and non-implicit(mapField )" in {
122+ " TransformableTest more complex case for two-layer nest field" should " ok for implicit and non-implicit(setName )" in {
110123 case class C1 (j : Int )
111124 case class D1 (c1 : List [List [C1 ]])
112125
@@ -119,11 +132,10 @@ class TransformableTest extends AnyFlatSpec with Matchers {
119132
120133 object D1 {
121134 implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ]
122- .mapField[List [List [C1 ]], List [List [C2 ]]](
135+ .setName(_.c1, _.c2)
136+ .setType[List [List [C1 ]], List [List [C2 ]]](
123137 _.c1,
124- _.c2,
125- // implicit values of nested dependencies cannot be at the same level, so move it to companion their object
126- (c1 : List [List [C1 ]]) => c1.map(_.map(Transformer [C1 , C2 ].transform(_)))
138+ _.map(_.map(Transformer [C1 , C2 ].transform(_)))
127139 )
128140 .instance
129141 }
@@ -162,12 +174,12 @@ class TransformableTest extends AnyFlatSpec with Matchers {
162174
163175 object D1 {
164176 implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ]
165- .mapField (_.a1, _.a2)
166- .mapField (_.b1, _.b2)
167- .mapField (_.c1, _.c2)
168- .mapField (_.d1, _.d2)
169- .mapField (_.map1, _.map2)
170- .mapField (_.intMap1, _.intMap2)
177+ .setName (_.a1, _.a2)
178+ .setName (_.b1, _.b2)
179+ .setName (_.c1, _.c2)
180+ .setName (_.d1, _.d2)
181+ .setName (_.map1, _.map2)
182+ .setName (_.intMap1, _.intMap2)
171183 .instance
172184 }
173185
@@ -191,7 +203,7 @@ class TransformableTest extends AnyFlatSpec with Matchers {
191203 case class A1 (a : String , b : Int , cc : Int , d : Option [String ]) // weak conformance
192204 case class A2 (a : String , b : Int , c : Long , d : Option [String ])
193205 object A1 {
194- implicit val aTransformer : Transformer [A1 , A2 ] = Transformable [A1 , A2 ].mapField (_.cc, _.c).instance
206+ implicit val aTransformer : Transformer [A1 , A2 ] = Transformable [A1 , A2 ].setName (_.cc, _.c).instance
195207 }
196208 val a1 = A1 (" hello" , 1 , 2 , None )
197209 val a2 = Transformer [A1 , A2 ].transform(a1)
@@ -201,11 +213,11 @@ class TransformableTest extends AnyFlatSpec with Matchers {
201213
202214 " TransformableTest type cannot match" should " compile failed if can't use weak conformance" in {
203215 """
204- | case class A1(a: String, b: Int, cc: Long, d: Option[String]) // Can't to use weak conformance, must use `mapField (?,?,?)` method for it.
216+ | case class A1(a: String, b: Int, cc: Long, d: Option[String]) // Can't to use weak conformance, must use `setName (?,?,?)` method for it.
205217 | case class A2(a: String, b: Int, c: Int, d: Option[String])
206218 | object A1 {
207219 |
208- | implicit val aTransformer: Transformer[A1, A2] = Transformable[A1, A2].mapField (_.cc,_.c).instance
220+ | implicit val aTransformer: Transformer[A1, A2] = Transformable[A1, A2].setName (_.cc,_.c).instance
209221 | }
210222 | val a1 = A1("hello", 1, 2, None)
211223 | val a2 = Transformer[A1, A2].transform(a1)
@@ -269,7 +281,7 @@ class TransformableTest extends AnyFlatSpec with Matchers {
269281 object D1 {
270282
271283 implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ]
272- .mapField (_.a1, _.a2)
284+ .setName (_.a1, _.a2)
273285 .instance
274286 }
275287
@@ -306,9 +318,9 @@ class TransformableTest extends AnyFlatSpec with Matchers {
306318 object D1 {
307319
308320 implicit val dTransformer : Transformer [D1 , D2 ] = Transformable [D1 , D2 ]
309- .mapField (_.a1, _.a2)
310- .mapField (_.b1, _.b2)
311- .mapField (_.c1, _.c2)
321+ .setName (_.a1, _.a2)
322+ .setName (_.b1, _.b2)
323+ .setName (_.c1, _.c2)
312324 .instance
313325 }
314326
0 commit comments