use serde::{Deserialize, Serialize};
use crate::node::{Common, IntoNode, Node};
use crate::text::Line;
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Log {
#[serde(flatten)]
pub common: Common,
pub lines: Vec<Line>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_lines: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub follow: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub wrap: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub line_numbers: Option<bool>,
}
impl Log {
#[must_use]
pub fn new(lines: impl IntoIterator<Item = impl Into<Line>>) -> Self {
Self {
lines: lines.into_iter().map(Into::into).collect(),
..Self::default()
}
}
#[must_use]
pub fn lines(mut self, lines: impl IntoIterator<Item = impl Into<Line>>) -> Self {
self.lines.extend(lines.into_iter().map(Into::into));
self
}
#[must_use]
pub fn max_lines(mut self, max_lines: u32) -> Self {
self.max_lines = Some(max_lines);
self
}
#[must_use]
pub fn follow(mut self, follow: bool) -> Self {
self.follow = Some(follow);
self
}
#[must_use]
pub fn wrap(mut self, wrap: bool) -> Self {
self.wrap = Some(wrap);
self
}
#[must_use]
pub fn line_numbers(mut self, line_numbers: bool) -> Self {
self.line_numbers = Some(line_numbers);
self
}
}
impl IntoNode for Log {}
impl From<Log> for Node {
fn from(l: Log) -> Self {
Node::Log(l)
}
}