pub mod error;
pub mod vault_duplicates;
pub mod vault_open;
#[cfg(feature = "petgraph")]
#[cfg_attr(docsrs, doc(cfg(feature = "petgraph")))]
pub mod vault_petgraph;
#[cfg(test)]
mod vault_test;
use crate::note::DefaultProperties;
use crate::note::Note;
use crate::prelude::{NoteInMemory, NoteOnDisk, NoteOnceCell, NoteOnceLock};
use std::path::{Path, PathBuf};
pub type VaultOnDisk<T = DefaultProperties> = Vault<NoteOnDisk<T>>;
pub type VaultOnceCell<T = DefaultProperties> = Vault<NoteOnceCell<T>>;
pub type VaultOnceLock<T = DefaultProperties> = Vault<NoteOnceLock<T>>;
pub type VaultInMemory<T = DefaultProperties> = Vault<NoteInMemory<T>>;
#[derive(Debug, Default, PartialEq, Eq, Clone)]
pub struct Vault<N = NoteInMemory>
where
N: Note,
{
notes: Vec<N>,
path: PathBuf,
}
impl<N> Vault<N>
where
N: Note,
{
#[must_use]
#[inline]
pub const fn notes(&self) -> &Vec<N> {
&self.notes
}
#[must_use]
#[inline]
pub const fn mut_notes(&mut self) -> &mut Vec<N> {
&mut self.notes
}
#[must_use]
#[inline]
pub const fn count_notes(&self) -> usize {
self.notes().len()
}
#[must_use]
#[inline]
pub fn path(&self) -> &Path {
&self.path
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{
prelude::{IteratorVaultBuilder, VaultBuilder, VaultOptions},
vault::vault_test::create_files_for_vault,
};
#[cfg_attr(feature = "tracing", tracing_test::traced_test)]
#[test]
fn notes() {
let (path, files) = create_files_for_vault().unwrap();
let options = VaultOptions::new(&path);
let vault: VaultInMemory = VaultBuilder::new(&options)
.include_hidden(true)
.into_iter()
.map(|file| file.unwrap())
.build_vault(&options);
assert_eq!(vault.notes().len(), files.len());
}
#[cfg_attr(feature = "tracing", tracing_test::traced_test)]
#[test]
fn count_notes() {
let (path, files) = create_files_for_vault().unwrap();
let options = VaultOptions::new(&path);
let vault: VaultInMemory = VaultBuilder::new(&options)
.include_hidden(true)
.into_iter()
.map(|file| file.unwrap())
.build_vault(&options);
assert_eq!(vault.count_notes(), files.len());
}
#[cfg_attr(feature = "tracing", tracing_test::traced_test)]
#[test]
fn path() {
let (path, _) = create_files_for_vault().unwrap();
let options = VaultOptions::new(&path);
let vault: VaultInMemory = VaultBuilder::new(&options)
.include_hidden(true)
.into_iter()
.map(|file| file.unwrap())
.build_vault(&options);
assert_eq!(vault.path(), path.path());
}
}