Skip to main content

laminar_connectors/storage/
mod.rs

1//! Cloud storage infrastructure for lakehouse connectors.
2//!
3//! Provides shared credential resolution, validation, and secret masking
4//! for all connectors that interact with cloud object stores (S3, Azure ADLS,
5//! GCS, MinIO, local filesystem).
6//!
7//! # Architecture
8//!
9//! ```text
10//! SQL WITH clause          Environment vars       Instance metadata
11//! (storage.* keys)         (AWS_*, AZURE_*, etc)  (IAM role, MI, WI)
12//!       |                        |                       |
13//!       v                        v                       v
14//!  StorageCredentialResolver (priority: explicit > env > instance)
15//!       |
16//!       v
17//!  CloudConfigValidator (per-provider required fields)
18//!       |
19//!       v
20//!  SecretMasker (redacted Debug/Display for safe logging)
21//! ```
22//!
23//! # Usage
24//!
25//! ```rust
26//! use laminar_connectors::storage::{
27//!     StorageProvider, StorageCredentialResolver, CloudConfigValidator, SecretMasker,
28//! };
29//! use std::collections::HashMap;
30//!
31//! // 1. Resolve credentials (explicit config + env var fallback).
32//! let explicit_opts = HashMap::new(); // from SQL WITH clause
33//! let resolved = StorageCredentialResolver::resolve("s3://my-bucket/path", &explicit_opts);
34//!
35//! // 2. Validate for the detected provider.
36//! let validation = CloudConfigValidator::validate(&resolved);
37//! if !validation.is_valid() {
38//!     eprintln!("Config errors: {}", validation.error_message());
39//! }
40//!
41//! // 3. Safe logging with secrets redacted.
42//! println!("Options: {}", SecretMasker::display_map(&resolved.options));
43//! ```
44
45pub mod masking;
46pub mod provider;
47pub mod resolver;
48pub mod validation;
49
50// Re-export primary types at module level.
51pub use masking::SecretMasker;
52pub use provider::StorageProvider;
53pub use resolver::{ResolvedStorageOptions, StorageCredentialResolver};
54pub use validation::{
55    CloudConfigValidator, CloudValidationError, CloudValidationResult, CloudValidationWarning,
56};