coven_storage/
settings.rs1use crate::{StorageConfig, StorageError};
2use coven_foundation::files::StoreDirAccess;
3use coven_foundation::files::{StoreDir, StoreFile};
4
5pub fn recorded_config(directory: &StoreDir) -> Result<Option<StorageConfig>, StorageError> {
8 let Some(bytes) = directory.owned_file(StoreFile::StorageSettings).read_optional()? else {
9 return Ok(None);
10 };
11 Ok(Some(StorageConfig::decode(&bytes)?))
12}
13
14pub fn record_config(directory: &StoreDir, config: &StorageConfig) -> Result<(), StorageError> {
17 let bytes = config.encode()?;
18 directory.owned_file(StoreFile::StorageSettings).replace(bytes.as_bytes())?;
19 Ok(())
20}
21
22pub fn remove_recorded_config(directory: &StoreDir) -> Result<(), StorageError> {
25 Ok(directory.owned_file(StoreFile::StorageSettings).remove()?)
26}
27
28impl StorageConfig {
29 pub(crate) fn encode(&self) -> Result<coven_crypto::SecretBytes, StorageError> {
32 self.validate()?;
33 crate::secret_json::encode(self)
34 }
35
36 pub(crate) fn decode(bytes: &[u8]) -> Result<Self, StorageError> {
39 let location: Self = crate::secret_json::decode(bytes)?;
40 location.validate()?;
41 Ok(location)
42 }
43}
44
45#[cfg(test)]
46#[path = "settings_tests.rs"]
47mod tests;