Coverage Summary for Class: PrintSerializableMokokiLogger (com.javiersc.mokoki.serialization)
  | Class | 
  Method, %
 | 
  Branch, %
 | 
  Line, %
 | 
  Instruction, %
 | 
  | PrintSerializableMokokiLogger | 
  
    100%
  
  
    (7/7)
  
 | 
  
    100%
  
  
    (8/8)
  
 | 
  
    100%
  
  
    (15/15)
  
 | 
  
    100%
  
  
    (109/109)
  
 | 
  
    | PrintSerializableMokokiLogger$json$1 | 
  
    100%
  
  
    (1/1)
  
 | 
     | 
  
    100%
  
  
    (2/2)
  
 | 
  
    100%
  
  
    (8/8)
  
 | 
  
  
    | PrintSerializableMokokiLogger$log$$inlined$ansiColor$1 | 
  
    0%
  
  
    (0/1)
  
 | 
     | 
  
  | Total | 
  
    88.9%
  
  
    (8/9)
  
 | 
  
    100%
  
  
    (8/8)
  
 | 
  
    100%
  
  
    (17/17)
  
 | 
  
    100%
  
  
    (117/117)
  
 | 
 package com.javiersc.mokoki.serialization
 
 import com.javiersc.kotlin.stdlib.ansiColor
 import com.javiersc.mokoki.MokokiLogger
 import com.javiersc.mokoki.Priority
 import com.javiersc.mokoki.serialization.internal.buildMokokiSerializationMessage
 import kotlin.reflect.KClass
 import kotlin.reflect.KType
 import kotlinx.serialization.KSerializer
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.modules.EmptySerializersModule
 import kotlinx.serialization.modules.SerializersModule
 import kotlinx.serialization.serializerOrNull
 
 public open class PrintSerializableMokokiLogger(
     private val minPriority: Priority = Priority.DEBUG,
 ) : MokokiLogger {
 
     override var useCompatibleMode: Boolean = false
 
     public var serializersModule: SerializersModule = EmptySerializersModule
 
     internal val json: Json
         get() = Json {
             prettyPrint = true
             serializersModule = [email protected]
         }
 
     override fun isLoggable(priority: Priority): Boolean = priority.isLoggable(minPriority)
 
     override fun <T : Any> log(
         priority: Priority,
         tag: String?,
         kClass: KClass<T>,
         kType: KType,
         message: T
     ) {
         val lines: List<String> = buildLines(serializer(kType, message), priority, tag, message)
 
         for (line in lines) {
             println(line.ansiColor(priority.ansiColor))
         }
     }
 
     internal fun <T : Any> buildLines(
         serializer: KSerializer<Any?>?,
         priority: Priority,
         tag: String?,
         message: T
     ): List<String> {
         val lines: List<String> =
             if (serializer != null) {
                 buildMokokiSerializationMessage(priority, tag, json, serializer, message)
             } else {
                 buildMokokiSerializationMessage(priority, tag, json, "$message")
             }
         return lines
     }
 
     internal fun <T> serializer(kType: KType, message: T): KSerializer<Any?>? =
         serializerOrNull(kType).takeIf { message !is String }
 }