Skip to main content

plot/lib/display/
paths_patterns.rs

1use super::{BoolExt, DrawTree, Icon};
2use crate::lib::logic::{PattExp, PattRaw, PatternsToApply};
3
4impl std::fmt::Display for PattRaw {
5	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6		// Zwróć uwagę na .0, którym dobieramy się do wewnętrznego Vec<String>
7		let raw_len = self.0.len();
8		if raw_len == 0 {
9			return write!(f, "{} {} Brak reguł wejściowych", DrawTree::ITEM_LAST, Icon::EMPTY);
10		}
11
12		let mut lines = Vec::new();
13		for (i, pat) in self.0.iter().enumerate() {
14			let prefix = DrawTree::list(i, raw_len);
15			lines.push(format!("{} {}", prefix, pat));
16		}
17		write!(f, "{}", lines.join("\n"))
18	}
19}
20
21impl std::fmt::Display for PattExp {
22	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23		let matchers_len = self.0.len();
24		if matchers_len == 0 {
25			return write!(f, "{} {} Brak aktywnych reguł", DrawTree::ITEM_LAST, Icon::EMPTY);
26		}
27
28		let mut lines = Vec::new();
29		for (i, pattern_text) in self.0.iter().enumerate() {
30			let prefix = DrawTree::list(i, matchers_len);
31			let is_negated = pattern_text.starts_with('!');
32			let rule_icon = (!is_negated).as_symbol();
33			lines.push(format!("{} [{}] {}", prefix, rule_icon, pattern_text));
34		}
35		write!(f, "{}", lines.join("\n"))
36	}
37}
38
39impl std::fmt::Display for PatternsToApply {
40	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
41		let mut lines = Vec::new();
42
43		// Magia! Delegate Display do wewnętrznych typów:
44		lines.push(format!("{}", self.patterns));
45		lines.push(format!("   {}", Icon::EXPAND));
46		lines.push(format!("{}", self.expanded));
47
48		write!(f, "{}", lines.join("\n"))
49	}
50}