Skip to content

Commit

Permalink
Update more documentations (#1061)
Browse files Browse the repository at this point in the history
Fix all build issues
  • Loading branch information
afsalthaj committed Feb 22, 2023
1 parent a53c532 commit b5e94ca
Show file tree
Hide file tree
Showing 42 changed files with 200 additions and 749 deletions.
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,7 @@ import eu.timepit.refined.api.Refined
import eu.timepit.refined.collection.NonEmpty
import eu.timepit.refined.numeric.GreaterEqual
import zio._
import zio.config.magnolia.{describe, descriptor}
import zio.config.typesafe.TypesafeConfigSource
import zio.config._, typesafe._, magnolia._

sealed trait DataSource

Expand Down Expand Up @@ -116,8 +115,8 @@ object ZIOConfigExample extends ZIOAppDefault {
def run =
for {
_ <- ZIO.unit
source = TypesafeConfigSource.fromHoconString(json)
desc = descriptor[DataSource] from source
source = ConfigProvider.fromHoconString(json)
desc = deriveConfig[DataSource] from source
dataSource <- read(desc)
// Printing Auto Generated Documentation of Application Config
_ <- Console.printLine(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,10 @@ import com.amazonaws.services.simplesystemsmanagement.{
AWSSimpleSystemsManagementClientBuilder
}
import zio.stream.ZStream
import zio.{Chunk, Task, ZIO}
import zio.{Chunk, Config, ConfigProvider, Task, ZIO}

import scala.jdk.CollectionConverters._

import zio.ConfigProvider
import zio.Config

object ParameterStoreConfigProvider {
def from(
basePath: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import com.amazonaws.services.simplesystemsmanagement.{
AWSSimpleSystemsManagementClientBuilder
}
import zio._
import zio.config._

package object parameterstore {

Expand Down
5 changes: 1 addition & 4 deletions contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,6 @@ that all assertions in the example holds true even after your change.

```
cd zio-config
rm -r website/build/
./sbt ++2.12.13! docs/docusaurusCreateSite
cd ./website/build/zio-config/
npm run start
./sbt docs/buildWebsite
```
18 changes: 2 additions & 16 deletions core/shared/src/main/scala/zio/config/ConfigDocsModule.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package zio.config

import zio.Config

trait ConfigDocsModule {
import Table._

Expand Down Expand Up @@ -546,8 +548,6 @@ trait ConfigDocsModule {
}
}

import ConfigDocs.{DynamicMap => DocsMap, Leaf => DocsLeaf}

/**
* Generate documentation based on the `Config`, where a
* `Config` is a structure representing the logic to fetch the application config
Expand All @@ -563,8 +563,6 @@ trait ConfigDocsModule {
* generatedDocs(configDescriptor).toTable.toGithubFlavouredMarkdown
* }}}
*/
import zio.Config
import zio.{Config, ConfigProvider}, Config._
final def generateDocs[A](config: zio.Config[A]): ConfigDocs = {
def loop[B](
descriptions: List[ConfigDocs.Description],
Expand Down Expand Up @@ -640,18 +638,6 @@ trait ConfigDocsModule {
loop(descriptions, a.second, None, alreadySeen)
)

case Config.Fallback(left, right) =>
ConfigDocs.OrElse(
loop(descriptions, left, None, alreadySeen),
loop(descriptions, right, None, alreadySeen)
)

case Config.FallbackWith(left, right, _) =>
ConfigDocs.OrElse(
loop(descriptions, left, None, alreadySeen),
loop(descriptions, right, None, alreadySeen)
)

}

loop(Nil, config, None, Set.empty)
Expand Down
2 changes: 1 addition & 1 deletion core/shared/src/main/scala/zio/config/IndexedFlat.scala
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ object IndexedFlat {
loop(tail, s"$value[$index]" :: path)
case KeyComponent.KeyName(value) :: tail =>
loop(tail, value :: path)
case _ =>
case _ =>
Chunk.fromIterable(path.reverse)
}

Expand Down
13 changes: 3 additions & 10 deletions core/shared/src/main/scala/zio/config/syntax/ConfigSyntax.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import zio.{Chunk, Config, ConfigProvider, IO, Trace, ZIO}
import java.util.UUID
import scala.util.control.NonFatal

import TupleConversion._

// Backward compatible approach to minimise the client changes
final case class Read[A](config: Config[A], configProvider: ConfigProvider)

Expand All @@ -17,13 +15,9 @@ final case class Read[A](config: Config[A], configProvider: ConfigProvider)
trait ConfigSyntax {

// Backward compatible approach to minimise the client changes

@deprecated("Use configProvider.load(config)", since = "4.0.0")
final def read[A](reader: Read[A]): IO[Config.Error, A] =
reader.configProvider.load(reader.config)

import zio.config.VersionSpecificSupport._

implicit class ConfigErrorOps(error: Config.Error) {
self =>

Expand Down Expand Up @@ -349,10 +343,9 @@ trait ConfigSyntax {
def loadIndexed[A](path: IndexedFlat.ConfigPath, primitive: Config.Primitive[A], split: Boolean)(implicit
trace: Trace
): IO[Config.Error, Chunk[A]] = {
val pathString = makePathString(IndexedFlat.ConfigPath.toPath(path))
val name = path.lastOption.getOrElse(IndexedFlat.KeyComponent.KeyName("<unnamed>"))
val description = primitive.description
val valueOpt = map.get(pathString)
val pathString = makePathString(IndexedFlat.ConfigPath.toPath(path))
val name = path.lastOption.getOrElse(IndexedFlat.KeyComponent.KeyName("<unnamed>"))
val valueOpt = map.get(pathString)

for {
value <- ZIO
Expand Down
3 changes: 1 addition & 2 deletions core/shared/src/test/scala/zio/config/GenerateDocsTest.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package zio.config

import zio.Config
import zio.test.Assertion._
import zio.test.TestAspect.ignore
import zio.test._
import zio.{Config, ConfigProvider}

import Config._

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import scala.annotation.implicitNotFound

@implicitNotFound(
"Can't derive Config for `List[T]`, `Option[T]` or `Either[A, B]` directly." +
" Wrap it with a `case class Config(list: List[T])` or use `listOf(descriptor[T])` manually."
" Wrap it with a `case class Config(list: List[T])` or use `listOf(deriveConfig[T])` manually."
)
sealed trait NeedsDerive[+T]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ object NeedsDerive extends NeedsDerive[Nothing] {

@implicitAmbiguous(
"Can't derive ConfigDescriptor for `List[T]` directly." +
" Wrap it with a `case class Config(list: List[T])` or use `listOf(descriptor[T])` manually."
" Wrap it with a `case class Config(list: List[T])` or use `Config.listOf(deriveConfig[T])` manually."
)
implicit def needsDeriveAmbiguousList1: NeedsDerive[List[Nothing]] = NeedsDerive
implicit def needsDeriveAmbiguousList2: NeedsDerive[List[Nothing]] = NeedsDerive
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ case class DetailsWrapped(detail: Detail) extends X
```scala
import zio.config._

descriptor[MyConfig].mapKey(toKebabCase)
deriveConfig[MyConfig].mapKey(toKebabCase)
```

With the above change`firstName` and `lastName` in the above HOCON example can be `first-name` and `last-name`
Expand Down Expand Up @@ -193,28 +193,28 @@ This is because zio-config-magnolia failed to derive an instance of Descriptor f
In order to provide implicit instances, following choices are there

```
import zio.config.magnolia.{Descriptor, descriptor}
import zio.config.magnolia._
implicit val awsRegionDescriptor: Descriptor[Aws.Region] =
Descriptor[String].map(string => AwsRegion.from(string))
implicit val awsRegionDescriptor: DeriveConfig[Aws.Region] =
DeriveConfig[String].map(string => AwsRegion.from(string))
```

Now `descriptor[Execution]` compiles.
Now `deriveConfig[Execution]` compiles.

Custom descriptors are also needed in case you use value classes to describe your configuration. You can use them
together with automatic derivation and those implicit custom descriptors will be taken automatically into account

```scala
import zio.config.magnolia.{descriptor, Descriptor}
import zio.config.magnolia._

final case class AwsRegion(value: String) extends AnyVal {
override def toString: String = value
}

object AwsRegion {
implicit val descriptor: Descriptor[AwsRegion] =
Descriptor[String].map(AwsRegion(_))
implicit val descriptor: DeriveConfig[AwsRegion] =
DeriveConfig[String].map(AwsRegion(_))
}
```

Expand Down Expand Up @@ -266,7 +266,7 @@ case class C(y: String) extends A
case class Config(a: A)
```

With the above config, `descriptor[A]` can read following source.
With the above config, `deriveConfig[A]` can read following source.

```scala
{
Expand Down Expand Up @@ -377,5 +377,5 @@ val str =
}
"""

read(descriptorForPureConfig[AppConfig] from ConfigSource.fromHoconString(str))
read(deriveConfig[AppConfig] from ConfigProvider.fromHoconString(str))
```
21 changes: 10 additions & 11 deletions docs/automatic-validations.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ There are various ways that zio-config can interact with refined library.
Take a look at `zio.config.refined` package.

```scala mdoc:silent
import zio.Config
import zio.ConfigProvider
import zio.config._, refined._

```
Expand Down Expand Up @@ -61,15 +63,13 @@ This shows the composable nature of zio-config.
Take a look at the below example

```scala mdoc:silent
import zio.config.magnolia.descriptor

import eu.timepit.refined._, api._, numeric._, collection._
import Config.list
import zio.config.magnolia.deriveConfig

case class MyConfig(url: String, port: Int)

val configs: Config[List[MyConfig]] =
listOf("databases")(descriptor[MyConfig])
Config.listOf("databases", deriveConfig[MyConfig])

// A list of database configs, such that size should be greater than 2.
val databaseList: Config[Refined[List[MyConfig], Size[Greater[W.`2`.T]]]] =
Expand All @@ -81,30 +81,29 @@ Take a look at the below example
You can also use auto derivations with refined.

```scala mdoc:silent
import zio.ConfigProvider
import eu.timepit.refined.W
import eu.timepit.refined.api.Refined
import eu.timepit.refined.collection.{ NonEmpty, Size }
import zio.config.magnolia.descriptor
import zio.config.magnolia.deriveConfig

object RefinedReadConfig extends App {
case class RefinedProd(
ldap: Refined[String, NonEmpty],
port: Refined[Int, GreaterEqual[W.`1024`.T]],
dbUrl: Option[Refined[String, NonEmpty]],
long: Refined[Long, GreaterEqual[W.`1024`.T]]
dbUrl: Option[Refined[String, NonEmpty]]
)

val configMap =
Map(
"LDAP" -> "ldap",
"PORT" -> "1999",
"DBURL" -> "ddd",
"LONG" -> "1234"
"DBURL" -> "ddd"
)

val result =
ConfigProvider.from(configMap).load(deriveConfig[RefinedProd].mapKey(_.toUpperCase)))
ConfigProvider.fromMap(configMap).load(deriveConfig[RefinedProd].mapKey(_.toUpperCase))

// RefinedProd(ldap,1999,Some(ddd),1234)
// RefinedProd(ldap,1999,Some(ddd))
}
```
Loading

0 comments on commit b5e94ca

Please sign in to comment.