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 UnsafeUnpin 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
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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