pub struct Config {
pub database_url: String,
pub max_concurrent_jobs: usize,
pub tick_rate_ms: u64,
pub max_retry_attempts: i32,
pub retry_interval_ms: i64,
}Expand description
Application-wide configuration loaded from environment variables.
The struct fields correspond to specific environment variables. Some fields
have default values specified by helper functions (e.g. default_max_concurrent_jobs).
§Fields
database_url: Required. Must be present in the environment asDATABASE_URL.max_concurrent_jobs: Optional. Defaults to4if not set.tick_rate_ms: Optional. Defaults to1000if not set.max_retry_attempts: Optional. Defaults to3if not set.retry_interval_ms: Optional. Defaults to300_000(5 minutes) if not set.
§Example
// Loading from environment:
// 1. Optionally load .env file
// 2. Read config variables (DATABASE_URL is required)
// let cfg = Config::from_env();
// println!("Loaded config: {:?}", cfg);Fields§
§database_url: StringThe URL for your database connection. Must be set via DATABASE_URL.
max_concurrent_jobs: usizeMaximum number of concurrent jobs the application will handle.
Defaults to 4 if not present in the environment.
tick_rate_ms: u64Interval in milliseconds at which some recurring task or loop should tick.
Defaults to 1000 if not set.
max_retry_attempts: i32Number of retry attempts for a failed operation. Defaults to 3.
retry_interval_ms: i64Interval in milliseconds between retries. Defaults to 300_000 (5 minutes).
Implementations§
Source§impl Config
impl Config
Sourcepub fn init() -> Result<(), Box<dyn Error>>
pub fn init() -> Result<(), Box<dyn Error>>
Initializes and sets the global Config once using environment variables.
This function loads a .env file (if present) and then constructs a Config
from the environment using envy::from_env.
It attempts to store the resulting Config in the global static GLOBAL_CONFIG.
If the global config is already set, an error is returned.
§Errors
Returns an error if:
- Any required environment variable is missing (e.g.
DATABASE_URL), - or if the config has already been set and you tried to set it again.
§Example
// Typically called early in the program:
// Config::init().expect("Failed to initialize config");Sourcepub fn from_env() -> Self
pub fn from_env() -> Self
Constructs a new Config from environment variables without setting the global.
This function will:
- Load a
.envfile if present, - Parse environment variables into a
Config.
§Panics
Panics if any required variable (e.g. DATABASE_URL) is missing or invalid.
§Example
let cfg = Config::from_env(); // Panics if required variables are missing
println!("{:?}", cfg);Sourcepub fn get_config() -> &'static Config
pub fn get_config() -> &'static Config
Returns a reference to the globally stored Config.
If the global config has not been set yet, this function will call
Config::from_env to populate it for the first time.
§Example
// Ensure it's initialized once, typically at startup:
// Config::init().ok();
// Retrieve the config anywhere else in the code:
let cfg = Config::get_config();
println!("Current DB URL: {}", cfg.database_url);Trait Implementations§
Source§impl<'de> Deserialize<'de> for Config
impl<'de> Deserialize<'de> for Config
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Config
impl RefUnwindSafe for Config
impl Send for Config
impl Sync for Config
impl Unpin for Config
impl UnwindSafe for Config
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> Self::Output
fn aggregate_filter<P>(self, f: P) -> Self::Output
Source§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self to an expression for Diesel’s query builder. Read more