diff options
Diffstat (limited to 'database/src/query_ser.rs')
| -rw-r--r-- | database/src/query_ser.rs | 56 |
1 files changed, 18 insertions, 38 deletions
diff --git a/database/src/query_ser.rs b/database/src/query_ser.rs index 498f2ad..d76dea7 100644 --- a/database/src/query_ser.rs +++ b/database/src/query_ser.rs @@ -4,37 +4,30 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ -use crate::{DEBUG_TAGREG, Filter, MultiBehaviour, Query, Sort, SortOrder}; -use jellyobject::{Path, Registry, Tag}; +use crate::{Filter, MultiBehaviour, Query, Sort, SortOrder}; +use jellyobject::{Path, Tag}; impl Query { - pub fn show_debug(&self) -> String { - if let Some(r) = DEBUG_TAGREG.get() { - self.show(r) - } else { - "[debug tag registry disabled]".to_string() - } - } - pub fn show(&self, reg: &Registry) -> String { + pub fn show(&self) -> String { let mut o = String::new(); if !matches!(self.filter, Filter::True) { - o += &format!("FILTER {} ", self.filter.show(reg)) + o += &format!("FILTER {} ", self.filter.show()) } if !matches!(self.sort, Sort::None) { - o += &format!("SORT {} ", self.sort.show(reg)) + o += &format!("SORT {} ", self.sort.show()) } o } } impl Filter { - pub fn show(&self, reg: &Registry) -> String { + pub fn show(&self) -> String { match self { Filter::True => "TRUE".to_string(), Filter::All(filters) => format!( "({})", filters .iter() - .map(|f| f.show(reg)) + .map(|f| f.show()) .collect::<Vec<_>>() .join(" AND ") ), @@ -42,23 +35,23 @@ impl Filter { "({})", filters .iter() - .map(|f| f.show(reg)) + .map(|f| f.show()) .collect::<Vec<_>>() .join(" OR ") ), Filter::Match(path, value) => { format!( "{} = {}", - show_path(reg, path), - show_value(reg, *path.0.last().unwrap(), value) + show_path(path), + show_value(*path.0.last().unwrap(), value) ) } - Filter::Has(path) => show_path(reg, path), + Filter::Has(path) => show_path(path), } } } impl Sort { - pub fn show(&self, reg: &Registry) -> String { + pub fn show(&self) -> String { match self { Sort::None => "NONE".to_string(), Sort::Value(vs) => { @@ -75,36 +68,23 @@ impl Sort { MultiBehaviour::Max => "MAX", MultiBehaviour::Min => "MIN", }, - show_path(reg, &vs.path), + show_path(&vs.path), ) } Sort::TextSearch(path, value) => { - format!("TEXT SEARCH {} = {value:?}", show_path(reg, path),) + format!("TEXT SEARCH {} = {value:?}", show_path(path),) } } } } -fn show_path(reg: &Registry, path: &Path) -> String { +fn show_path(path: &Path) -> String { path.0 .iter() - .map(|s| reg.name(*s)) + .map(|s| str::from_utf8(&s.0.to_be_bytes()).unwrap().to_string()) .collect::<Vec<_>>() .join(".") } -fn show_value(reg: &Registry, tag: Tag, value: &[u8]) -> String { - if let Some(info) = reg.info(tag) - && let Some(ty) = info.r#type - { - use jellyobject::types::*; - match () { - () if ty == STR => format!("{:?}", str::from_utf8(value).unwrap()), - () if ty == U32 => format!("{:?}", u32::from_be_bytes(value.try_into().unwrap())), - () if ty == U64 => format!("{:?}", u64::from_be_bytes(value.try_into().unwrap())), - () if ty == F64 => format!("{:?}", f64::from_be_bytes(value.try_into().unwrap())), - () => format!("{value:?}"), - } - } else { - format!("{value:?}") - } +fn show_value(_tag: Tag, value: &[u8]) -> String { + format!("{value:?}") // TODO } |