I'm upgrading my scala project from version 2 to 3.

This is my build.sbt for version scala version 2

    scalaVersion := "2.13.5"
    version := "1.0.0"
    libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.7"
    libraryDependencies += "org.scodec" %% "scodec-core" % "1.11.4"
    libraryDependencies += "org.slf4j" % "slf4j-log4j12" % "1.7.31"

Below is sample scala code -

    import scodec._
    import scodec.codecs._
    import scodec.bits._
    import scodec.codecs.implicits._
    import org.slf4j.LoggerFactory


    object AkkaEventSerializer {

      def toBinary(o: AnyRef): Array[Byte] =  o match {
        case e: Event => Codec.encode(e).require.toByteArray
        case x => throw new Exception(s"unexpected  object $x received which is ${x.getClass} type")
      }

      def fromBinary(bytes: Array[Byte], manifest: String): AnyRef = manifest match {
        case EventManifest => Codec[Event].decode(BitVector.apply(bytes)).require.value
        case x => throw new Exception(s"unexpected manifest $x in AdServerAkkaEventSerializer.fromBinary ")
      }

      final val EventManifest = classOf[Event].getName

      val  logger = LoggerFactory.getLogger(AkkaEventSerializer.getClass)

      case class Event(etype: Int, cp: Option[Double], userId: Option[String], buyerId: Option[String] = None)

    }

This is working fine for scala version 2.

Now I'm upgrading the scala version to 3.

Below is the build.sbt -

    scalaVersion := "3.0.0"
    version := "1.0.0"
    crossScalaVersions := Seq("2.13.5", "3.0.0")
    libraryDependencies += ("com.chuusai" %% "shapeless" % "2.3.7").cross(CrossVersion.for3Use2_13)
    libraryDependencies += ("org.scodec" %% "scodec-core" % "1.11.4").cross(CrossVersion.for3Use2_13)
    libraryDependencies += "org.slf4j" % "slf4j-log4j12" % "1.7.31"

Below is the code scala version 3 -

    import scodec._
    import scodec.codecs._
    import scodec.bits._
    import scodec.codecs.implicits._
    import org.slf4j.LoggerFactory
    import shapeless.~?>.idKeyWitness
    import shapeless.~?>.idValueWitness
    import shapeless.~?>.witness


    object AkkaEventSerializer {

      def toBinary(o: AnyRef): Array[Byte] =  o match {
        case e: Event => Codec.encode(e).require.toByteArray
        case x => throw new Exception(s"unexpected  object $x received which is ${x.getClass} type")
      }

      def fromBinary(bytes: Array[Byte], manifest: String): AnyRef = manifest match {
        case EventManifest => Codec[Event].decode(BitVector.apply(bytes)).require.value
        case x => throw new Exception(s"unexpected manifest $x in AdServerAkkaEventSerializer.fromBinary ")
      }

      final val EventManifest = classOf[Event].getName

      val  logger = LoggerFactory.getLogger(AkkaEventSerializer.getClass)

      case class Event(etype: Int, cp: Option[Double], userId: Option[String], buyerId: Option[String] = None)

    }

When I compile this program, I get below error -

[error] -- Error: /Users/rajkumar.natarajan/Documents/Coding/OS/scala3-maven-build-demo/src/main/scala/com/serialize/AkkaEventSerializer.scala:17:36 [error] 17 | case e: Event => Codec.encode(e).require.toByteArray [error] | ^ [error] |could not find Lazy implicit value of type scodec.Codec[com.serialize.AkkaEventSerializer.Event]. [error] |I found: [error] | [error] | shapeless.~?>.witness[Nothing, Nothing, T](shapeless.~?>.rel[Nothing, Nothing]) [error] |

[error] |But method witness in trait NatTRel0 does not match type shapeless.Lazy[scodec.Codec[com.serialize.AkkaEventSerializer.Event]]. [error] -- Error: /Users/rajkumar.natarajan/Documents/Coding/OS/scala3-maven-build-demo/src/main/scala/com/serialize/AkkaEventSerializer.scala:22:38 [error] 22 | case EventManifest => Codec[Event].decode(BitVector.apply(bytes)).require.value [error] | ^ [error] |could not find Lazy implicit value of type scodec.Codec[com.serialize.AkkaEventSerializer.Event]. [error] |I found:

[error] |

[error] | shapeless.~?>.witness[Nothing, Nothing, T](shapeless.~?>.rel[Nothing, Nothing]) [error] |

[error] |But method witness in trait NatTRel0 does not match type shapeless.Lazy[scodec.Codec[com.serialize.AkkaEventSerializer.Event]]. [error] two errors found [error] two errors found [error] (Compile / compileIncremental) Compilation failed

I know we can compile scala 2.13 code using scala 3 version. But I couldn't for this code.

How can I fix this error?

0

There are 0 best solutions below