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<T: AsRef<Path>>(path: T) -> Vec<u8> {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::<TreePrefix>());prefixed.push(Self::Repository as u8);prefixed.extend_from_slice(path_bytes);prefixed}pub fn commit_id<T: AsRef<[u8]>>(repository: RepositoryId, reference: T) -> Vec<u8> {let reference = reference.as_ref();let mut prefixed = Vec::with_capacity(reference.len()+ std::mem::size_of::<RepositoryId>()+ std::mem::size_of::<TreePrefix>(),);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<u8> {let mut prefixed = Vec::with_capacity(std::mem::size_of::<TreePrefix>() + std::mem::size_of::<RepositoryId>(),);prefixed.push(TreePrefix::Tag as u8);prefixed.extend_from_slice(&repository.to_ne_bytes());prefixed}}