use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum BackendKind {
#[default]
Sqlite,
Postgres,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
#[serde(default)]
pub struct StorePolicy {
pub backend: BackendKind,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_safe_sqlite() {
assert_eq!(StorePolicy::default().backend, BackendKind::Sqlite);
}
#[test]
fn deserializes_flat_lowercase_knob() {
let p: StorePolicy = toml::from_str(r#"backend = "postgres""#).unwrap();
assert_eq!(p.backend, BackendKind::Postgres);
let p: StorePolicy = toml::from_str(r#"backend = "sqlite""#).unwrap();
assert_eq!(p.backend, BackendKind::Sqlite);
}
#[test]
fn empty_config_is_the_default() {
let p: StorePolicy = toml::from_str("").unwrap();
assert_eq!(p.backend, BackendKind::Sqlite);
}
#[test]
fn unknown_backend_is_an_error() {
assert!(toml::from_str::<StorePolicy>(r#"backend = "mongo""#).is_err());
}
}