summaryrefslogtreecommitdiffstats
path: root/vendor/tabled/examples/extract.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/tabled/examples/extract.rs')
-rw-r--r--vendor/tabled/examples/extract.rs106
1 files changed, 106 insertions, 0 deletions
diff --git a/vendor/tabled/examples/extract.rs b/vendor/tabled/examples/extract.rs
new file mode 100644
index 000000000..8d7d86434
--- /dev/null
+++ b/vendor/tabled/examples/extract.rs
@@ -0,0 +1,106 @@
+//! This example demonstrates using the [`Extract`] [`TableOption`] to
+//! produce a subsection of a [`Table`].
+//!
+//! * [`Extract`] can return a new [`Table`] with three functions:
+//! * `rows()` | yields subset of the initial rows
+//! * `columns()` | yields subset of the initial columns
+//! * `segment()` | yields subsection of the initial table
+//!
+//! * Note how [`Extract`] methods accepts [`RangeBounds`] arguments,
+//! making subset specifications concise.
+
+use std::fmt::{Display, Formatter};
+
+use tabled::{
+ settings::{
+ object::{Columns, Rows},
+ Alignment, Extract, Format, Modify, Style,
+ },
+ Table, Tabled,
+};
+
+#[derive(Tabled)]
+struct Album {
+ artist: &'static str,
+ name: &'static str,
+ released: &'static str,
+ level_of_greatness: LevelOfGreatness,
+}
+
+impl Album {
+ fn new(
+ artist: &'static str,
+ name: &'static str,
+ released: &'static str,
+ level_of_greatness: LevelOfGreatness,
+ ) -> Self {
+ Self {
+ artist,
+ name,
+ released,
+ level_of_greatness,
+ }
+ }
+}
+
+#[derive(Debug)]
+enum LevelOfGreatness {
+ Supreme,
+ Outstanding,
+ Unparalleled,
+}
+
+impl Display for LevelOfGreatness {
+ fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
+ std::fmt::Debug::fmt(&self, f)
+ }
+}
+
+fn main() {
+ use LevelOfGreatness::*;
+
+ let data = [
+ Album::new(
+ "Pink Floyd",
+ "The Dark Side of the Moon",
+ "01 March 1973",
+ Unparalleled,
+ ),
+ Album::new("Fleetwood Mac", "Rumours", "04 February 1977", Outstanding),
+ Album::new(
+ "Led Zeppelin",
+ "Led Zeppelin IV",
+ "08 November 1971",
+ Supreme,
+ ),
+ ];
+
+ println!("Full");
+
+ let mut table = Table::new(data);
+ table
+ .with(Style::modern())
+ .with(Modify::new(Rows::first()).with(Alignment::center()))
+ .with(Modify::new(Rows::new(1..)).with(Alignment::left()));
+ println!("{table}");
+
+ println!("Segment row: (1..=2) column: (1..)");
+
+ let table = table.with(Extract::segment(1..=2, 1..));
+ println!("{table}");
+
+ println!("Refinished segment");
+
+ let highlight = Format::content(|s| {
+ if s == "Outstanding" {
+ format!("+{s}+")
+ } else {
+ s.to_string()
+ }
+ });
+
+ let table = table
+ .with(Style::modern())
+ .with(Modify::new(Columns::new(1..)).with(highlight));
+ println!("{table}");
+}