All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dslplatform.json.runtime.ScalaConversionMapping.scala Maven / Gradle / Ivy

The newest version!
package com.dslplatform.json.runtime

import ScalaCollectionAnalyzer.CollectionConversion
import scala.collection.mutable

object ScalaConversionMapping {
  def collectionConversion(collection: Class[_]): Option[CollectionConversion] = {
    if (classOf[List[_]].isAssignableFrom(collection)) {
      Some(CollectionConversion(() => Nil, _.toList))
    } else if (classOf[Vector[_]].isAssignableFrom(collection)) {
      val empty = Vector.empty
      Some(CollectionConversion(() => empty, _.toVector))
    } else if (classOf[Set[_]].isAssignableFrom(collection)) {
      val empty = Set.empty
      Some(CollectionConversion(() => empty, _.toSet))
    } else if (classOf[mutable.ArrayBuffer[_]].isAssignableFrom(collection)) {
      Some(CollectionConversion(() => new mutable.ArrayBuffer(0), identity))
    } else if (classOf[scala.collection.immutable.IndexedSeq[_]].isAssignableFrom(collection)) {
      val empty = scala.collection.immutable.IndexedSeq.empty
      Some(CollectionConversion(() => empty, _.toIndexedSeq))
    } else if (classOf[scala.collection.immutable.Seq[_]].isAssignableFrom(collection)) {
      val empty = scala.collection.immutable.Seq.empty
      Some(CollectionConversion(() => empty, _.toVector))
    } else if (classOf[mutable.Set[_]].isAssignableFrom(collection)) {
      Some(CollectionConversion(() => new mutable.HashSet(), ab => new mutable.HashSet(ab.size, mutable.HashSet.defaultLoadFactor).addAll(ab)))
    } else if (classOf[mutable.Stack[_]].isAssignableFrom(collection)) {
      Some(CollectionConversion(() => new mutable.Stack(), ab => new mutable.Stack(ab.size).addAll(ab)))
    } else if (classOf[mutable.Queue[_]].isAssignableFrom(collection)) {
      Some(CollectionConversion(() => new mutable.Queue(), ab => new mutable.Queue(ab.size).addAll(ab)))
    } else if (classOf[IndexedSeq[_]].isAssignableFrom(collection)) {
      val empty = IndexedSeq.empty
      Some(CollectionConversion(() => empty, identity))
    } else if (classOf[Seq[_]].isAssignableFrom(collection)) {
      val empty = Seq.empty
      Some(CollectionConversion(() => empty, identity))
    } else {
      None
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy