com.greenfossil.thorium.Configuration.scala Maven / Gradle / Ivy
/*
* Copyright 2022 Greenfossil Pte Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.greenfossil.thorium
import com.typesafe.config.{Config, ConfigFactory}
object Configuration:
def apply(): Configuration = from(getClass.getClassLoader)
def usingPort(port: Int): Configuration =
val configuration = from(getClass.getClassLoader)
configuration.copy(httpConfiguration = configuration.httpConfiguration.copy(httpPort = port))
def from(classLoader: ClassLoader): Configuration =
from(ConfigFactory.load(classLoader))
def from(config: Config): Configuration =
val env = Environment.from(config)
new Configuration(config, env, HttpConfiguration.from(config, env))
case class Configuration(config: Config, environment: Environment, httpConfiguration: HttpConfiguration) :
def httpPort: Int = httpConfiguration.httpPort
def maxRequestLength = httpConfiguration.maxRequestLength
def maxNumConnectionOpt = httpConfiguration.maxNumConnectionOpt
def requestTimeout = httpConfiguration.requestTimeout
def isProd: Boolean = environment.isProd
def isDev: Boolean = environment.isDev
def isDemo: Boolean = environment.isDemo
def isTest: Boolean = environment.isTest
def mode: Mode = environment.mode