diff --git a/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/ConfigWriters.scala b/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/ConfigWriters.scala new file mode 100644 index 000000000..d2573ecfa --- /dev/null +++ b/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/ConfigWriters.scala @@ -0,0 +1,23 @@ +package com.avast.sst.doobie.pureconfig + +import com.avast.sst.doobie.DoobieHikariConfig +import doobie.enumerated.TransactionIsolation +import pureconfig.ConfigWriter +import pureconfig.generic.ProductHint +import pureconfig.generic.semiauto.deriveWriter + +trait ConfigWriters { + + implicit protected def hint[T]: ProductHint[T] = ProductHint.default + + implicit val doobieTransactionIsolationWriter: ConfigWriter[TransactionIsolation] = ConfigWriter[String].contramap[TransactionIsolation] { + case TransactionIsolation.TransactionNone => "TRANSACTION_NONE" + case TransactionIsolation.TransactionReadUncommitted => "TRANSACTION_READ_UNCOMMITTED" + case TransactionIsolation.TransactionReadCommitted => "TRANSACTION_READ_COMMITTED" + case TransactionIsolation.TransactionRepeatableRead => "TRANSACTION_REPEATABLE_READ" + case TransactionIsolation.TransactionSerializable => "TRANSACTION_SERIALIZABLE" + } + + implicit val doobieDoobieHikariConfigWriter: ConfigWriter[DoobieHikariConfig] = deriveWriter + +} diff --git a/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/implicits.scala b/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/implicits.scala index 90cf97a4e..51d1c24cc 100644 --- a/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/implicits.scala +++ b/doobie-hikari-pureconfig/src/main/scala/com/avast/sst/doobie/pureconfig/implicits.scala @@ -3,17 +3,21 @@ package com.avast.sst.doobie.pureconfig import pureconfig.ConfigFieldMapping import pureconfig.generic.ProductHint -/** Contains [[pureconfig.ConfigReader]] instances with default "kebab-case" naming convention. */ -object implicits extends ConfigReaders { +/** Contains [[pureconfig.ConfigReader]] and [[pureconfig.ConfigWriter]] instances with default "kebab-case" naming convention. */ +object implicits extends ConfigReaders with ConfigWriters { - /** Contains [[pureconfig.ConfigReader]] instances with "kebab-case" naming convention. + override implicit protected def hint[T]: ProductHint[T] = ProductHint.default + + /** Contains [[pureconfig.ConfigReader]] and [[pureconfig.ConfigWriter]] instances with "kebab-case" naming convention. * * This is alias for the default `implicits._` import. */ - object KebabCase extends ConfigReaders + object KebabCase extends ConfigReaders with ConfigWriters { + override implicit protected def hint[T]: ProductHint[T] = ProductHint.default + } - /** Contains [[pureconfig.ConfigReader]] instances with "camelCase" naming convention. */ - object CamelCase extends ConfigReaders { + /** Contains [[pureconfig.ConfigReader]] and [[pureconfig.ConfigWriter]] instances with "camelCase" naming convention. */ + object CamelCase extends ConfigReaders with ConfigWriters { implicit override protected def hint[T]: ProductHint[T] = ProductHint(ConfigFieldMapping(pureconfig.CamelCase, pureconfig.CamelCase)) } diff --git a/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/ConfigWriters.scala b/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/ConfigWriters.scala new file mode 100644 index 000000000..1f62025b1 --- /dev/null +++ b/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/ConfigWriters.scala @@ -0,0 +1,20 @@ +package com.avast.sst.flyway.pureconfig + +import com.avast.sst.flyway.FlywayConfig +import org.flywaydb.core.api.MigrationVersion +import pureconfig.ConfigWriter +import pureconfig.generic.ProductHint +import pureconfig.generic.semiauto.deriveWriter + +import java.nio.charset.Charset + +trait ConfigWriters { + + implicit protected def hint[T]: ProductHint[T] = ProductHint.default + + implicit private[pureconfig] val flywayCharsetWriter: ConfigWriter[Charset] = ConfigWriter[String].contramap[Charset](_.name) + + implicit val flywayMigrationVersionWriter: ConfigWriter[MigrationVersion] = ConfigWriter[String].contramap[MigrationVersion](_.getVersion) + + implicit val flywayFlywayConfigWriter: ConfigWriter[FlywayConfig] = deriveWriter +} diff --git a/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/implicits.scala b/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/implicits.scala index 5d02df482..04ec4480b 100644 --- a/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/implicits.scala +++ b/flyway-pureconfig/src/main/scala/com/avast/sst/flyway/pureconfig/implicits.scala @@ -3,17 +3,21 @@ package com.avast.sst.flyway.pureconfig import pureconfig.ConfigFieldMapping import pureconfig.generic.ProductHint -/** Contains [[pureconfig.ConfigReader]] instances with default "kebab-case" naming convention. */ -object implicits extends ConfigReaders { +/** Contains [[pureconfig.ConfigReader]] and [[pureconfig.ConfigWriter]] instances with default "kebab-case" naming convention. */ +object implicits extends ConfigReaders with ConfigWriters { - /** Contains [[pureconfig.ConfigReader]] instances with "kebab-case" naming convention. + override implicit protected def hint[T]: ProductHint[T] = ProductHint.default + + /** Contains [[pureconfig.ConfigReader]] and [[pureconfig.ConfigWriter]] instances with "kebab-case" naming convention. * * This is alias for the default `implicits._` import. */ - object KebabCase extends ConfigReaders + object KebabCase extends ConfigReaders with ConfigWriters { + override implicit protected def hint[T]: ProductHint[T] = ProductHint.default + } - /** Contains [[pureconfig.ConfigReader]] instances with "camelCase" naming convention. */ - object CamelCase extends ConfigReaders { + /** Contains [[pureconfig.ConfigReader]] and [[pureconfig.ConfigWriter]] instances with "camelCase" naming convention. */ + object CamelCase extends ConfigReaders with ConfigWriters { implicit override protected def hint[T]: ProductHint[T] = ProductHint(ConfigFieldMapping(pureconfig.CamelCase, pureconfig.CamelCase)) }