gs-config/src/main/scala/gs/config/v0/BaseConfiguration.scala

32 lines
962 B
Scala

package gs.config.v0
/** Base class for most [[Configuration]] implementations. Provides standard
* support for properly handling default values and parsing strings to the
* correct type, returning the correct errors.
*/
abstract class BaseConfiguration[F[_]] extends Configuration[F]:
protected def handleMissingValue[A](
key: ConfigKey[A]
): Either[ConfigError, A] =
key match
case ConfigKey.WithDefaultValue(_, defaultValue) =>
Right(defaultValue)
case _ =>
Left(ConfigError.MissingValue(key.name))
protected def parse[A: Configurable](
key: ConfigKey[A],
raw: String,
sourceName: String
): Either[ConfigError, A] =
Configurable[A].parse(raw) match
case None =>
Left(
ConfigError.CannotParseValue(
configName = key.name,
candidateValue = raw,
sourceName = sourceName
)
)
case Some(parsed) => Right(parsed)