Skip to content

Commit

Permalink
JsonMarker#apply to use an Encoder on a scala object
Browse files Browse the repository at this point in the history
  • Loading branch information
nafg committed Aug 15, 2023
1 parent fb3cf80 commit 5e9c0a4
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.github.nafg.cloudlogging.marker

import org.slf4j.Marker

import java.util
import scala.jdk.CollectionConverters._

// based on org.slf4j.helpers.BasicMarker
protected class BasicMarker(name: String, references: Seq[Marker])
extends Marker {
override def getName: String = name
override def add(reference: Marker): Unit =
throw new UnsupportedOperationException
override def hasReferences: Boolean = references.nonEmpty
//noinspection ScalaDeprecation
override def hasChildren: Boolean = hasReferences
override def iterator: util.Iterator[Marker] = references.iterator.asJava
override def remove(referenceToRemove: Marker): Boolean =
throw new UnsupportedOperationException
override def contains(other: Marker): Boolean =
this == other || references.exists(_.contains(other))
override def contains(name: String): Boolean =
this.name == name || references.exists(_.contains(name))
override def equals(obj: Any): Boolean =
if (obj == this)
true
else if (obj == null)
false
else
obj match {
case other: Marker => name == other.getName
case _ => false
}
override def hashCode: Int = name.hashCode
override def toString: String =
getName +
(if (!this.hasReferences) ""
else " [ " + references.map(_.getName).mkString(", ") + " ]")
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
package io.github.nafg.cloudlogging.marker

import scala.jdk.CollectionConverters._

import io.circe.Json
import io.circe.{Encoder, Json}
import org.slf4j.Marker


case class JsonMarker(name: String, data: Json, references: Marker*) extends Marker {
override def getName = name
override def add(reference: Marker): Unit = throw new NotImplementedError
override def remove(reference: Marker) = throw new NotImplementedError
override def hasChildren = hasReferences
override def hasReferences = references.nonEmpty
override def iterator() = references.asJava.iterator()
override def contains(other: Marker) =
this == other || references.exists(_.contains(other))
override def contains(name: String) =
this.name == name || references.exists(_.contains(name))
case class JsonMarker(name: String, data: Json, references: Marker*)
extends BasicMarker(name, references)
object JsonMarker {
def apply[A: Encoder](name: String,
references: Marker*)(data: A): JsonMarker =
JsonMarker(name, Encoder[A].apply(data), references: _*)
}

0 comments on commit 5e9c0a4

Please sign in to comment.