package gs.config.v0 /** Defines some piece of configuration. * * See: * * - [[ConfigKey.Required]] * - [[ConfigKey.WithDefaultValue]] * * @tparam A * The type of data referenced by this key. This type must be * [[Configurable]]. */ sealed trait ConfigKey[A: Configurable]: def name: ConfigName object ConfigKey: /** Defines a piece of configuration that is required and does not have any * default value. If the value referenced by the name cannot be found, an * [[ConfigError.MissingValue]] is returned. * * @param name * The name of this configuration. */ case class Required[A: Configurable]( name: ConfigName ) extends ConfigKey[A] /** Defines a piece of configuration that has a default value. If the value * referenced by the name cannot be found, the default is used. * * @param name * The name of this piece of configuration. * @param defaultValue * The default value for this configuration. */ case class WithDefaultValue[A: Configurable]( name: ConfigName, defaultValue: () => A ) extends ConfigKey[A]