diff --git a/settings.gradle.kts b/settings.gradle.kts index 9fbb4411..1d70b24d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,7 +18,8 @@ include( "deob-map", "deob-processor", "game", - "util" + "util", + "yaml" ) if (Files.exists(rootProject.projectDir.toPath().resolve("nonfree/build.gradle.kts"))) { diff --git a/yaml/build.gradle.kts b/yaml/build.gradle.kts new file mode 100644 index 00000000..2e5b4b1a --- /dev/null +++ b/yaml/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + `maven-publish` + kotlin("jvm") +} + +dependencies { + api("com.fasterxml.jackson.core:jackson-databind:${Versions.jackson}") + api("com.google.inject:guice:${Versions.guice}") + + implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${Versions.jackson}") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:${Versions.jackson}") +} + +publishing { + publications.create("maven") { + from(components["java"]) + + pom { + packaging = "jar" + name.set("OpenRS2 YAML") + description.set( + """ + Guava module for creating a YAML ObjectMapper. + """.trimIndent() + ) + } + } +} diff --git a/yaml/src/main/java/dev/openrs2/yaml/ObjectMapperProvider.kt b/yaml/src/main/java/dev/openrs2/yaml/ObjectMapperProvider.kt new file mode 100644 index 00000000..519459f7 --- /dev/null +++ b/yaml/src/main/java/dev/openrs2/yaml/ObjectMapperProvider.kt @@ -0,0 +1,18 @@ +package dev.openrs2.yaml + +import com.fasterxml.jackson.databind.Module +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory +import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import javax.inject.Inject +import javax.inject.Provider + +class ObjectMapperProvider @Inject constructor( + private val modules: Set<@JvmSuppressWildcards Module> +) : Provider { + override fun get(): ObjectMapper { + return ObjectMapper(YAMLFactory()) + .registerKotlinModule() + .registerModules(modules) + } +} diff --git a/yaml/src/main/java/dev/openrs2/yaml/YamlModule.kt b/yaml/src/main/java/dev/openrs2/yaml/YamlModule.kt new file mode 100644 index 00000000..2623ad3c --- /dev/null +++ b/yaml/src/main/java/dev/openrs2/yaml/YamlModule.kt @@ -0,0 +1,17 @@ +package dev.openrs2.yaml + +import com.fasterxml.jackson.databind.Module +import com.fasterxml.jackson.databind.ObjectMapper +import com.google.inject.AbstractModule +import com.google.inject.Scopes +import com.google.inject.multibindings.Multibinder + +class YamlModule : AbstractModule() { + override fun configure() { + Multibinder.newSetBinder(binder(), Module::class.java) + + bind(ObjectMapper::class.java) + .toProvider(ObjectMapperProvider::class.java) + .`in`(Scopes.SINGLETON) + } +}