undo/redo

This commit is contained in:
Jana Dönszelmann 2026-02-25 14:29:28 +01:00
parent 8a4df3307d
commit 8cfe1a0b65
No known key found for this signature in database
8 changed files with 247 additions and 154 deletions

View file

@ -1,13 +1,34 @@
use regex::bytes::Regex;
use serde::{Deserialize, Serialize};
use crate::tui::{
log_viewer::{FieldMatcher, InputTarget, LogViewer},
log_viewer::{
LogViewer,
input::{FieldMatcher, InputTarget},
},
model::LogEntry,
};
mod serialize_regex {
use regex::bytes::Regex;
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error};
pub fn serialize<S: Serializer>(r: &Regex, serializer: S) -> Result<S::Ok, S::Error> {
r.as_str().serialize(serializer)
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Regex, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Regex::new(&s).map_err(|e| D::Error::custom(e.to_string()))
}
}
#[derive(Serialize, Deserialize)]
pub enum MatcherValue {
Exact(String),
Regex(Regex),
Regex(#[serde(with = "serialize_regex")] Regex),
Prefix(String),
Contains(String),
}
@ -32,6 +53,7 @@ impl MatcherValue {
}
}
#[derive(Serialize, Deserialize)]
pub enum Matcher {
Field { name: String, value: MatcherValue },
Message { value: MatcherValue },
@ -76,12 +98,13 @@ impl Matcher {
}
}
#[derive(Clone)]
#[derive(Clone, Serialize, Deserialize)]
pub enum FilterKind {
Inline,
Remove,
}
#[derive(Serialize, Deserialize)]
pub struct Filter {
pub matcher: Matcher,
pub kind: FilterKind,