From c1e7e594e8ddd9565fef1666e49cb2fd29ef053f Mon Sep 17 00:00:00 2001 From: Pat Garrity Date: Thu, 2 May 2024 22:09:33 -0500 Subject: [PATCH] (wip) reorganizing, rendering still a pain in the butt --- build.sbt | 37 ++++++++++++++----- .../src/main/scala/gs/log/v0/LogTrace.scala | 16 -------- .../main/scala/gs/log/v0/{ => api}/Log.scala | 9 +++-- .../scala/gs/log/v0/{ => api}/LogLevel.scala | 2 +- .../scala/gs/log/v0/{ => api}/Logger.scala | 2 +- .../gs/log/v0/{ => syntax}/package.scala | 5 ++- .../scala/gs/log/v0/data}/DataRenderer.scala | 2 +- .../main/scala/gs/log/v0/data}/LogData.scala | 2 +- .../scala/gs/log/v0/data}/LogMessage.scala | 2 +- .../main/scala/gs/log/v0/data}/LogTags.scala | 2 +- .../main/scala/gs/log/v0/data}/Loggable.scala | 2 +- .../gs/log/v0/data}/LogMessageTests.scala | 10 ++++- 12 files changed, 52 insertions(+), 39 deletions(-) delete mode 100644 modules/api/src/main/scala/gs/log/v0/LogTrace.scala rename modules/api/src/main/scala/gs/log/v0/{ => api}/Log.scala (96%) rename modules/api/src/main/scala/gs/log/v0/{ => api}/LogLevel.scala (99%) rename modules/api/src/main/scala/gs/log/v0/{ => api}/Logger.scala (98%) rename modules/api/src/main/scala/gs/log/v0/{ => syntax}/package.scala (65%) rename modules/{api/src/main/scala/gs/log/v0 => data/src/main/scala/gs/log/v0/data}/DataRenderer.scala (98%) rename modules/{api/src/main/scala/gs/log/v0 => data/src/main/scala/gs/log/v0/data}/LogData.scala (99%) rename modules/{api/src/main/scala/gs/log/v0 => data/src/main/scala/gs/log/v0/data}/LogMessage.scala (98%) rename modules/{api/src/main/scala/gs/log/v0 => data/src/main/scala/gs/log/v0/data}/LogTags.scala (97%) rename modules/{api/src/main/scala/gs/log/v0 => data/src/main/scala/gs/log/v0/data}/Loggable.scala (97%) rename modules/{api/src/test/scala/gs/log/v0 => data/src/test/scala/gs/log/v0/data}/LogMessageTests.scala (82%) diff --git a/build.sbt b/build.sbt index 6dc740d..c265431 100644 --- a/build.sbt +++ b/build.sbt @@ -20,9 +20,28 @@ val sharedSettings = Seq( /* coverageMinimumStmtTotal := 100, coverageMinimumBranchTotal := 100 */ ) +val Deps = new { + val Cats = new { + val Core: ModuleID = "org.typelevel" %% "cats-core" % "2.10.0" + val Effect: ModuleID = "org.typelevel" %% "cats-effect" % "3.5.4" + } + + val Fs2 = new { + val Core: ModuleID = "co.fs2" %% "fs2-core" % "3.10.2" + } + + val Gs = new { + val Uuid: ModuleID = "gs" %% "gs-uuid-v0" % "0.2.3" + val Datagen: ModuleID = "gs" %% "gs-datagen-core-v0" % "0.1.1" + } + + val MUnit: ModuleID = "org.scalameta" %% "munit" % "1.0.0-M12" +} + lazy val testSettings = Seq( libraryDependencies ++= Seq( - "org.scalameta" %% "munit" % "1.0.0-M12" % Test + Deps.MUnit % Test, + Deps.Gs.Datagen % Test ) ) @@ -32,17 +51,15 @@ lazy val `gs-log` = project .settings(noPublishSettings) .settings(name := s"${gsProjectName.value}-v${semVerMajor.value}") -/** This project contains the logging API and core data types required to use - * `gs-log`. It does not provide an engine. This project can be used within - * libraries, for example, or in conjunction with an engine. - */ +lazy val data = project + .in(file("modules/data")) + .settings(sharedSettings) + .settings(testSettings) + .settings(name := s"${gsProjectName.value}-data-v${semVerMajor.value}") + lazy val api = project .in(file("modules/api")) + .dependsOn(data) .settings(sharedSettings) .settings(testSettings) .settings(name := s"${gsProjectName.value}-api-v${semVerMajor.value}") - .settings( - libraryDependencies ++= Seq( - "gs" %% "gs-uuid-v0" % "0.2.3" - ) - ) diff --git a/modules/api/src/main/scala/gs/log/v0/LogTrace.scala b/modules/api/src/main/scala/gs/log/v0/LogTrace.scala deleted file mode 100644 index 5ef95e3..0000000 --- a/modules/api/src/main/scala/gs/log/v0/LogTrace.scala +++ /dev/null @@ -1,16 +0,0 @@ -package gs.log.v0 - -import gs.uuid.v0.UUID - -/** Trace information for logger output. Based on OpenTelemetry distributed - * traces. - * - * @param traceId - * The unique identifier of the distributed trace. This is a 128-bit UUID. - * @param spanId - * The unique identifier of the current span. This is a 64-bit value. - */ -case class LogTrace( - traceId: UUID, - spanId: Long -) diff --git a/modules/api/src/main/scala/gs/log/v0/Log.scala b/modules/api/src/main/scala/gs/log/v0/api/Log.scala similarity index 96% rename from modules/api/src/main/scala/gs/log/v0/Log.scala rename to modules/api/src/main/scala/gs/log/v0/api/Log.scala index 053f764..d51b986 100644 --- a/modules/api/src/main/scala/gs/log/v0/Log.scala +++ b/modules/api/src/main/scala/gs/log/v0/api/Log.scala @@ -1,4 +1,7 @@ -package gs.log.v0 +package gs.log.v0.api + +import gs.log.v0.data.LogData +import gs.log.v0.data.LogMessage import java.time.Instant import scala.collection.mutable.{Map => MutMap} @@ -148,13 +151,11 @@ object Log: * The instant the [[Log]] was _submitted_. * @param owner * The name of the [[Logger]] which submitted the log. - * @param trace Optional [[LogTrace]] for a specific call. */ case class Metadata( level: LogLevel, timestamp: Instant, - owner: Logger.Name, - trace: Option[LogTrace] + owner: Logger.Name ) end Log diff --git a/modules/api/src/main/scala/gs/log/v0/LogLevel.scala b/modules/api/src/main/scala/gs/log/v0/api/LogLevel.scala similarity index 99% rename from modules/api/src/main/scala/gs/log/v0/LogLevel.scala rename to modules/api/src/main/scala/gs/log/v0/api/LogLevel.scala index b6a8b24..7c3fccc 100644 --- a/modules/api/src/main/scala/gs/log/v0/LogLevel.scala +++ b/modules/api/src/main/scala/gs/log/v0/api/LogLevel.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.api /** Enumerates all supported log levels, which control logging verbosity. * diff --git a/modules/api/src/main/scala/gs/log/v0/Logger.scala b/modules/api/src/main/scala/gs/log/v0/api/Logger.scala similarity index 98% rename from modules/api/src/main/scala/gs/log/v0/Logger.scala rename to modules/api/src/main/scala/gs/log/v0/api/Logger.scala index d4ecb38..17019d7 100644 --- a/modules/api/src/main/scala/gs/log/v0/Logger.scala +++ b/modules/api/src/main/scala/gs/log/v0/api/Logger.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.api /** * Interface for emitting logs. This and [[Log]] are the primary types that diff --git a/modules/api/src/main/scala/gs/log/v0/package.scala b/modules/api/src/main/scala/gs/log/v0/syntax/package.scala similarity index 65% rename from modules/api/src/main/scala/gs/log/v0/package.scala rename to modules/api/src/main/scala/gs/log/v0/syntax/package.scala index 6e718f0..c258e69 100644 --- a/modules/api/src/main/scala/gs/log/v0/package.scala +++ b/modules/api/src/main/scala/gs/log/v0/syntax/package.scala @@ -1,4 +1,7 @@ -package gs.log.v0 +package gs.log.v0.syntax + +import gs.log.v0.data.LogMessage +import gs.log.v0.data.LogData private object LogMessageBuilder extends LogMessage.Builder private object LogDataSyntax extends LogData.Syntax diff --git a/modules/api/src/main/scala/gs/log/v0/DataRenderer.scala b/modules/data/src/main/scala/gs/log/v0/data/DataRenderer.scala similarity index 98% rename from modules/api/src/main/scala/gs/log/v0/DataRenderer.scala rename to modules/data/src/main/scala/gs/log/v0/data/DataRenderer.scala index 76fe50c..3fc51f7 100644 --- a/modules/api/src/main/scala/gs/log/v0/DataRenderer.scala +++ b/modules/data/src/main/scala/gs/log/v0/data/DataRenderer.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.data import scala.reflect.ClassTag import java.time.LocalDate diff --git a/modules/api/src/main/scala/gs/log/v0/LogData.scala b/modules/data/src/main/scala/gs/log/v0/data/LogData.scala similarity index 99% rename from modules/api/src/main/scala/gs/log/v0/LogData.scala rename to modules/data/src/main/scala/gs/log/v0/data/LogData.scala index b0cc474..9536d23 100644 --- a/modules/api/src/main/scala/gs/log/v0/LogData.scala +++ b/modules/data/src/main/scala/gs/log/v0/data/LogData.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.data import java.time.LocalDate diff --git a/modules/api/src/main/scala/gs/log/v0/LogMessage.scala b/modules/data/src/main/scala/gs/log/v0/data/LogMessage.scala similarity index 98% rename from modules/api/src/main/scala/gs/log/v0/LogMessage.scala rename to modules/data/src/main/scala/gs/log/v0/data/LogMessage.scala index bc618a7..bf25c71 100644 --- a/modules/api/src/main/scala/gs/log/v0/LogMessage.scala +++ b/modules/data/src/main/scala/gs/log/v0/data/LogMessage.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.data /** Opaque type (String) for representing messages that should be logged. This * type can _only_ be instantiated using the `log` string interpolator, which diff --git a/modules/api/src/main/scala/gs/log/v0/LogTags.scala b/modules/data/src/main/scala/gs/log/v0/data/LogTags.scala similarity index 97% rename from modules/api/src/main/scala/gs/log/v0/LogTags.scala rename to modules/data/src/main/scala/gs/log/v0/data/LogTags.scala index 8168e25..5ea2ffc 100644 --- a/modules/api/src/main/scala/gs/log/v0/LogTags.scala +++ b/modules/data/src/main/scala/gs/log/v0/data/LogTags.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.data /** Default tag definitions. Tags are arbitrary strings attached to logs in the * `tags` field. They can be used to describe what is being logged. diff --git a/modules/api/src/main/scala/gs/log/v0/Loggable.scala b/modules/data/src/main/scala/gs/log/v0/data/Loggable.scala similarity index 97% rename from modules/api/src/main/scala/gs/log/v0/Loggable.scala rename to modules/data/src/main/scala/gs/log/v0/data/Loggable.scala index c1e2d48..39cede4 100644 --- a/modules/api/src/main/scala/gs/log/v0/Loggable.scala +++ b/modules/data/src/main/scala/gs/log/v0/data/Loggable.scala @@ -1,4 +1,4 @@ -package gs.log.v0 +package gs.log.v0.data import java.time.Instant import java.time.LocalDate diff --git a/modules/api/src/test/scala/gs/log/v0/LogMessageTests.scala b/modules/data/src/test/scala/gs/log/v0/data/LogMessageTests.scala similarity index 82% rename from modules/api/src/test/scala/gs/log/v0/LogMessageTests.scala rename to modules/data/src/test/scala/gs/log/v0/data/LogMessageTests.scala index 8bfe444..4099efd 100644 --- a/modules/api/src/test/scala/gs/log/v0/LogMessageTests.scala +++ b/modules/data/src/test/scala/gs/log/v0/data/LogMessageTests.scala @@ -1,7 +1,9 @@ -package gs.log.v0 +package gs.log.v0.data class LogMessageTests extends munit.FunSuite: + import LogMessageTests.Syntax.* + test("should instantiate a log message from a string literal") { val msg = log"1 2 3 4" assert(msg.str() == "1 2 3 4") @@ -23,3 +25,9 @@ class LogMessageTests extends munit.FunSuite: val expected = s"x = ${x.value.renderBytes()}, y = ${y.value.renderBytes()}" assert(msg.str() == expected) } + +object LogMessageTests: + + private object Syntax extends LogMessage.Builder + +end LogMessageTests