use core::fmt;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
pub const SECRETS_VERSION: u32 = 1;
pub const MAX_KEY_BYTES: usize = 128;
pub const MAX_VALUE_BYTES: usize = 4096;
pub const ALL_ENVIRONMENTS: &str = "all";
#[derive(Default, Serialize, Deserialize)]
pub(super) struct SecretFile {
pub(super) version: u32,
pub(super) entries: BTreeMap<String, BTreeMap<String, String>>,
}
impl fmt::Debug for SecretFile {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("SecretFile")
.field("version", &self.version)
.field("keys", &self.entries.len())
.finish()
}
}
#[cfg(test)]
mod tests {
use super::super::error::SecretError;
use super::super::store::set;
use super::*;
#[test]
fn an_oversized_value_is_refused_by_length() {
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("secrets.json");
let big = "x".repeat(MAX_VALUE_BYTES + 1);
let err = set(&path, "K", "production", &big).unwrap_err();
assert!(matches!(err, SecretError::ValueTooLong { len, .. } if len == big.len()));
}
}