imbibe 0.0.1

a cosmos chain indexer
Documentation
use config::{ConfigError, Environment, File, FileFormat};
use serde::Deserialize;

#[derive(Deserialize)]
pub struct Config {
	pub app: AppConfig,

	#[cfg(feature = "persistence")]
	pub db: DbConfig,

	#[cfg(feature = "indexer")]
	pub indexer: IndexerConfig,

	#[cfg(feature = "querier")]
	pub querier: QuerierConfig,

	#[cfg(not(feature = "disable-telemetry"))]
	pub telemetry: TelemetryConfig,
}

#[derive(Deserialize)]
pub struct AppConfig {
	pub name: String,
}

#[cfg(feature = "persistence")]
#[derive(Deserialize)]
pub struct DbConfig {
	pub db_url: String,
	pub max_conn: core::num::NonZeroUsize,
}

#[cfg(feature = "indexer")]
#[derive(Deserialize)]
pub struct IndexerConfig {
	pub tm_ws_url: String,
	pub batch: core::num::NonZeroUsize,
	pub workers: core::num::NonZeroUsize,
}

#[cfg(feature = "querier")]
#[derive(Deserialize)]
pub struct QuerierConfig {
	pub listen: String,
}

#[cfg(not(feature = "disable-telemetry"))]
#[derive(Deserialize)]
pub struct TelemetryConfig {
	pub trace_exporter: String,
	pub timeout_millis: u64,
}

pub fn get_configuration() -> Result<Config, ConfigError> {
	config::Config::builder()
		.add_source(File::from_str(
			include_str!("base_config.ron"),
			FileFormat::Ron,
		))
		.add_source(
			Environment::with_prefix(Config::CONFIG_ENV_PREFIX)
				.prefix_separator("_")
				.separator("__"),
		)
		.build()?
		.try_deserialize()
}

impl Config {
	const CONFIG_ENV_PREFIX: &str = "IMBIBED";
}