@@ -79,35 +79,51 @@ class SourceTargetConverter[SS, TT](
79
79
}
80
80
81
81
object SourceTargetConverter {
82
- def canConvertWithStrictSource (sourceType : Manifest [_ ],
83
- targetType : Manifest [_ ],
84
- givenSourceType : Manifest [_ ],
85
- givenTargetType : Manifest [_ ]): Boolean = {
82
+ def canConvertWithStrictSource [ SS , TT , S , T ] (sourceType : Manifest [SS ],
83
+ targetType : Manifest [TT ],
84
+ givenSourceType : Manifest [S ],
85
+ givenTargetType : Manifest [T ]): Boolean = {
86
86
87
87
canConvertWithStrictSource(sourceType.erasure, targetType.erasure, givenSourceType, givenTargetType)
88
88
}
89
89
90
- def canConvertWithStrictSource (sourceType : Class [_ ],
91
- targetType : Class [_ ],
92
- givenSourceType : Manifest [_ ],
93
- givenTargetType : Manifest [_ ]): Boolean = {
90
+ def canConvertWithStrictSource [ SS , TT , S , T ] (sourceType : Class [SS ],
91
+ targetType : Class [TT ],
92
+ givenSourceType : Manifest [S ],
93
+ givenTargetType : Manifest [T ]): Boolean = {
94
94
95
95
sourceType.equals(givenSourceType.erasure) && targetType.equals(givenTargetType.erasure)
96
96
}
97
97
98
- def canConvertWithNonStrictSource (sourceType : Manifest [_ ],
99
- targetType : Manifest [_ ],
100
- givenSourceType : Manifest [_ ],
101
- givenTargetType : Manifest [_ ]): Boolean = {
98
+ def canConvertWithNonStrictSource [ SS , TT , S , T ] (sourceType : Manifest [SS ],
99
+ targetType : Manifest [TT ],
100
+ givenSourceType : Manifest [S ],
101
+ givenTargetType : Manifest [T ]): Boolean = {
102
102
103
103
canConvertWithNonStrictSource(sourceType.erasure, targetType.erasure, givenSourceType, givenTargetType)
104
104
}
105
105
106
- def canConvertWithNonStrictSource (sourceType : Class [_ ],
107
- targetType : Class [_ ],
108
- givenSourceType : Manifest [_ ],
109
- givenTargetType : Manifest [_ ]): Boolean = {
106
+ def canConvertWithNonStrictSource [ SS , TT , S , T ] (sourceType : Class [SS ],
107
+ targetType : Class [TT ],
108
+ givenSourceType : Manifest [S ],
109
+ givenTargetType : Manifest [T ]): Boolean = {
110
110
111
111
sourceType.isAssignableFrom(givenSourceType.erasure) && targetType.equals(givenTargetType.erasure)
112
112
}
113
+ }
114
+
115
+ abstract class StrictSourceConverterSkeleton [SS : Manifest , TT : Manifest ]extends Converter {
116
+ final def canConvertType [S : Manifest , T : Manifest ]: Boolean = {
117
+ SourceTargetConverter .canConvertWithStrictSource(manifest[SS ], manifest[TT ], manifest[S ], manifest[T ])
118
+ }
119
+
120
+ final def isStrictSource = true
121
+ }
122
+
123
+ abstract class NonStrictSourceConverterSkeleton [SS : Manifest , TT : Manifest ]extends Converter {
124
+ final def canConvertType [S : Manifest , T : Manifest ]: Boolean = {
125
+ SourceTargetConverter .canConvertWithNonStrictSource(manifest[SS ], manifest[TT ], manifest[S ], manifest[T ])
126
+ }
127
+
128
+ final def isStrictSource = false
113
129
}
0 commit comments