Skip to main content

tfparser_core/provider/
mod.rs

1//! Provider / account / region resolver (Phase 7, closes M4).
2//!
3//! Per [16-provider-resolver.md]. The resolver is the **last** transformation
4//! before the exporter. It fills `account_id` / `account_name` / `region` on
5//! every [`Resource`](crate::ir::Resource) and `state_account_id` /
6//! `state_region` on every [`StateBackend`](crate::ir::StateBackend), by
7//! walking the **provider alias → provider block → profile / assume-role /
8//! cascade → external profile map** chain documented in spec § 4.
9//!
10//! ## Public surface
11//!
12//! - [`ProviderResolver`] / [`DefaultProviderResolver`]: trait + default impl.
13//! - [`ProviderContext`]: per-resolution context (profile map, default region, strict-mode flag).
14//! - [`ProfileMap`] / [`ProfileEntry`]: the profile → account/region index.
15//! - [`SharedProfileMap`]: `ArcSwap<ProfileMap>` alias for atomic re-loads.
16//! - [`load_yaml_profile_map`] / [`load_aws_config`] / [`empty_profile_map`]: the three loaders
17//!   mirroring spec § 3.
18//! - [`extract_account_id`]: ARN → 12-digit account id helper (spec § 4.1).
19//! - [`ProviderError`]: thiserror enum.
20//!
21//! [16-provider-resolver.md]: ../../../specs/16-provider-resolver.md
22
23mod error;
24mod profile_map;
25mod resolver;
26
27pub use error::ProviderError;
28pub use profile_map::{
29    AWS_CONFIG_MAX_CHAIN_HOPS, PROFILE_MAP_FILE_MAX_BYTES, ProfileEntry, ProfileMap,
30    SharedProfileMap, empty as empty_profile_map, load_aws_config, load_yaml_profile_map, shared,
31};
32pub use resolver::{
33    DefaultProviderResolver, ProviderContext, ProviderResolver, extract_account_id,
34};