Autoconverting Iterables, e.g. for cases like return new Object[]{hashMap.values()} (hope this doesn't break anything).

Added special key for converters, `oc:flatten`. If there is only key in the converted table and it has that name, the value of that key will be used directly.
This commit is contained in:
Florian Nücke 2014-08-15 01:00:35 +02:00
parent 7b390601f7
commit 9327762d95

View File

@ -102,6 +102,7 @@ private[oc] object Registry extends api.detail.DriverAPI {
case arg: Array[_] => convertList(arg, arg.zipWithIndex.iterator, memo)
case arg: Product => convertList(arg, arg.productIterator.zipWithIndex, memo)
case arg: Seq[_] => convertList(arg, arg.zipWithIndex.iterator, memo)
case arg: java.lang.Iterable[_] => convertList(arg, arg.zipWithIndex.iterator, memo)
case arg: Map[_, _] => convertMap(arg, arg, memo)
case arg: mutable.Map[_, _] => convertMap(arg, arg.toMap, memo)
@ -117,6 +118,11 @@ private[oc] object Registry extends api.detail.DriverAPI {
memo += arg -> null
null
}
else if (converted.size == 1 && converted.containsKey("oc:flatten")) {
val value = converted.get("oc:flatten")
memo += arg -> value // Update memoization map.
value
}
else {
// This is a little nasty but necessary because we need to keep the
// 'converted' value up-to-date for any reference created to it in