use std::path::Path; use crate::database::schema::repository::RepositoryId; #[repr(u8)] pub enum TreePrefix { Repository = 0, Commit = 100, Tag = 101, } impl TreePrefix { pub fn repository_id>(path: T) -> Vec { let path = path.as_ref().to_string_lossy(); let path_bytes = path.as_bytes(); let mut prefixed = Vec::with_capacity(path_bytes.len() + std::mem::size_of::()); prefixed.push(Self::Repository as u8); prefixed.extend_from_slice(path_bytes); prefixed } pub fn commit_id>(repository: RepositoryId, reference: T) -> Vec { let reference = reference.as_ref(); let mut prefixed = Vec::with_capacity( reference.len() + std::mem::size_of::() + std::mem::size_of::(), ); prefixed.push(TreePrefix::Commit as u8); prefixed.extend_from_slice(&repository.to_ne_bytes()); prefixed.extend_from_slice(reference); prefixed } pub fn tag_id(repository: RepositoryId) -> Vec { let mut prefixed = Vec::with_capacity( std::mem::size_of::() + std::mem::size_of::(), ); prefixed.push(TreePrefix::Tag as u8); prefixed.extend_from_slice(&repository.to_ne_bytes()); prefixed } }