Skip to main content

lc_testkit/
error.rs

1//! lc-testkit 的错误类型与到 `ProviderError` 的桥接。
2
3use lc_providers::ProviderError;
4
5/// lc-testkit 统一错误。
6///
7/// 通过 [`From<TestkitError> for ProviderError`] 桥接,让录播/回放 provider
8/// 可以直接喂给 chains 等要求 `L::Error: Into<ProviderError>` 的泛型入口。
9#[derive(Debug, thiserror::Error)]
10#[non_exhaustive]
11pub enum TestkitError {
12    /// 录制/回放过程中的 IO 错误(读文件、写文件等)。
13    #[error("io error while recording/replaying: {0}")]
14    Io(#[from] std::io::Error),
15    /// 回放队列耗尽:请求条数超过录制条数。
16    #[error("replay queue exhausted (requested {requested} messages, no recording left)")]
17    ReplayExhausted { requested: usize },
18    /// 内层模型错误,无损透传真实 provider 错误。
19    #[error("inner model error: {0}")]
20    Inner(#[from] ProviderError),
21}
22
23impl From<TestkitError> for ProviderError {
24    fn from(e: TestkitError) -> Self {
25        match e {
26            // 无损透传真实 provider 错误。
27            TestkitError::Inner(p) => p,
28            // 其余为 testkit 自身错误 → 经 From<String> 落到 ProviderError::Testkit。
29            other => other.to_string().into(),
30        }
31    }
32}