Skip to main content

EnvFileSource

Struct EnvFileSource 

Source
pub struct EnvFileSource { /* private fields */ }
Expand description

Loads secrets from a .env file.

This struct parses a .env file at construction time and caches the key-value pairs. Once constructed, the source can be cloned and reused; each call to load returns a copy of the cached map.

§Supported syntax

  • KEY=VALUE: plain value
  • KEY="quoted value": double-quoted values with quotes stripped
  • KEY='quoted value': single-quoted values with quotes stripped
  • export KEY=VALUE: optional export prefix followed by whitespace (ignored)
  • # comment: lines starting with # are skipped
  • Blank lines: ignored
  • Inline comments: KEY=VALUE # comment (trailing comments on unquoted values only; quoted values preserve all characters including #)
  • UTF-8 BOM: stripped from the start of the file if present

§Errors

Construction fails if the file does not exist, is unreadable, or contains invalid syntax. Use load_optional for paths that may not exist.

Implementations§

Source§

impl EnvFileSource

Source

pub fn load(path: impl Into<PathBuf>) -> Result<Self, SecretError>

Load from path, requiring the file to exist.

Returns SecretError::FileNotFound if the file does not exist, or SecretError::Io if the file is unreadable. Use this when the path was explicitly provided by the user (e.g. via --env-file CLI flag).

For optional files (like the default .env), use load_optional instead.

§Errors

Returns an error if the file does not exist, cannot be read, or contains invalid syntax.

§Examples
use lightshuttle_secrets::EnvFileSource;

let source = EnvFileSource::load(".env")?;
println!("Loaded {} secrets", source.len());
Source

pub fn load_optional( path: impl Into<PathBuf>, ) -> Result<Option<Self>, SecretError>

Load from path if it exists, returning None if the file is absent.

This is useful for optional configuration files like the default .env path. If the file is absent, no error is raised. If the file exists but is malformed, an error is returned.

§Errors

Returns an error only if the file exists but cannot be read or contains invalid syntax.

§Examples
use lightshuttle_secrets::EnvFileSource;

if let Some(source) = EnvFileSource::load_optional(".env")? {
    println!("Using {} secrets", source.len());
} else {
    println!("No .env file; using defaults");
}
Source

pub fn len(&self) -> usize

Number of entries loaded from the file.

Returns the count of successfully parsed KEY=VALUE pairs.

Source

pub fn is_empty(&self) -> bool

Returns true if the file contained no entries.

This is true if the file was empty, contained only comments and blank lines, or was otherwise parsed to zero key-value pairs.

Trait Implementations§

Source§

impl Debug for EnvFileSource

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl SecretSource for EnvFileSource

Source§

fn load(&self) -> Result<HashMap<String, String>, SecretError>

Load all secrets from this source. Read more
Source§

fn source_name(&self) -> &str

Human-readable name used in error messages and diagnostics. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.