Skip to content
This repository was archived by the owner on Aug 17, 2019. It is now read-only.

Commit 044a4c1

Browse files
committed
Add some skeletons
1 parent 9b558d5 commit 044a4c1

File tree

1 file changed

+32
-16
lines changed

1 file changed

+32
-16
lines changed

src/main/scala/com/ckkloverdos/convert/SourceTargetConverter.scala

+32-16
Original file line numberDiff line numberDiff line change
@@ -79,35 +79,51 @@ class SourceTargetConverter[SS, TT](
7979
}
8080

8181
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 = {
8686

8787
canConvertWithStrictSource(sourceType.erasure, targetType.erasure, givenSourceType, givenTargetType)
8888
}
8989

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 = {
9494

9595
sourceType.equals(givenSourceType.erasure) && targetType.equals(givenTargetType.erasure)
9696
}
9797

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 = {
102102

103103
canConvertWithNonStrictSource(sourceType.erasure, targetType.erasure, givenSourceType, givenTargetType)
104104
}
105105

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 = {
110110

111111
sourceType.isAssignableFrom(givenSourceType.erasure) && targetType.equals(givenTargetType.erasure)
112112
}
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
113129
}

0 commit comments

Comments
 (0)