loong_contracts/
secret_resolver.rs1use 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}