pub mod rendered_storage;
pub mod storage_manager;
mod template;
pub mod template_factory;
pub mod validator;
use anyhow::Context;
use derivative::Derivative;
use serde::{Deserialize, Serialize};
pub use template::*;
use uuid::Uuid;
pub use validator::*;
#[derive(Debug, Clone, Deserialize, Serialize, Eq, Derivative)]
#[derivative(Hash, PartialEq)]
pub struct Storage {
name: Option<String>,
uuid: Uuid,
backend_type: String,
#[derivative(Hash = "ignore", PartialEq = "ignore")]
data: serde_json::Value,
encrypted: bool,
template_uuid: Option<Uuid>,
}
impl TryFrom<&[u8]> for Storage {
type Error = anyhow::Error;
fn try_from(value: &[u8]) -> anyhow::Result<Self> {
serde_json::from_slice(value).context("Failed to deserialize Storage")
}
}
impl From<&Storage> for Vec<u8> {
fn from(value: &Storage) -> Self {
serde_json::to_vec(&value).unwrap()
}
}
impl Storage {
pub fn new(
uuid: Uuid,
name: Option<String>,
backend_type: String,
data: serde_json::Value,
encrypted: bool,
template_uuid: Option<Uuid>,
) -> Self {
Self {
name,
uuid,
backend_type,
data,
encrypted,
template_uuid,
}
}
pub fn name(&self) -> Option<String> {
self.name.clone()
}
pub fn uuid(&self) -> Uuid {
self.uuid
}
pub fn template_uuid(&self) -> Option<Uuid> {
self.template_uuid
}
pub fn backend_type(&self) -> &str {
self.backend_type.as_str()
}
pub fn data(&self) -> serde_json::Value {
self.data.clone()
}
pub fn encrypted(&self) -> bool {
self.encrypted
}
}
#[derive(Debug, Clone, Copy, Deserialize, Serialize)]
pub enum StorageAccessMode {
ReadWrite,
ReadOnly,
}