forked from nova/jmonkey-test
Add monix-nio and make modding sys use it
This commit is contained in:
parent
8f3c08f271
commit
632bcccef3
41
build.sbt
Normal file → Executable file
41
build.sbt
Normal file → Executable file
@ -42,6 +42,7 @@ lazy val root = (project in file(".")).settings(
|
||||
"org.typelevel" %% "cats-effect" % "2.3.0",
|
||||
"io.monix" %% "monix" % "3.2.2",
|
||||
"io.monix" %% "monix-bio" % "1.1.0",
|
||||
"io.monix" %% "monix-nio" % "0.0.9",
|
||||
"io.circe" %% "circe-core" % "0.13.0",
|
||||
"io.circe" %% "circe-generic" % "0.13.0",
|
||||
"com.softwaremill.sttp.client3" %% "core" % "3.0.0",
|
||||
@ -143,7 +144,7 @@ inThisBuild(
|
||||
List(
|
||||
scalaVersion := scalaVersion.value, // 2.11.12, or 2.13.3
|
||||
semanticdbEnabled := true, // enable SemanticDB
|
||||
semanticdbVersion := "4.3.24" // use Scalafix compatible version
|
||||
semanticdbVersion := "4.4.10" // use Scalafix compatible version
|
||||
)
|
||||
)
|
||||
ThisBuild / scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.4.3"
|
||||
@ -157,23 +158,23 @@ scalafixDependencies in ThisBuild += "org.scalalint" %% "rules" % "0.1.4"
|
||||
|
||||
// wartremoverWarnings in (Compile, compile) ++= Seq(Wart.Any, Wart.Serializable)
|
||||
|
||||
wartremoverErrors in (Compile, compile) ++=
|
||||
Warts.allBut(
|
||||
Wart.Any,
|
||||
Wart.NonUnitStatements,
|
||||
// Wart.StringPlusAny,
|
||||
Wart.Overloading,
|
||||
Wart.PublicInference,
|
||||
Wart.Nothing,
|
||||
Wart.Var,
|
||||
Wart.DefaultArguments,
|
||||
// Wart.MutableDataStructures,
|
||||
Wart.ImplicitConversion,
|
||||
Wart.ImplicitParameter,
|
||||
Wart.ToString,
|
||||
Wart.Recursion,
|
||||
Wart.While,
|
||||
Wart.ExplicitImplicitTypes,
|
||||
Wart.ListUnapply
|
||||
)
|
||||
// wartremoverErrors in (Compile, compile) ++=
|
||||
// Warts.allBut(
|
||||
// Wart.Any,
|
||||
// Wart.NonUnitStatements,
|
||||
// // Wart.StringPlusAny,
|
||||
// Wart.Overloading,
|
||||
// Wart.PublicInference,
|
||||
// Wart.Nothing,
|
||||
// Wart.Var,
|
||||
// Wart.DefaultArguments,
|
||||
// // Wart.MutableDataStructures,
|
||||
// Wart.ImplicitConversion,
|
||||
// Wart.ImplicitParameter,
|
||||
// Wart.ToString,
|
||||
// Wart.Recursion,
|
||||
// Wart.While,
|
||||
// Wart.ExplicitImplicitTypes,
|
||||
// Wart.ListUnapply
|
||||
// )
|
||||
// Seq(Wart.FinalCaseClass)
|
||||
|
26
src/main/scala/wow/doge/mygame/subsystems/moddingsystem/ModdingSystem.scala
Normal file → Executable file
26
src/main/scala/wow/doge/mygame/subsystems/moddingsystem/ModdingSystem.scala
Normal file → Executable file
@ -16,9 +16,8 @@ import monix.bio.IO
|
||||
import monix.bio.UIO
|
||||
import monix.reactive.Consumer
|
||||
import monix.reactive.Observable
|
||||
import wow.doge.mygame.utils.IOUtils
|
||||
|
||||
import IOUtils.toIO
|
||||
import wow.doge.mygame.implicits._
|
||||
import wow.doge.mygame.utils.readAsyncL
|
||||
|
||||
@JsonCodec
|
||||
final case class Test1(hello1: String, hello2: String)
|
||||
@ -43,13 +42,20 @@ object ModdingSystem {
|
||||
implicit val eq = Eq.fromUniversalEquals[Error]
|
||||
}
|
||||
|
||||
def readPluginsList2(dir: os.Path) =
|
||||
for {
|
||||
contents <- readAsyncL(dir)
|
||||
} yield ()
|
||||
|
||||
def readPluginsList(dir: os.Path): IO[Error, ArraySeq[Plugin]] =
|
||||
IO(os.read(dir / "plugins.json"))
|
||||
// IO(os.read(dir / "plugins.json"))
|
||||
readAsyncL(dir / "plugins.json")
|
||||
.onErrorHandleWith {
|
||||
case _: FileNotFoundException =>
|
||||
IO.raiseError(FileNotFound(dir / "plugins.json"))
|
||||
case _: NoSuchFileException =>
|
||||
IO.raiseError(FileNotFound(dir / "plugins.json"))
|
||||
case other => IO.terminate(other)
|
||||
}
|
||||
.flatMap(files =>
|
||||
IO.fromEither(parse(files))
|
||||
@ -197,12 +203,12 @@ object ModdingSystem {
|
||||
UIO(readSuccesses.to(List)),
|
||||
UIO(parseFailures.to(List)),
|
||||
UIO(parseSuccesses.to(List)),
|
||||
toIO(
|
||||
Observable
|
||||
.fromIterable(parseSuccesses)
|
||||
.map { case (p, json) => json }
|
||||
.consumeWith(loadBalancedPluginDataMerger)
|
||||
).hideErrors
|
||||
Observable
|
||||
.fromIterable(parseSuccesses)
|
||||
.map { case (p, json) => json }
|
||||
.consumeWith(loadBalancedPluginDataMerger)
|
||||
.toIO
|
||||
.hideErrors
|
||||
)(Result.apply)
|
||||
} yield res
|
||||
|
||||
|
32
src/main/scala/wow/doge/mygame/utils/package.scala
Normal file → Executable file
32
src/main/scala/wow/doge/mygame/utils/package.scala
Normal file → Executable file
@ -1,6 +1,38 @@
|
||||
package wow.doge.mygame
|
||||
|
||||
import java.nio.file.StandardOpenOption
|
||||
|
||||
import monix.bio.UIO
|
||||
import monix.execution.Scheduler
|
||||
import monix.nio.file.AsyncFileChannelConsumer
|
||||
import monix.nio.text.UTF8Codec.utf8Decode
|
||||
import monix.nio.{file => mnf}
|
||||
import wow.doge.mygame.implicits._
|
||||
|
||||
package object utils {
|
||||
def methodName(implicit enclosing: sourcecode.Enclosing) =
|
||||
enclosing.value.split(" ")(0).split("""\.""").last
|
||||
|
||||
def readAsync(
|
||||
path: os.Path,
|
||||
chunkSize: Int = 8192
|
||||
) =
|
||||
UIO
|
||||
.deferAction(implicit s => UIO(mnf.readAsync(path.toNIO, chunkSize)))
|
||||
.flatMap(bytes => UIO(bytes.pipeThrough(utf8Decode)))
|
||||
|
||||
@SuppressWarnings(Array("org.wartremover.warts.TraversableOps"))
|
||||
def readAsyncL(
|
||||
path: os.Path,
|
||||
chunkSize: Int = 8192
|
||||
) =
|
||||
readAsync(path, chunkSize)
|
||||
.flatMap(_.toListL.toIO)
|
||||
.map(_.head)
|
||||
|
||||
def writeAsync(path: os.Path, flags: Seq[StandardOpenOption] = Seq.empty)(
|
||||
implicit s: Scheduler
|
||||
): AsyncFileChannelConsumer =
|
||||
mnf.appendAsync(path.toNIO, 0, flags)
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user