use std::sync::Arc;
use crate::error::Result;
use crate::lexical::index::inverted::InvertedIndexStats;
use crate::lexical::reader::LexicalIndexReader;
use crate::lexical::search::searcher::LexicalSearcher;
use crate::lexical::writer::LexicalIndexWriter;
use crate::storage::Storage;
pub trait LexicalIndex: Send + Sync + std::fmt::Debug {
fn reader(&self) -> Result<Arc<dyn LexicalIndexReader>>;
fn writer(&self) -> Result<Box<dyn LexicalIndexWriter>>;
fn storage(&self) -> &Arc<dyn Storage>;
fn close(&self) -> Result<()>;
fn is_closed(&self) -> bool;
fn stats(&self) -> Result<InvertedIndexStats>;
fn optimize(&self) -> Result<()>;
fn refresh(&self) -> Result<()> {
Ok(())
}
fn searcher(&self) -> Result<Box<dyn LexicalSearcher>>;
fn default_fields(&self) -> Result<Vec<String>> {
Ok(Vec::new())
}
fn last_wal_seq(&self) -> u64 {
0
}
fn set_last_wal_seq(&self, _seq: u64) -> Result<()> {
Ok(())
}
fn add_field(
&self,
_name: &str,
_option: crate::lexical::core::field::FieldOption,
) -> Result<()> {
Err(crate::error::LaurusError::invalid_argument(
"This index implementation does not support dynamic field addition",
))
}
fn delete_field(&self, _name: &str) -> Result<()> {
Err(crate::error::LaurusError::invalid_argument(
"This index implementation does not support dynamic field deletion",
))
}
}
pub mod config;
pub mod factory;
pub mod inverted;
pub mod structures;