diff --git a/docs/api-reference/index.md b/docs/api-reference/index.md index 363d367..ac066cc 100644 --- a/docs/api-reference/index.md +++ b/docs/api-reference/index.md @@ -7,11 +7,10 @@ hide: # API Reference !!! tip - All the functionality of zio-maelstrom is available via two import statements + All the functionality of zio-maelstrom is available via following import statement ```scala import com.bilalfazlani.zioMaelstrom.* - import com.bilalfazlani.zioMaelstrom.protocol.* ``` ## Primitive Types diff --git a/examples/broadcast/src/main/scala/com/example/Main.scala b/examples/broadcast/src/main/scala/com/example/Main.scala index 2e6d319..bdaeba3 100644 --- a/examples/broadcast/src/main/scala/com/example/Main.scala +++ b/examples/broadcast/src/main/scala/com/example/Main.scala @@ -4,7 +4,6 @@ package com.example.broadcast import zio.json.* import zio.* import com.bilalfazlani.zioMaelstrom.* -import com.bilalfazlani.zioMaelstrom.protocol.* // } // input_messages { diff --git a/examples/echo/src/main/scala/com/example/Calculator.scala b/examples/echo/src/main/scala/com/example/Calculator.scala index 00664cd..34e91b5 100644 --- a/examples/echo/src/main/scala/com/example/Calculator.scala +++ b/examples/echo/src/main/scala/com/example/Calculator.scala @@ -2,7 +2,6 @@ package com.example.calculator import zio.json.* import zio.* -import com.bilalfazlani.zioMaelstrom.protocol.* import com.bilalfazlani.zioMaelstrom.* // format: off diff --git a/examples/echo/src/main/scala/com/example/ErrorDocs.scala b/examples/echo/src/main/scala/com/example/ErrorDocs.scala index 3e36e18..802de4b 100644 --- a/examples/echo/src/main/scala/com/example/ErrorDocs.scala +++ b/examples/echo/src/main/scala/com/example/ErrorDocs.scala @@ -1,7 +1,6 @@ package com.example import com.bilalfazlani.zioMaelstrom.* -import com.bilalfazlani.zioMaelstrom.protocol.* import zio.json.* import zio.* diff --git a/examples/echo/src/main/scala/com/example/FileInputDocs.scala b/examples/echo/src/main/scala/com/example/FileInputDocs.scala index 869b6e8..76b5184 100644 --- a/examples/echo/src/main/scala/com/example/FileInputDocs.scala +++ b/examples/echo/src/main/scala/com/example/FileInputDocs.scala @@ -2,7 +2,6 @@ package com.example import zio.* import com.bilalfazlani.zioMaelstrom.* -import com.bilalfazlani.zioMaelstrom.protocol.* import zio.json.* object Main extends ZIOAppDefault { diff --git a/examples/echo/src/main/scala/com/example/IODocs.scala b/examples/echo/src/main/scala/com/example/IODocs.scala index 388cf58..5240b86 100644 --- a/examples/echo/src/main/scala/com/example/IODocs.scala +++ b/examples/echo/src/main/scala/com/example/IODocs.scala @@ -1,7 +1,6 @@ package com.example import com.bilalfazlani.zioMaelstrom.* -import com.bilalfazlani.zioMaelstrom.protocol.* import zio.json.JsonCodec import zio.* diff --git a/examples/echo/src/main/scala/com/example/KvStoreDocs.scala b/examples/echo/src/main/scala/com/example/KvStoreDocs.scala index 5e60046..b2ca2d3 100644 --- a/examples/echo/src/main/scala/com/example/KvStoreDocs.scala +++ b/examples/echo/src/main/scala/com/example/KvStoreDocs.scala @@ -1,7 +1,6 @@ package com.example.kvstore import com.bilalfazlani.zioMaelstrom.* -import com.bilalfazlani.zioMaelstrom.protocol.* import zio.* object SeqKvExample { diff --git a/examples/echo/src/main/scala/com/example/Main.scala b/examples/echo/src/main/scala/com/example/Main.scala index 9368ad4..34802e4 100644 --- a/examples/echo/src/main/scala/com/example/Main.scala +++ b/examples/echo/src/main/scala/com/example/Main.scala @@ -3,7 +3,6 @@ package com.example.echo //imports { import zio.json.{JsonEncoder, JsonDecoder} import zio.{ZIOAppDefault, ZIO} -import com.bilalfazlani.zioMaelstrom.protocol.* import com.bilalfazlani.zioMaelstrom.* //} diff --git a/examples/echo/src/main/scala/com/example/PingPong.scala b/examples/echo/src/main/scala/com/example/PingPong.scala index 1724c38..4b28f71 100644 --- a/examples/echo/src/main/scala/com/example/PingPong.scala +++ b/examples/echo/src/main/scala/com/example/PingPong.scala @@ -2,7 +2,6 @@ package com.example.pingpong import zio.json.* import zio.* -import com.bilalfazlani.zioMaelstrom.protocol.* import com.bilalfazlani.zioMaelstrom.* case class Ping(msg_id: MessageId, `type`: String = "ping") extends Sendable, NeedsReply diff --git a/examples/echo/src/main/scala/com/example/TsoDocs.scala b/examples/echo/src/main/scala/com/example/TsoDocs.scala index ef0377b..3567c22 100644 --- a/examples/echo/src/main/scala/com/example/TsoDocs.scala +++ b/examples/echo/src/main/scala/com/example/TsoDocs.scala @@ -1,7 +1,6 @@ package com.example.tso import com.bilalfazlani.zioMaelstrom.* -import com.bilalfazlani.zioMaelstrom.protocol.* import zio.* object TsoExample { diff --git a/examples/unique-ids/src/main/scala/com/example/Main.scala b/examples/unique-ids/src/main/scala/com/example/Main.scala index f23deea..0c9d74e 100644 --- a/examples/unique-ids/src/main/scala/com/example/Main.scala +++ b/examples/unique-ids/src/main/scala/com/example/Main.scala @@ -1,7 +1,6 @@ package com.example.uniqueIds //imports { -import com.bilalfazlani.zioMaelstrom.protocol.* import com.bilalfazlani.zioMaelstrom.* import zio.json.{JsonDecoder, JsonEncoder} import zio.{ZIOAppDefault, ZIO, Ref, ZLayer} diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/CallbackRegistry.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/CallbackRegistry.scala index b21f553..dcec615 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/CallbackRegistry.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/CallbackRegistry.scala @@ -1,7 +1,6 @@ package com.bilalfazlani.zioMaelstrom import zio.* -import protocol.* import zio.concurrent.ConcurrentMap private case class TimedPromise(promise: Promise[AskError, GenericMessage], startTime: Long) { diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Context.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Context.scala index 7cb5884..f96feef 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Context.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Context.scala @@ -1,7 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* - case class Context(me: NodeId, others: Set[NodeId]) object Context: diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/DSL.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/DSL.scala index 63f745d..372a3cc 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/DSL.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/DSL.scala @@ -1,7 +1,6 @@ package com.bilalfazlani.zioMaelstrom import java.nio.file.Path -import protocol.* import zio.json.* import zio.* diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/GenericMessage.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/GenericMessage.scala index a1207a1..dbb34dd 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/GenericMessage.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/GenericMessage.scala @@ -1,5 +1,4 @@ package com.bilalfazlani.zioMaelstrom -package protocol import zio.json.ast.Json import zio.json.JsonDecoder @@ -12,9 +11,13 @@ private[zioMaelstrom] case class GenericDetails( extension (parent: Json) private def getChildOptional[A: JsonDecoder](field: String): Either[String, Option[A]] = - parent.asObject.flatMap(_.get(field)).fold(Right(None))(json => JsonDecoder[A].fromJsonAST(json).map(Some(_))) + parent.asObject + .flatMap(_.get(field)) + .fold(Right(None))(json => JsonDecoder[A].fromJsonAST(json).map(Some(_))) private def getChild[A: JsonDecoder](field: String): Either[String, A] = - parent.asObject.flatMap(_.get(field)).fold(Left(s"missing field '$field'"))(json => JsonDecoder[A].fromJsonAST(json)) + parent.asObject + .flatMap(_.get(field)) + .fold(Left(s"missing field '$field'"))(json => JsonDecoder[A].fromJsonAST(json)) private[zioMaelstrom] object GenericDetails { val empty = GenericDetails(None, None, None) @@ -60,12 +63,22 @@ private[zioMaelstrom] case class GenericMessage( private[zioMaelstrom] object GenericMessage { given JsonDecoder[GenericMessage] = JsonDecoder[Json].mapOrFail[GenericMessage](ast => for { - obj <- ast.asObject.toRight("message is not a json object") - src <- obj.getChild[NodeId]("src") - dest <- obj.getChild[NodeId]("dest") - body <- obj.getChildOptional[Json]("body") - details <- body.fold(Right(GenericDetails.empty))(body => JsonDecoder[GenericDetails].fromJsonAST(body)) - } yield GenericMessage(src, dest, details.messageType, details.messageId, details.inReplyTo, body, ast) + obj <- ast.asObject.toRight("message is not a json object") + src <- obj.getChild[NodeId]("src") + dest <- obj.getChild[NodeId]("dest") + body <- obj.getChildOptional[Json]("body") + details <- body.fold(Right(GenericDetails.empty))(body => + JsonDecoder[GenericDetails].fromJsonAST(body) + ) + } yield GenericMessage( + src, + dest, + details.messageType, + details.messageId, + details.inReplyTo, + body, + ast + ) ) } diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Initializer.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Initializer.scala index cf88251..91c4d36 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Initializer.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Initializer.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.stream.{ZStream, ZSink} import zio.json.JsonDecoder diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/InputChannel.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/InputChannel.scala index 0994fa1..060903e 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/InputChannel.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/InputChannel.scala @@ -2,7 +2,6 @@ package com.bilalfazlani.zioMaelstrom import zio.{Scope, ZIO, ZLayer} import zio.json.JsonDecoder -import protocol.* private[zioMaelstrom] trait InputChannel: def partitionInputs: ZIO[Scope, Nothing, Inputs] diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageIdStore.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageIdStore.scala index c0f5cd1..7b51ed4 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageIdStore.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageIdStore.scala @@ -1,7 +1,6 @@ package com.bilalfazlani.zioMaelstrom import zio.{ZIO, Ref, ZLayer} -import protocol.MessageId trait MessageIdStore: def next: ZIO[Any, Nothing, MessageId] diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageSender.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageSender.scala index 6d92b20..a3ff382 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageSender.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/MessageSender.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.json.{JsonEncoder, JsonDecoder} @@ -54,8 +53,8 @@ private case class MessageSenderLive( to: NodeId, timeout: Duration ): IO[AskError, Res] = for { - _ <- send(body, to) - _ <- logger.debug(s"waiting for reply from ${to} for message id ${body.msg_id}...") + _ <- send(body, to) + _ <- logger.debug(s"waiting for reply from ${to} for message id ${body.msg_id}...") genericMessage <- ZIO.scoped(callbackRegistry.awaitCallback(body.msg_id, to, timeout)) decoded <- if genericMessage.isError then { diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/OutputChannel.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/OutputChannel.scala index f273e3b..f777329 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/OutputChannel.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/OutputChannel.scala @@ -1,7 +1,6 @@ package com.bilalfazlani.zioMaelstrom import zio.* -import protocol.* import zio.json.{JsonEncoder, EncoderOps} private[zioMaelstrom] trait OutputChannel: diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Protocol.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Protocol.scala index 2f67c5b..270b242 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Protocol.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/Protocol.scala @@ -1,5 +1,4 @@ package com.bilalfazlani.zioMaelstrom -package protocol import zio.json.* import scala.annotation.targetName diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/RequestHandler.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/RequestHandler.scala index 15ee24e..4e97ebb 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/RequestHandler.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/RequestHandler.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.json.* diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvImpl.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvImpl.scala index 9ef7058..05b16ad 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvImpl.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvImpl.scala @@ -2,7 +2,6 @@ package com.bilalfazlani.zioMaelstrom import zio.* import zio.json.* -import protocol.* private[zioMaelstrom] trait KvService: diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvMessages.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvMessages.scala index 71536e5..6ce1c01 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvMessages.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/KvMessages.scala @@ -2,7 +2,6 @@ package com.bilalfazlani.zioMaelstrom import zio.* import zio.json.* -import protocol.* private[zioMaelstrom] case class KvRead[Key](key: Key, msg_id: MessageId, `type`: String = "read") extends NeedsReply, diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinKv.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinKv.scala index 4a25435..0741f14 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinKv.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinKv.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.json.* diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinTso.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinTso.scala index 902bbc0..2fc4f05 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinTso.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LinTso.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.json.* diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LwwKv.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LwwKv.scala index 8cf6b2e..cc07837 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LwwKv.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/LwwKv.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.json.* diff --git a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/SeqKv.scala b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/SeqKv.scala index b656977..a73957e 100644 --- a/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/SeqKv.scala +++ b/zio-maelstrom/src/main/scala/com/bilal-fazlani/zio-maelstrom/services/SeqKv.scala @@ -1,6 +1,5 @@ package com.bilalfazlani.zioMaelstrom -import protocol.* import zio.* import zio.json.* diff --git a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RPCTest.scala b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RPCTest.scala index bd4dc25..5e1037c 100644 --- a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RPCTest.scala +++ b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RPCTest.scala @@ -2,7 +2,6 @@ package com.bilalfazlani.zioMaelstrom import zio.test.* import zio.* -import com.bilalfazlani.zioMaelstrom.protocol.* import zio.json.* import testkit.TestRuntime import testkit.TestRuntime.* diff --git a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RequestHandlerTests.scala b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RequestHandlerTests.scala index ecbbd66..a9251b3 100644 --- a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RequestHandlerTests.scala +++ b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/RequestHandlerTests.scala @@ -5,7 +5,6 @@ import zio.* import zio.json.* import testkit.TestRuntime import testkit.TestRuntime.* -import com.bilalfazlani.zioMaelstrom.protocol.* object RequestHandlerTest extends ZIOSpecDefault { def isCI = sys.env.get("CI").contains("true") diff --git a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/KvFake.scala b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/KvFake.scala index d28733b..18bc082 100644 --- a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/KvFake.scala +++ b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/KvFake.scala @@ -3,7 +3,6 @@ package testkit import zio.* import zio.json.* -import protocol.* case class KvFake(ref: Ref.Synchronized[Map[Any, Any]], messageIdStore: MessageIdStore) extends KvService: diff --git a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/TestRuntime.scala b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/TestRuntime.scala index 957b2dd..53209c5 100644 --- a/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/TestRuntime.scala +++ b/zio-maelstrom/src/test/scala/com/bilal-fazlani/zio-maelstrom/testkit/TestRuntime.scala @@ -2,7 +2,6 @@ package com.bilalfazlani.zioMaelstrom package testkit import zio.* -import protocol.* import zio.json.{JsonEncoder, EncoderOps} type TestRuntime = MaelstromRuntime & Queue[Message[Sendable]] & Queue[String] & CallbackRegistry