Target.kt

package com.hexagontk.injection

import kotlin.reflect.KClass

data class Target<T : Any>(
    val type: KClass<T>,
    val tag: Any = Unit,
) {
    companion object {
        inline fun <reified T: Any> Target(tag: Any = Unit) =
            Target(T::class, tag)
    }

    override fun toString(): String =
        if (tag == Unit) type.toString()
        else "$type with tag '$tag'"
}