Confide core

confidecore

License

License

Categories

Categories

IDE Development Tools
GroupId

GroupId

io.estatico
ArtifactId

ArtifactId

confide-core_2.12
Last Version

Last Version

0.0.3
Release Date

Release Date

Type

Type

jar
Description

Description

Confide core
confidecore
Project URL

Project URL

https://github.com/estatico/confide
Project Organization

Project Organization

io.estatico
Source Code Management

Source Code Management

https://github.com/estatico/confide

Download confide-core_2.12

How to add to project

<!-- https://jarcasting.com/artifacts/io.estatico/confide-core_2.12/ -->
<dependency>
    <groupId>io.estatico</groupId>
    <artifactId>confide-core_2.12</artifactId>
    <version>0.0.3</version>
</dependency>
// https://jarcasting.com/artifacts/io.estatico/confide-core_2.12/
implementation 'io.estatico:confide-core_2.12:0.0.3'
// https://jarcasting.com/artifacts/io.estatico/confide-core_2.12/
implementation ("io.estatico:confide-core_2.12:0.0.3")
'io.estatico:confide-core_2.12:jar:0.0.3'
<dependency org="io.estatico" name="confide-core_2.12" rev="0.0.3">
  <artifact name="confide-core_2.12" type="jar" />
</dependency>
@Grapes(
@Grab(group='io.estatico', module='confide-core_2.12', version='0.0.3')
)
libraryDependencies += "io.estatico" % "confide-core_2.12" % "0.0.3"
[io.estatico/confide-core_2.12 "0.0.3"]

Dependencies

compile (3)

Group / Artifact Type Version
org.scala-lang : scala-library jar 2.12.1
com.chuusai : shapeless_2.12 jar 2.3.2
com.typesafe : config jar 1.3.1

test (2)

Group / Artifact Type Version
org.scalacheck : scalacheck_2.12 jar 1.13.4
org.scalatest : scalatest_2.12 jar 3.0.0

Project Modules

There are no modules declared in this project.

Confide

Build Status Gitter Maven Central

Automatic configuration decoding for Scala

Setup

SBT

val confideVersion = "0.0.3"

libraryDependencies ++= Seq(
  "io.estatico" %% "confide-core" % confideVersion,
  "io.estatico" %% "confide-macros" % confideVersion,
)

To be able to use the @Conf macro, you'll need the Paradise compiler plugin.

addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full),

Maven

<properties>
  ...
  <confide.version>0.0.3</confide.version>
</properties>
...
<dependencies>
  ...
  <dependency>
    <groupId>io.estatico</groupId>
    <artifactId>confide-core_${scala.binaryVersion}</artifactId>
    <version>${confide.version}</version>
  </dependency>
  <dependency>
    <groupId>io.estatico</groupId>
    <artifactId>confide-macros_${scala.binaryVersion}</artifactId>
    <version>${confide.version}</version>
  </dependency>
</dependencies>

To be able to use the @Conf macro, you'll need the Paradise compiler plugin.

<pluginManagement>
  ...
  <plugins>
    <plugin>
      <groupId>org.scala-tools</groupId>
      <artifactId>maven-scala-plugin</artifactId>
      <version>${scala.plugin.version}</version>
      <configuration>
        <compilerPlugins>
          <compilerPlugin>
            <groupId>org.scalamacros</groupId>
            <artifactId>paradise_${scala.version}</artifactId>
            <version>2.1.0</version>
          </compilerPlugin>
        </compilerPlugins>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

Usage

Given the configuration file below -

api {
  cache {
    enable: true
    ttl: 5m
  }
  greetings = ["Hello", "Hola", "Bonjour"]
}

We can define the following Scala classes to automatically decode the config for us -

import io.estatico.confide._

@Conf final case class AppConfig(
  api: ApiConf
)

@Conf final case class ApiConf(
  cache: CacheConf,
  greetings: List[String]
)

@Conf final case class CacheConf(
  enable: Boolean,
  ttl: FiniteDuration
)

The case classes are pretty self-evident; they simply define the structure of the config we wish to decode.

The @Conf macro will derive an instance of FromConfObj for the annotated case class. FromConf[A] and FromConfObj[A] are type classes which describes how to decode config values to type A. Derivation leverages the wonderful shapeless library. All the @Conf macro does is inject an implicit FromConfObj.derive into the case class' companion object.

scala> ConfideFactory.load[AppConfig]()
AppConfig(ApiConf(CacheConf(true,300000000000 nanoseconds),List(Hello, Hola, Bonjour)))
io.estatico

Estatico Studios LLC

Versions

Version
0.0.3
0.0.2
0.0.1