use std::fmt::{Debug, Display, Formatter, Result};
use crate::{ch, fmt_option, ChUnit, EditorBuffer, InlineString, ItemsOwned,
DEFAULT_SYN_HI_FILE_EXT};
#[derive(Clone, PartialEq)]
pub struct DialogBuffer {
pub editor_buffer: EditorBuffer,
pub title: InlineString,
pub maybe_results: Option<ItemsOwned>,
}
impl DialogBuffer {
#[must_use]
pub fn get_results_count(&self) -> ChUnit {
if let Some(ref it) = self.maybe_results {
ch(it.len())
} else {
ch(0)
}
}
}
impl DialogBuffer {
#[must_use]
pub fn new_empty() -> Self {
DialogBuffer {
editor_buffer: EditorBuffer::new_empty(Some(DEFAULT_SYN_HI_FILE_EXT), None),
title: InlineString::new(),
maybe_results: None,
}
}
}
mod impl_debug {
use super::{fmt_option, Debug, DialogBuffer, Formatter, Result};
impl Debug for DialogBuffer {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
let maybe_results: &dyn Debug = fmt_option!(&self.maybe_results);
write!(
f,
"DialogBuffer [
- title: {title}
- maybe_results: {results:?}
- editor_buffer.content: {content}
]",
title = self.title,
results = maybe_results,
content = self
.editor_buffer
.get_as_string_with_comma_instead_of_newlines()
)
}
}
}
mod impl_display {
use super::{DialogBuffer, Display, Formatter, Result};
impl Display for DialogBuffer {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
write!(f, "dialog:")?;
if self.title.is_empty() {
write!(f, "<untitled>")?;
} else {
write!(f, "{}", self.title)?;
}
if let Some(ref results) = self.maybe_results {
write!(f, ":results({})", results.len())?;
}
write!(f, ":{}", self.editor_buffer)?;
Ok(())
}
}
}