Skip to main content

loong_contracts/
secret_resolver.rs

1use thiserror::Error;
2
3use crate::{SecretRef, SecretValue};
4
5#[derive(Debug, Error, Clone, PartialEq, Eq)]
6pub enum SecretResolutionError {
7    #[error("secret env reference `{env}` is invalid")]
8    InvalidEnvName { env: String },
9    #[error("failed to read secret file `{path}`: {message}")]
10    FileRead { path: String, message: String },
11    #[error("secret exec command must not be empty")]
12    EmptyExec,
13    #[error("failed to start secret exec `{program}`: {message}")]
14    ExecSpawn { program: String, message: String },
15    #[error("failed while waiting for secret exec `{program}`: {message}")]
16    ExecWait { program: String, message: String },
17    #[error("secret exec `{program}` timed out after {timeout_ms}ms")]
18    ExecTimeout { program: String, timeout_ms: u64 },
19    #[error("secret exec `{program}` exited with status {status}: {message}")]
20    ExecFailed {
21        program: String,
22        status: String,
23        message: String,
24    },
25    #[error("secret exec `{program}` output was not valid UTF-8")]
26    ExecInvalidUtf8 { program: String },
27}
28
29pub trait SecretResolver {
30    fn resolve(&self, secret_ref: &SecretRef)
31    -> Result<Option<SecretValue>, SecretResolutionError>;
32}