Skip to content

Commit

Permalink
Fix scalajs
Browse files Browse the repository at this point in the history
  • Loading branch information
filosganga committed Dec 30, 2024
1 parent 0988f76 commit 1142c7a
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 48 deletions.
5 changes: 3 additions & 2 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
version = "3.5.8"
align.preset = none
runner.dialect = scala213

fileOverride {
"glob:**/src/*/scala-3" {
"glob:**/src/**/scala-3/**" {
runner.dialect = scala3
}
"glob:**/src/*/scala-2.12" {
"glob:**/src/**/scala-2.12" {
runner.dialect = scala212
}
}
23 changes: 22 additions & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ val scala33 = "3.3.4"
val scala36 = "3.6.2"
ThisBuild / spiewakMainBranches := Seq("main")

ThisBuild / crossScalaVersions := Seq(scala36, scala33, Scala213)
ThisBuild / crossScalaVersions := Seq(Scala213, scala36, scala33)
ThisBuild / versionIntroduced := Map("3.0.0" -> "0.3.0")
ThisBuild / scalaVersion := (ThisBuild / crossScalaVersions).value.head
ThisBuild / initialCommands := """
Expand All @@ -34,6 +34,13 @@ lazy val root = project
.in(file("."))
.enablePlugins(NoPublishPlugin, SonatypeCiReleasePlugin)
.aggregate(core.js, core.jvm, benchmark)
.settings(
libraryDependencies --= List(
compilerPlugin(
"org.typelevel" % "kind-projector" % "0.13.2" cross CrossVersion.full
)
)
)

lazy val core = crossProject(JSPlatform, JVMPlatform)
.crossType(CrossType.Full)
Expand Down Expand Up @@ -112,6 +119,13 @@ lazy val jsdocs = project
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "2.3.0"
)
.enablePlugins(ScalaJSPlugin)
.settings(
libraryDependencies --= List(
compilerPlugin(
"org.typelevel" % "kind-projector" % "0.13.2" cross CrossVersion.full
)
)
)

lazy val docs = project
.in(file("mdoc"))
Expand All @@ -130,6 +144,13 @@ lazy val docs = project
)
.dependsOn(core.jvm)
.enablePlugins(MdocPlugin, NoPublishPlugin)
.settings(
libraryDependencies --= List(
compilerPlugin(
"org.typelevel" % "kind-projector" % "0.13.2" cross CrossVersion.full
)
)
)

ThisBuild / githubWorkflowJavaVersions := Seq(JavaSpec.temurin("11"))

Expand Down
35 changes: 29 additions & 6 deletions modules/benchmark/src/main/scala/EncodingBench.scala
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,39 @@ class EncodingBench {

@Benchmark
@BenchmarkMode(Array(Mode.Throughput))
def encodeRawAnMAsAv =
val map = new java.util.IdentityHashMap[String, software.amazon.awssdk.services.dynamodb.model.AttributeValue](3)
map.put("name", software.amazon.awssdk.services.dynamodb.model.AttributeValue.builder().s(allosaurus.name).build())
map.put("age", software.amazon.awssdk.services.dynamodb.model.AttributeValue.builder().n(allosaurus.age.toString).build())
map.put("attacks", software.amazon.awssdk.services.dynamodb.model.AttributeValue.builder().n(allosaurus.attacks.toString).build())
DynamoValue(software.amazon.awssdk.services.dynamodb.model.AttributeValue
def encodeRawAnMAsAv = {
val map = new java.util.IdentityHashMap[
String,
software.amazon.awssdk.services.dynamodb.model.AttributeValue
](3)
map.put(
"name",
software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.s(allosaurus.name)
.build()
)
map.put(
"age",
software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.n(allosaurus.age.toString)
.build()
)
map.put(
"attacks",
software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.n(allosaurus.attacks.toString)
.build()
)
DynamoValue(
software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.m(map)
.build()
)
}

@Benchmark
@BenchmarkMode(Array(Mode.Throughput))
Expand Down
1 change: 0 additions & 1 deletion modules/benchmark/src/main/scala/model.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,3 @@ case class Parasaurolophus(name: String, age: Int, songs: Int) extends Dynosaur
case class TyrannosaurusRex(name: String, age: Int, victims: Int)
extends Dynosaur
case class Allosaurus(name: String, age: Int, attacks: Int) extends Dynosaur

33 changes: 23 additions & 10 deletions modules/core/js/src/main/scala/internal/decoding.scala
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,30 @@ object decoding {
var error: ReadError = null

while (i < record.fields.length && error == null) {
val field = record.fields(i)
map.get(field.name) match {
case None =>
error = ReadError(
s"required field ${field.name} does not contain a value"
)
case Some(value) =>
field.schema.read(value) match {
case Left(err) => error = err
case Right(v) => decodedValues(i) = v
record.fields(i) match {
case Field.Optional(name, schema, get) =>
map.get(name) match {
case None => decodedValues(i) = None
case Some(value) =>
schema.read(value) match {
case Left(err) => error = err
case Right(v) => decodedValues(i) = Some(v)
}
}

case Field.Required(name, schema, get) =>
map.get(name) match {
case None =>
error = ReadError(
s"required field $name does not contain a value"
)
case Some(value) =>
schema.read(value) match {
case Left(err) => error = err
case Right(v) => decodedValues(i) = v
}
}

}
i += 1
}
Expand Down
51 changes: 26 additions & 25 deletions modules/core/js/src/main/scala/internal/encoding.scala
Original file line number Diff line number Diff line change
Expand Up @@ -100,34 +100,35 @@ object encoding {

def encodeRecord[R](
record: Record[R]
): R => Either[WriteError, DynamoValue] = {
val fieldCount = record.fields.length
val fieldNames = record.fieldNames

val writers =
record.fields.map(field => (field.get, field.schema.write(_))).toArray

{ value =>
{
val dict = scalajs.js.Dictionary[AttributeValue]()
var i = 0
var error: WriteError = null

while (i < record.fields.length && error == null) {
val field = record.fields(i)
val fieldValue = field.get(value)
field.schema.write(fieldValue.asInstanceOf[field.A]) match {
): R => Either[WriteError, DynamoValue] = { value =>
var i = 0
var error: WriteError = null

val dict = scalajs.js.Dictionary[AttributeValue]()

while (i < record.fields.length && error == null) {
record.fields(i) match {
case Field.Required(name, schema, get) =>
schema.write(get(value)) match {
case Left(err) => error = err
case Right(v) => dict.addOne(fieldNames(i), v.value)
case Right(v) => dict.addOne(name, v.value)
}
case Field.Optional(name, schema, get) =>
val fieldValue = get(value)
if (fieldValue != None) {
schema.write(fieldValue.get) match {
case Left(err) => error = err
case Right(v) => dict.addOne(name, v.value)
}
}
i += 1
}

if (error != null) Left(error)
else {
DynamoValue(AttributeValue.M(dict)).asRight[WriteError]
}
}

i += 1
}

if (error != null)
Left(error)
else
DynamoValue(AttributeValue.M(dict)).asRight[WriteError]
}
}
1 change: 0 additions & 1 deletion modules/core/jvm/src/main/scala/internal/encoding.scala
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ object encoding {
record: Record[R]
): R => Either[WriteError, DynamoValue] = {
val fieldCount = record.fields.length
val fieldNames = record.fieldNames

{ value =>
{
Expand Down
2 changes: 1 addition & 1 deletion modules/core/shared/src/main/scala/Schema.scala
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ object Schema {
)
case f @ Field.Optional(name, schema, get) =>
OptimizedRecord(
List(f),
List(f.asInstanceOf[Field[R, _]]),
values => values.head.asInstanceOf[X]
)
}
Expand Down
2 changes: 1 addition & 1 deletion modules/core/shared/src/test/scala/SchemaSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,7 @@ class SchemaSuite extends ScalaCheckSuite {
check(schema, departments, expected)
}

test("recursive products with very wide record".only) {
test("recursive products with very wide record") {
val departments = deepDepartment(1, 100)
val expected = deepDepartmentDynamoValue(1, 100);

Expand Down

0 comments on commit 1142c7a

Please sign in to comment.