use std::time::Duration;
use tastty::AbsolutePosition;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
pub enum SearchDirection {
#[default]
Forward,
Backward,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct SearchOptions {
pub(super) include_scrollback: bool,
pub(super) direction: SearchDirection,
pub(super) case_sensitive: bool,
pub(super) max_results: Option<usize>,
pub(super) start_from: Option<AbsolutePosition>,
pub(super) deadline: Option<Duration>,
pub(super) nfa_size_limit: Option<usize>,
pub(super) cache_capacity: Option<usize>,
pub(super) max_logical_line_bytes: Option<usize>,
}
impl Default for SearchOptions {
fn default() -> Self {
Self {
include_scrollback: false,
direction: SearchDirection::Forward,
case_sensitive: true,
max_results: None,
start_from: None,
deadline: None,
nfa_size_limit: None,
cache_capacity: None,
max_logical_line_bytes: None,
}
}
}
impl SearchOptions {
#[must_use]
pub fn include_scrollback(mut self) -> Self {
self.include_scrollback = true;
self
}
#[must_use]
pub fn backward(mut self) -> Self {
self.direction = SearchDirection::Backward;
self
}
#[must_use]
pub fn case_insensitive(mut self) -> Self {
self.case_sensitive = false;
self
}
#[must_use]
pub fn max_results(mut self, n: usize) -> Self {
self.max_results = Some(n);
self
}
#[must_use]
pub fn start_from(mut self, pos: AbsolutePosition) -> Self {
self.start_from = Some(pos);
self
}
#[must_use]
pub fn deadline(mut self, budget: Duration) -> Self {
self.deadline = Some(budget);
self
}
#[must_use]
pub fn nfa_size_limit(mut self, bytes: usize) -> Self {
self.nfa_size_limit = Some(bytes);
self
}
#[must_use]
pub fn cache_capacity(mut self, bytes: usize) -> Self {
self.cache_capacity = Some(bytes);
self
}
#[must_use]
pub fn max_logical_line_bytes(mut self, bytes: usize) -> Self {
self.max_logical_line_bytes = Some(bytes);
self
}
}