heelonvault-core 1.1.0

Core cryptography and storage library for HeelonVault
Documentation
use uuid::Uuid;

#[derive(Debug, Clone)]
pub struct Vault {
    pub id: Uuid,
    pub owner_user_id: Uuid,
    pub name: String,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VaultShareRole {
    Read,
    Write,
    Admin,
}

impl VaultShareRole {
    pub fn to_db_str(self) -> &'static str {
        match self {
            Self::Read => "read",
            Self::Write => "write",
            Self::Admin => "admin",
        }
    }

    pub fn from_db_str(raw: &str) -> Option<Self> {
        match raw {
            "read" => Some(Self::Read),
            "write" => Some(Self::Write),
            "admin" => Some(Self::Admin),
            _ => None,
        }
    }

    pub fn can_write(self) -> bool {
        matches!(self, Self::Write | Self::Admin)
    }

    pub fn can_admin(self) -> bool {
        matches!(self, Self::Admin)
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VaultAccessKind {
    Owner,
    DirectShare,
    TeamShare,
}

impl VaultAccessKind {
    pub fn from_db_str(raw: &str) -> Option<Self> {
        match raw {
            "owner" => Some(Self::Owner),
            "direct_share" => Some(Self::DirectShare),
            "team_share" => Some(Self::TeamShare),
            _ => None,
        }
    }
}

#[derive(Debug, Clone)]
pub struct AccessibleVault {
    pub vault: Vault,
    pub role: VaultShareRole,
    pub access_kind: VaultAccessKind,
    pub vault_key_version: i64,
}