pub struct Config { /* private fields */ }Expand description
§零拷贝配置共享实现
Config 内部使用 Arc<ConfigInner> 实现零拷贝共享:
§性能特性
- 内存效率: 所有克隆共享同一份配置数据(~300-500字节)
- 克隆成本:
Config::clone()只复制Arc指针(8字节 + 原子操作) - 线程安全: Arc保证多线程安全的只读访问
- 引用计数: 自动管理内存,无泄漏风险
§使用建议
// ✅ 推荐: 克隆Config传递给服务
let service = MyService::new(config.clone());
// ✅ 推荐: 在Request中持有Config
pub struct MyRequest {
config: Config, // 持有Arc指针,成本低
}
// ⚠️ 不必要: 使用Arc<Config> (Config内部已经是Arc)
// Arc<Arc<ConfigInner>> = 双重Arc,没有额外收益§性能验证
运行 cargo test config_arc 查看基准测试:
- 克隆速度: ~10-20纳秒
- 内存开销: 每个克隆仅8字节
- 引用计数: 自动维护
Implementations§
Source§impl Config
impl Config
pub fn builder() -> ConfigBuilder
Sourcepub fn new(inner: ConfigInner) -> Config
pub fn new(inner: ConfigInner) -> Config
创建新的 Config 实例,直接从 ConfigInner
Sourcepub fn with_token_provider(
&self,
provider: impl TokenProvider + 'static,
) -> Config
pub fn with_token_provider( &self, provider: impl TokenProvider + 'static, ) -> Config
基于当前配置生成一个“替换 TokenProvider”的新配置
说明:
- 这是一个纯拷贝操作(
Config本身是Arc包装),不会修改原配置 - 推荐用法:先构建一个“基础 Config”(默认
NoOpTokenProvider),再用该基础 Config 构建业务 TokenProvider, 最后调用此方法把 provider 注入到“业务 Config”中,避免循环引用。
Sourcepub fn reference_count(&self) -> usize
pub fn reference_count(&self) -> usize
获取内部 Arc 的引用计数
Sourcepub fn app_secret(&self) -> &str
pub fn app_secret(&self) -> &str
获取应用密钥
Sourcepub fn req_timeout(&self) -> Option<Duration>
pub fn req_timeout(&self) -> Option<Duration>
获取超时时间
Sourcepub fn enable_token_cache(&self) -> bool
pub fn enable_token_cache(&self) -> bool
是否启用令牌缓存
Sourcepub fn http_client(&self) -> &Client
pub fn http_client(&self) -> &Client
获取 HTTP 客户端引用
Sourcepub fn token_provider(&self) -> &Arc<dyn TokenProvider>
pub fn token_provider(&self) -> &Arc<dyn TokenProvider>
获取 TokenProvider 引用
Trait Implementations§
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> 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
Mutably borrows from an owned value. Read more