Repository: zhiburt/tabled
Pull request #300 (2023-03-10 12:47:02)

Move `settings::*` modules from pub to `settings`; 


Patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c5fa39f..5901010 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,21 +10,110 @@ env:
   CARGO_TERM_COLOR: always
 
 jobs:
-  check:
-    name: Check
+  check-tabled:
+    name: Check tabled
     strategy:
       fail-fast: false
       matrix:
         rust: [nightly, stable]
         os: [ubuntu-latest, windows-latest, macos-latest]
-        features: ["", "color", "derive", "macros", "color,derive", "color,derive,macros"]
+        features:
+          [
+            "",
+            "std",
+            "color",
+            "derive",
+            "macros",
+            "color,derive",
+            "color,macros",
+            "macros,derive",
+            "color,derive,macros",
+          ]
     runs-on: ${{ matrix.os }}
     steps:
       - uses: actions/checkout@v3
       - uses: dtolnay/rust-toolchain@master
         with:
           toolchain: ${{ matrix.rust }}
-      - run: cargo check --all-targets --all --no-default-features --features=${{ matrix.features }}
+      - run: cargo check --manifest-path=./tabled/Cargo.toml --all-targets --no-default-features --features=${{ matrix.features }}
+
+  check-papergrid:
+    name: Check papergrid
+    strategy:
+      fail-fast: false
+      matrix:
+        rust: [stable]
+        os: [ubuntu-latest]
+        features: ["", "std", "color", "std,color"]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: ${{ matrix.rust }}
+      - run: cargo check --manifest-path=./papergrid/Cargo.toml --all-targets --no-default-features --features=${{ matrix.features }}
+
+  check-csv_to_table:
+    name: Check csv_to_table
+    strategy:
+      fail-fast: false
+      matrix:
+        rust: [stable]
+        os: [ubuntu-latest]
+        features: ["", "color"]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: ${{ matrix.rust }}
+      - run: cargo check --manifest-path=./csv_to_table/Cargo.toml --all-targets --no-default-features --features=${{ matrix.features }}
+
+  check-json_to_table:
+    name: Check json_to_table
+    strategy:
+      fail-fast: false
+      matrix:
+        rust: [stable]
+        os: [ubuntu-latest]
+        features: ["", "color"]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: ${{ matrix.rust }}
+      - run: cargo check --manifest-path=./json_to_table/Cargo.toml --all-targets --no-default-features --features=${{ matrix.features }}
+
+  check-static_table:
+    name: Check static_table
+    strategy:
+      fail-fast: false
+      matrix:
+        rust: [stable]
+        os: [ubuntu-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: ${{ matrix.rust }}
+      - run: cargo check --manifest-path=./static_table/Cargo.toml --all-targets
+
+  check-tabled_derive:
+    name: Check tabled_derive
+    strategy:
+      fail-fast: false
+      matrix:
+        rust: [stable]
+        os: [ubuntu-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: ${{ matrix.rust }}
+      - run: cargo check --manifest-path=./tabled_derive/Cargo.toml --all-targets
 
   msrv:
     name: MSRV
@@ -32,8 +121,7 @@ jobs:
     steps:
       - uses: actions/checkout@v3
       - uses: dtolnay/rust-toolchain@1.61.0
-      # check only the root crate for MSRV
-      - run: cargo build --all-features
+      - run: cargo build --manifest-path=./tabled/Cargo.toml --all-features
 
   fmt:
     name: Rustfmt
@@ -48,16 +136,30 @@ jobs:
   clippy:
     name: Clippy
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        target: [x86_64-unknown-linux-gnu, x86_64-unknown-linux-musl]
+        features: ["", "color"]
     steps:
       - uses: actions/checkout@v3
       - uses: dtolnay/rust-toolchain@stable
         with:
-          components: clippy
-      - run: cargo clippy --all --all-targets -- -D warnings
+          target: ${{ matrix.target }}
+      - run: cargo clippy --all --all-targets --no-default-features --features=${{ matrix.features }} -- -D warnings
 
   test:
     name: Unit Test Suite
-    needs: [check, fmt, clippy]
+    needs:
+      [
+        check-tabled,
+        check-static_table,
+        check-csv_to_table,
+        check-json_to_table,
+        check-papergrid,
+        check-tabled_derive,
+        fmt,
+        clippy,
+      ]
     runs-on: ubuntu-latest
     strategy:
       matrix:
@@ -72,7 +174,7 @@ jobs:
 
   test_quickcheck:
     name: A quickcheck test suite
-    needs: [check, fmt, clippy]
+    needs: [test]
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
diff --git a/README.md b/README.md
index 6e4eea3..7f2fc1e 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
 [<img alt="coverage" src="https://img.shields.io/coveralls/github/zhiburt/tabled/master?style=for-the-badge" height="20">](https://coveralls.io/github/zhiburt/tabled)
 [<img alt="dependency status" src="https://deps.rs/repo/github/zhiburt/tabled/status.svg?style=for-the-badge" height="20">](https://deps.rs/repo/github/zhiburt/tabled)
 
-# tabled
+# <a href="#"> <img alt="logo" align="center" src="https://raw.githubusercontent.com/zhiburt/tabled/86ac146e532ce9f7626608d7fd05072123603a2e/assets/tabled-gear.svg" href="/" width=45> </a> <span> tabled </span>
 
 An easy to use library for pretty printing tables of Rust `struct`s and `enum`s.
 
diff --git a/json_to_table/src/table.rs b/json_to_table/src/table.rs
index c265fde..47ce350 100644
--- a/json_to_table/src/table.rs
+++ b/json_to_table/src/table.rs
@@ -85,9 +85,12 @@ impl<'val, ModeVisitor> JsonTable<'val, ModeVisitor> {
     /// # Example
     ///
     /// ```
-    /// use json_to_table::json_to_table;
     /// use serde_json::json;
-    /// use tabled::{settings::{alignment::Alignment, padding::Padding, style::Style}, Table};
+    /// use json_to_table::json_to_table;
+    /// use tabled::{
+    ///     settings::{Alignment, Padding, Style},
+    ///     Table
+    /// };
     ///
     /// let value = json!({
     ///     "key1": 123,
@@ -193,9 +196,7 @@ mod json_to_table {
             util::string::string_width_multiline,
         },
         records::Records,
-        settings::{
-            format::Format, height::Height, padding::Padding, width::Width, Settings, TableOption,
-        },
+        settings::{Format, Height, Padding, Settings, TableOption, Width},
         tables::table::ColoredConfig,
     };
 
diff --git a/papergrid/src/grid/spanned/grid.rs b/papergrid/src/grid/spanned/grid.rs
index c55c8df..b5b7045 100644
--- a/papergrid/src/grid/spanned/grid.rs
+++ b/papergrid/src/grid/spanned/grid.rs
@@ -1252,7 +1252,6 @@ fn count_empty_lines(cell: &str) -> (usize, usize, usize) {
 fn get_text_width(text: &str, trim: bool) -> usize {
     if trim {
         get_lines(text)
-            .into_iter()
             .map(|line| string_width(line.trim()))
             .max()
             .unwrap_or(0)
diff --git a/papergrid/src/util/string.rs b/papergrid/src/util/string.rs
index 3790d95..f5c256f 100644
--- a/papergrid/src/util/string.rs
+++ b/papergrid/src/util/string.rs
@@ -5,6 +5,7 @@
 //! [`Grid`]: crate::grid::spanned::Grid
 
 /// Returns string width and count lines of a string. It's a combination of [`string_width_multiline_tab`] and [`count_lines`].
+#[cfg(feature = "std")]
 pub fn string_dimension(text: &str) -> (usize, usize) {
     #[cfg(not(feature = "color"))]
     {
@@ -232,6 +233,7 @@ mod tests {
         );
     }
 
+    #[cfg(feature = "std")]
     #[test]
     fn string_dimension_test() {
         assert_eq!(
@@ -255,6 +257,7 @@ mod tests {
         assert_eq!(string_dimension(""), (1, 0));
     }
 
+    #[cfg(feature = "std")]
     #[test]
     fn replace_tab_test() {
         assert_eq!(replace_tab("123\t\tabc\t", 3), "123      abc   ");
diff --git a/static_table/src/lib.rs b/static_table/src/lib.rs
index f1c40a8..047fcd7 100644
--- a/static_table/src/lib.rs
+++ b/static_table/src/lib.rs
@@ -148,14 +148,7 @@ use syn::{
 };
 use tabled::{
     builder::Builder,
-    settings::{
-        alignment::Alignment,
-        margin::Margin,
-        padding,
-        span::{ColumnSpan, RowSpan},
-        style::Style,
-        Modify,
-    },
+    settings::{Alignment, Margin, Modify, Padding, Span, Style},
     Table,
 };
 
@@ -470,7 +463,7 @@ impl Parse for TableStruct {
 }
 
 #[allow(dead_code)]
-struct Padding<T> {
+struct Pad<T> {
     left: T,
     comma1_tk: Token!(,),
     right: T,
@@ -480,7 +473,7 @@ struct Padding<T> {
     bottom: T,
 }
 
-impl<T: Parse> Parse for Padding<T> {
+impl<T: Parse> Parse for Pad<T> {
     fn parse(input: ParseStream<'_>) -> Result<Self> {
         Ok(Self {
             left: input.parse()?,
@@ -771,16 +764,16 @@ fn apply_theme(table: &mut tabled::Table, name: &str) {
     };
 }
 
-fn build_padding(pad: Padding<LitInt>) -> syn::Result<padding::Padding> {
+fn build_padding(pad: Pad<LitInt>) -> syn::Result<Padding> {
     let left = pad.left.base10_parse::<usize>()?;
     let right = pad.right.base10_parse::<usize>()?;
     let top = pad.top.base10_parse::<usize>()?;
     let bottom = pad.bottom.base10_parse::<usize>()?;
 
-    Ok(padding::Padding::new(left, right, top, bottom))
+    Ok(Padding::new(left, right, top, bottom))
 }
 
-fn build_margin(pad: Padding<LitInt>) -> syn::Result<Margin> {
+fn build_margin(pad: Pad<LitInt>) -> syn::Result<Margin> {
     let left = pad.left.base10_parse::<usize>()?;
     let right = pad.right.base10_parse::<usize>()?;
     let top = pad.top.base10_parse::<usize>()?;
@@ -892,11 +885,11 @@ fn create_table(mat: &MatrixInput) -> Result<Table> {
     let mut table = builder.build();
 
     for (pos, span) in vspan {
-        table.with(Modify::new(pos).with(ColumnSpan::new(span)));
+        table.with(Modify::new(pos).with(Span::horizontal(span)));
     }
 
     for (pos, span) in hspan {
-        table.with(Modify::new(pos).with(RowSpan::new(span)));
+        table.with(Modify::new(pos).with(Span::vertical(span)));
     }
 
     Ok(table)
diff --git a/table_to_html/src/lib.rs b/table_to_html/src/lib.rs
index da406ef..390cd51 100644
--- a/table_to_html/src/lib.rs
+++ b/table_to_html/src/lib.rs
@@ -399,9 +399,8 @@ pub type Padding = Sides<usize>;
 /// A Html element margin in PX.
 pub type Margin = Sides<usize>;
 
-pub use tabled::grid::config::Entity;
-pub use tabled::grid::config::Position;
-pub use tabled::settings::alignment::Alignment;
+pub use tabled::grid::config::{Entity, Position};
+pub use tabled::settings::Alignment;
 
 /// The structure represents an HTML `<table>`.
 #[derive(Debug, Clone)]
@@ -613,7 +612,6 @@ fn build_row(row: Vec<String>, tag: &str) -> HtmlElement {
                 vec![],
                 Some(HtmlValue::Elements(
                     get_lines(&content)
-                        .into_iter()
                         .map(|line| HtmlValue::Content(line.to_string()))
                         .map(|content| HtmlElement::new("p", vec![], Some(content)))
                         .collect(),
diff --git a/tabled/benches/functions/benches/strings.rs b/tabled/benches/functions/benches/strings.rs
index f24c3bb..ab0d48b 100644
--- a/tabled/benches/functions/benches/strings.rs
+++ b/tabled/benches/functions/benches/strings.rs
@@ -59,7 +59,7 @@ pub fn wrap(c: &mut Criterion) {
                 b.iter(|| {
                     black_box(
                         tabled::Table::new(&[&text])
-                            .with(tabled::settings::width::Width::wrap(1))
+                            .with(tabled::settings::Width::wrap(1))
                             .to_string(),
                     )
                 });
diff --git a/tabled/benches/functions/benches/to_string.rs b/tabled/benches/functions/benches/to_string.rs
index c0fefff..4647806 100644
--- a/tabled/benches/functions/benches/to_string.rs
+++ b/tabled/benches/functions/benches/to_string.rs
@@ -1,7 +1,7 @@
 use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
 
 use tabled::{
-    settings::{alignment::Alignment, object::Segment, padding::Padding, style::Style, Modify},
+    settings::{object::Segment, Alignment, Modify, Padding, Style},
     Table, Tabled,
 };
 
diff --git a/tabled/examples/README.md b/tabled/examples/README.md
index 7eb9921..e419081 100644
--- a/tabled/examples/README.md
+++ b/tabled/examples/README.md
@@ -656,7 +656,7 @@ Table decrease height to 0
 | 2  | ok |                                                                              |
 | 3  | ok | use std::io::BufRead;                                                        |
 | 4  | ok |                                                                              |
-| 5  | ok | use tabled::{settings::style::Style, tables::iter::IterTable};               |
+| 5  | ok | use tabled::{settings::Style, tables::iter::IterTable};               |
 | 6  | ok |                                                                              |
 | 7  | ok | fn main() {                                                                  |
 | 8  | ok |     let path = file!();                                                      |
diff --git a/tabled/examples/builder.rs b/tabled/examples/builder.rs
index 3987864..a0bf025 100644
--- a/tabled/examples/builder.rs
+++ b/tabled/examples/builder.rs
@@ -3,7 +3,7 @@
 
 use tabled::{
     builder::Builder,
-    settings::{object::Rows, panel::Panel, style::Style, width::Width, Modify},
+    settings::{object::Rows, Modify, Panel, Style, Width},
 };
 
 fn main() {
diff --git a/tabled/examples/builder_index.rs b/tabled/examples/builder_index.rs
index 6ec62a9..aba01d7 100644
--- a/tabled/examples/builder_index.rs
+++ b/tabled/examples/builder_index.rs
@@ -1,7 +1,7 @@
 //! The example can be run by this command
 //! `cargo run --example builder_index`
 
-use tabled::{settings::style::Style, Table, Tabled};
+use tabled::{settings::Style, Table, Tabled};
 
 #[derive(Tabled)]
 struct Distribution {
diff --git a/tabled/examples/col_row_macros.rs b/tabled/examples/col_row_macros.rs
index 93c639b..14874d7 100644
--- a/tabled/examples/col_row_macros.rs
+++ b/tabled/examples/col_row_macros.rs
@@ -5,7 +5,7 @@
 
 use tabled::{
     col, row,
-    settings::{alignment::Alignment, style::Style},
+    settings::{Alignment, Style},
     Table, Tabled,
 };
 
diff --git a/tabled/examples/color.rs b/tabled/examples/color.rs
index bb7a5b1..3555c02 100644
--- a/tabled/examples/color.rs
+++ b/tabled/examples/color.rs
@@ -9,11 +9,9 @@ use owo_colors::OwoColorize;
 
 use tabled::{
     settings::{
-        color::Color,
-        format::Format,
         object::{Columns, Rows},
         style::{BorderColor, Style},
-        Modify,
+        Color, Format, Modify,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/colored_borders.rs b/tabled/examples/colored_borders.rs
index 2a0f90a..33c599e 100644
--- a/tabled/examples/colored_borders.rs
+++ b/tabled/examples/colored_borders.rs
@@ -5,8 +5,8 @@
 
 use tabled::{
     settings::{
-        color::Color,
         style::{RawStyle, Style},
+        Color,
     },
     Table, Tabled,
 };
@@ -30,21 +30,22 @@ impl CodeEditor {
 
 fn main() {
     let mut style = RawStyle::from(Style::extended());
-    style.set_color_top(Color::FG_RED);
-    style.set_color_bottom(Color::FG_CYAN);
-    style.set_color_left(Color::FG_BLUE);
-    style.set_color_right(Color::FG_GREEN);
-    style.set_color_corner_top_left(Color::FG_BLUE);
-    style.set_color_corner_top_right(Color::FG_RED);
-    style.set_color_corner_bottom_left(Color::FG_CYAN);
-    style.set_color_corner_bottom_right(Color::FG_GREEN);
-    style.set_color_intersection_bottom(Color::FG_CYAN);
-    style.set_color_intersection_top(Color::FG_RED);
-    style.set_color_intersection_right(Color::FG_GREEN);
-    style.set_color_intersection_left(Color::FG_BLUE);
-    style.set_color_intersection(Color::FG_MAGENTA);
-    style.set_color_horizontal(Color::FG_MAGENTA);
-    style.set_color_vertical(Color::FG_MAGENTA);
+    style
+        .set_color_top(Color::FG_RED)
+        .set_color_bottom(Color::FG_CYAN)
+        .set_color_left(Color::FG_BLUE)
+        .set_color_right(Color::FG_GREEN)
+        .set_color_corner_top_left(Color::FG_BLUE)
+        .set_color_corner_top_right(Color::FG_RED)
+        .set_color_corner_bottom_left(Color::FG_CYAN)
+        .set_color_corner_bottom_right(Color::FG_GREEN)
+        .set_color_intersection_bottom(Color::FG_CYAN)
+        .set_color_intersection_top(Color::FG_RED)
+        .set_color_intersection_right(Color::FG_GREEN)
+        .set_color_intersection_left(Color::FG_BLUE)
+        .set_color_intersection(Color::FG_MAGENTA)
+        .set_color_horizontal(Color::FG_MAGENTA)
+        .set_color_vertical(Color::FG_MAGENTA);
 
     let data = [
         CodeEditor::new("Sublime Text 3", "2008", "Sublime HQ"),
diff --git a/tabled/examples/compact_table.rs b/tabled/examples/compact_table.rs
index 649e47c..ced81e7 100644
--- a/tabled/examples/compact_table.rs
+++ b/tabled/examples/compact_table.rs
@@ -1,7 +1,7 @@
 //! The example can be run by this command
 //! `cargo run --example compact_table`
 
-use tabled::{settings::style::Style, tables::compact::CompactTable};
+use tabled::{settings::Style, tables::compact::CompactTable};
 
 fn main() {
     let data = [
@@ -13,8 +13,8 @@ fn main() {
     let table = CompactTable::new(data)
         .columns(3)
         .width([7, 5, 5])
-        .with(Style::markdown())
-        .to_string();
+        .with(Style::markdown());
 
-    println!("{table}");
+    #[cfg(feature = "std")]
+    println!("{}", table.to_string());
 }
diff --git a/tabled/examples/compact_table_2.rs b/tabled/examples/compact_table_2.rs
index b9e4dd9..238ac7d 100644
--- a/tabled/examples/compact_table_2.rs
+++ b/tabled/examples/compact_table_2.rs
@@ -1,7 +1,7 @@
 //! The example can be run by this command
 //! `cargo run --example compact_table_2`
 
-use tabled::{settings::style::Style, tables::compact::CompactTable};
+use tabled::{settings::Style, tables::compact::CompactTable};
 
 fn main() {
     let data = [
@@ -10,7 +10,8 @@ fn main() {
         ["Manjaro", "Arch", "true"],
     ];
 
-    let table = CompactTable::from(data).with(Style::psql()).to_string();
+    let table = CompactTable::from(data).with(Style::psql());
 
-    println!("{table}");
+    #[cfg(feature = "std")]
+    println!("{}", table.to_string());
 }
diff --git a/tabled/examples/concat.rs b/tabled/examples/concat.rs
index aba786e..a74cd86 100644
--- a/tabled/examples/concat.rs
+++ b/tabled/examples/concat.rs
@@ -2,7 +2,7 @@
 //! `cargo run --example concat`
 
 use tabled::{
-    settings::{alignment::Alignment, concat::Concat, object::Segment, style::Style, Modify},
+    settings::{object::Segment, Alignment, Concat, Modify, Style},
     Table, Tabled,
 };
 
diff --git a/tabled/examples/custom_style.rs b/tabled/examples/custom_style.rs
index a90905d..886deb9 100644
--- a/tabled/examples/custom_style.rs
+++ b/tabled/examples/custom_style.rs
@@ -3,8 +3,8 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
         style::{HorizontalLine, Style, VerticalLine},
+        Alignment,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/disable.rs b/tabled/examples/disable.rs
index 5d4013f..d9bc155 100644
--- a/tabled/examples/disable.rs
+++ b/tabled/examples/disable.rs
@@ -3,10 +3,9 @@
 
 use tabled::{
     settings::{
-        disable::Disable,
         locator::ByColumnName,
         style::{Border, Style},
-        Modify,
+        Disable, Modify,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/extract.rs b/tabled/examples/extract.rs
index db8c544..06964be 100644
--- a/tabled/examples/extract.rs
+++ b/tabled/examples/extract.rs
@@ -5,12 +5,8 @@ use std::fmt::{Display, Formatter};
 
 use tabled::{
     settings::{
-        alignment::Alignment,
-        extract::Extract,
-        format::Format,
         object::{Columns, Rows},
-        style::Style,
-        Modify,
+        Alignment, Extract, Format, Modify, Style,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/format.rs b/tabled/examples/format.rs
index fc83562..dd7b67b 100644
--- a/tabled/examples/format.rs
+++ b/tabled/examples/format.rs
@@ -5,10 +5,8 @@
 
 use tabled::{
     settings::{
-        format::Format,
         object::{Columns, Object, Rows},
-        style::Style,
-        Modify,
+        Format, Modify, Style,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/formatting_settings.rs b/tabled/examples/formatting_settings.rs
index 20e9a3b..167c0ae 100644
--- a/tabled/examples/formatting_settings.rs
+++ b/tabled/examples/formatting_settings.rs
@@ -3,11 +3,9 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
         formatting::{AlignmentStrategy, TrimStrategy},
         object::Segment,
-        style::Style,
-        Modify,
+        Alignment, Modify, Style,
     },
     Table,
 };
diff --git a/tabled/examples/grid_colors.rs b/tabled/examples/grid_colors.rs
index cbcb2f6..27a0763 100644
--- a/tabled/examples/grid_colors.rs
+++ b/tabled/examples/grid_colors.rs
@@ -6,7 +6,7 @@
 //! [`Grid`]: tabled::grid::Grid
 
 use tabled::{
-    settings::{color::Color, style::Style, Modify},
+    settings::{Color, Modify, Style},
     Table, Tabled,
 };
 
diff --git a/tabled/examples/height.rs b/tabled/examples/height.rs
index 0d43977..8ede899 100644
--- a/tabled/examples/height.rs
+++ b/tabled/examples/height.rs
@@ -2,7 +2,7 @@
 //! `cargo run --example height`
 
 use tabled::{
-    settings::{height::Height, peaker::PriorityMax, style::Style},
+    settings::{peaker::PriorityMax, Height, Style},
     Table,
 };
 
diff --git a/tabled/examples/highlight.rs b/tabled/examples/highlight.rs
index 7c3a851..50a1af5 100644
--- a/tabled/examples/highlight.rs
+++ b/tabled/examples/highlight.rs
@@ -3,9 +3,9 @@
 
 use tabled::{
     settings::{
-        highlight::Highlight,
         object::{Columns, Object, Rows},
         style::{Border, Style},
+        Highlight,
     },
     Table,
 };
diff --git a/tabled/examples/highlight_color.rs b/tabled/examples/highlight_color.rs
index affe187..252e2f8 100644
--- a/tabled/examples/highlight_color.rs
+++ b/tabled/examples/highlight_color.rs
@@ -3,10 +3,9 @@
 
 use tabled::{
     settings::{
-        color::Color,
-        highlight::Highlight,
         object::{Columns, Object, Rows},
-        style::{BorderColor, Style},
+        style::BorderColor,
+        Color, Highlight, Style,
     },
     Table,
 };
diff --git a/tabled/examples/hyperlink.rs b/tabled/examples/hyperlink.rs
index f76a216..0c30753 100644
--- a/tabled/examples/hyperlink.rs
+++ b/tabled/examples/hyperlink.rs
@@ -4,7 +4,7 @@
 //! This example requires the `color` feature.
 
 use tabled::{
-    settings::{alignment::Alignment, object::Segment, style::Style, width::Width, Modify},
+    settings::{object::Segment, Alignment, Modify, Style, Width},
     Table, Tabled,
 };
 
diff --git a/tabled/examples/iter_table.rs b/tabled/examples/iter_table.rs
index b6e4027..78d25a3 100644
--- a/tabled/examples/iter_table.rs
+++ b/tabled/examples/iter_table.rs
@@ -3,7 +3,7 @@
 
 use std::io::BufRead;
 
-use tabled::{settings::style::Style, tables::iter::IterTable};
+use tabled::{settings::Style, tables::iter::IterTable};
 
 fn main() {
     let path = file!();
diff --git a/tabled/examples/margin.rs b/tabled/examples/margin.rs
index 872a1b9..b44fee7 100644
--- a/tabled/examples/margin.rs
+++ b/tabled/examples/margin.rs
@@ -2,7 +2,7 @@
 //! `cargo run --example margin`
 
 use tabled::{
-    settings::{margin::Margin, style::Style},
+    settings::{Margin, Style},
     Table,
 };
 
diff --git a/tabled/examples/matrix.rs b/tabled/examples/matrix.rs
index 9cefa0b..14d151b 100644
--- a/tabled/examples/matrix.rs
+++ b/tabled/examples/matrix.rs
@@ -1,7 +1,7 @@
 //! The example can be run by this command
 //! `cargo run --example matrix`
 
-use tabled::{settings::style::Style, Table};
+use tabled::{settings::Style, Table};
 
 fn matrix<const N: usize>() -> [[usize; N]; N] {
     let mut matrix = [[0; N]; N];
diff --git a/tabled/examples/merge_duplicates.rs b/tabled/examples/merge_duplicates.rs
index 39d4c28..787e55d 100644
--- a/tabled/examples/merge_duplicates.rs
+++ b/tabled/examples/merge_duplicates.rs
@@ -3,8 +3,8 @@
 
 use tabled::{
     settings::{
-        merge::Merge,
         style::{BorderSpanCorrection, Style},
+        Merge,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/merge_duplicates_2.rs b/tabled/examples/merge_duplicates_2.rs
index 4a278cf..3736edb 100644
--- a/tabled/examples/merge_duplicates_2.rs
+++ b/tabled/examples/merge_duplicates_2.rs
@@ -3,10 +3,9 @@
 
 use tabled::{
     settings::{
-        merge::Merge,
         object::{Cell, Columns, Object, Rows},
         style::{Border, BorderSpanCorrection, Style},
-        Modify,
+        Merge, Modify,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/nested_table.rs b/tabled/examples/nested_table.rs
index 7a04c74..95fa0de 100644
--- a/tabled/examples/nested_table.rs
+++ b/tabled/examples/nested_table.rs
@@ -8,12 +8,9 @@ use std::iter::FromIterator;
 use tabled::{
     builder::Builder,
     settings::{
-        alignment::Alignment,
         object::{Rows, Segment},
-        padding::Padding,
         style::{HorizontalLine, Style},
-        width::Width,
-        Modify,
+        Alignment, Modify, Padding, Width,
     },
     Table,
 };
diff --git a/tabled/examples/nested_table_2.rs b/tabled/examples/nested_table_2.rs
index 32163bf..266fe6b 100644
--- a/tabled/examples/nested_table_2.rs
+++ b/tabled/examples/nested_table_2.rs
@@ -1,7 +1,7 @@
 //! The example can be run by this command
 //! `cargo run --example nested_table_2`
 
-use tabled::{settings::style::Style, Table, Tabled};
+use tabled::{settings::Style, Table, Tabled};
 
 #[derive(Tabled)]
 struct Vendor {
diff --git a/tabled/examples/nested_table_3.rs b/tabled/examples/nested_table_3.rs
index 0362be7..2379031 100644
--- a/tabled/examples/nested_table_3.rs
+++ b/tabled/examples/nested_table_3.rs
@@ -3,13 +3,8 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
-        extract::Extract,
-        highlight::Highlight,
         object::{Cell, Segment},
-        panel::Panel,
-        style::{Border, Style},
-        Modify,
+        Alignment, Border, Extract, Highlight, Modify, Panel, Style,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/padding_color.rs b/tabled/examples/padding_color.rs
index 0e8c3d2..3c0b65a 100644
--- a/tabled/examples/padding_color.rs
+++ b/tabled/examples/padding_color.rs
@@ -12,14 +12,8 @@ use tabled::{
     grid::{config::Entity, spanned::ExactDimension, util::string::string_width_multiline},
     records::{ExactRecords, Records, VecRecords},
     settings::{
-        alignment::Alignment,
-        color::Color,
-        format::Format,
-        margin::Margin,
         object::{Columns, Object, Rows, Segment},
-        padding::Padding,
-        style::Style,
-        CellOption, Modify,
+        Alignment, CellOption, Color, Format, Margin, Modify, Padding, Style,
     },
     tables::table::ColoredConfig,
     Table, Tabled,
diff --git a/tabled/examples/panel.rs b/tabled/examples/panel.rs
index 431cbae..8de8c9f 100644
--- a/tabled/examples/panel.rs
+++ b/tabled/examples/panel.rs
@@ -3,12 +3,9 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
         object::{Cell, Segment},
-        panel::Panel,
         style::{BorderSpanCorrection, Style},
-        width::Width,
-        Modify,
+        Alignment, Modify, Panel, Width,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/rotate.rs b/tabled/examples/rotate.rs
index bb5dfd8..a7b7f3a 100644
--- a/tabled/examples/rotate.rs
+++ b/tabled/examples/rotate.rs
@@ -1,7 +1,7 @@
 //! The example can be run by this command
 //! `cargo run --example rotate`
 
-use tabled::{settings::rotate::Rotate, Table, Tabled};
+use tabled::{settings::Rotate, Table, Tabled};
 
 #[derive(Tabled)]
 struct Linux {
diff --git a/tabled/examples/settings_list.rs b/tabled/examples/settings_list.rs
index bb987b2..4a3bb8c 100644
--- a/tabled/examples/settings_list.rs
+++ b/tabled/examples/settings_list.rs
@@ -3,12 +3,9 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
         object::{FirstRow, Rows},
-        padding::Padding,
-        style::builder::On,
-        style::Style,
-        Modify, ModifyList, Settings,
+        style::On,
+        Alignment, Modify, ModifyList, Padding, Settings, Style,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/shadow.rs b/tabled/examples/shadow.rs
index a5b23fc..499e8ab 100644
--- a/tabled/examples/shadow.rs
+++ b/tabled/examples/shadow.rs
@@ -23,13 +23,9 @@ use tabled::{
     grid::util::string,
     row,
     settings::{
-        height::Height,
         object::Cell,
-        padding::Padding,
-        shadow::Shadow,
         style::{BorderChar, Offset, RawStyle, Style},
-        width::Width,
-        Modify,
+        Height, Modify, Padding, Shadow, Width,
     },
     Table,
 };
diff --git a/tabled/examples/show/src/main.rs b/tabled/examples/show/src/main.rs
index 4ad8310..6898b7b 100644
--- a/tabled/examples/show/src/main.rs
+++ b/tabled/examples/show/src/main.rs
@@ -25,17 +25,9 @@ use crossterm::{
 
 use tabled::{
     settings::{
-        alignment::Alignment,
-        color::Color,
-        disable::Disable,
-        format::Format,
-        highlight::Highlight,
-        margin::Margin,
         object::{Columns, Object, Rows},
-        panel::Panel,
         style::{Border, BorderColor, BorderText, Style},
-        width::Width,
-        Modify,
+        Alignment, Color, Disable, Format, Highlight, Margin, Modify, Panel, Width,
     },
     Table, Tabled,
 };
diff --git a/tabled/examples/span.rs b/tabled/examples/span.rs
index 8e72d07..950cc17 100644
--- a/tabled/examples/span.rs
+++ b/tabled/examples/span.rs
@@ -3,11 +3,9 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
         object::Cell,
-        span::{ColumnSpan, RowSpan},
         style::{BorderSpanCorrection, Style},
-        Modify,
+        Alignment, Modify, Span,
     },
     Table,
 };
@@ -15,8 +13,8 @@ use tabled::{
 fn main() {
     let data = [["just 1 column"; 5]; 5];
 
-    let h_span = |r, c, span| Modify::new(Cell::new(r, c)).with(ColumnSpan::new(span));
-    let v_span = |r, c, span| Modify::new(Cell::new(r, c)).with(RowSpan::new(span));
+    let h_span = |r, c, span| Modify::new(Cell::new(r, c)).with(Span::vertical(span));
+    let v_span = |r, c, span| Modify::new(Cell::new(r, c)).with(Span::horizontal(span));
 
     let table = Table::new(data)
         .with(h_span(0, 0, 5).with("span all 5 columns"))
diff --git a/tabled/examples/table.rs b/tabled/examples/table.rs
index bd4d616..d79156e 100644
--- a/tabled/examples/table.rs
+++ b/tabled/examples/table.rs
@@ -2,7 +2,7 @@
 //! `cargo run --example table`
 
 use tabled::{
-    settings::{alignment::Alignment, object::Rows, style::Style, Modify},
+    settings::{object::Rows, Alignment, Modify, Style},
     Table, Tabled,
 };
 
diff --git a/tabled/examples/table_width.rs b/tabled/examples/table_width.rs
index 9ea6d0e..69a4fa1 100644
--- a/tabled/examples/table_width.rs
+++ b/tabled/examples/table_width.rs
@@ -2,10 +2,7 @@
 //! `cargo run --example table_width`
 
 use tabled::{
-    settings::{
-        alignment::Alignment, measurement::Percent, object::Segment, style::Style, width::Width,
-        Modify,
-    },
+    settings::{measurement::Percent, object::Segment, Alignment, Modify, Style, Width},
     Table,
 };
 
diff --git a/tabled/examples/table_width_2.rs b/tabled/examples/table_width_2.rs
index 2a48391..f2da812 100644
--- a/tabled/examples/table_width_2.rs
+++ b/tabled/examples/table_width_2.rs
@@ -2,7 +2,7 @@
 //! `cargo run --example table_width_2`
 
 use tabled::{
-    settings::{alignment::Alignment, object::Segment, style::Style, width::Width, Modify},
+    settings::{object::Segment, Alignment, Modify, Style, Width},
     Table,
 };
 
diff --git a/tabled/examples/terminal_size/src/main.rs b/tabled/examples/terminal_size/src/main.rs
index 3e21882..f13f4d9 100644
--- a/tabled/examples/terminal_size/src/main.rs
+++ b/tabled/examples/terminal_size/src/main.rs
@@ -1,7 +1,7 @@
 //! The example shows how we could spread a table to the size of a terminal.
 
 use tabled::{
-    settings::{height::Height, style::Style, width::Width},
+    settings::{Height, Style, Width},
     Table, Tabled,
 };
 
diff --git a/tabled/src/builder/mod.rs b/tabled/src/builder/mod.rs
index 310a797..9002ba2 100644
--- a/tabled/src/builder/mod.rs
+++ b/tabled/src/builder/mod.rs
@@ -9,7 +9,7 @@
 //!
 #![cfg_attr(feature = "derive", doc = "```")]
 #![cfg_attr(not(feature = "derive"), doc = "```ignore")]
-//! use tabled::{Table, Tabled, settings::style::Style};
+//! use tabled::{Table, Tabled, settings::Style};
 //!
 //! #[derive(Tabled)]
 //! struct Mission {
@@ -64,7 +64,7 @@
 //!
 #![cfg_attr(feature = "derive", doc = "```")]
 #![cfg_attr(not(feature = "derive"), doc = "```ignore")]
-//! use tabled::{Table, Tabled, settings::style::Style};
+//! use tabled::{Table, Tabled, settings::Style};
 //!
 //! #[derive(Tabled)]
 //! enum Status {
diff --git a/tabled/src/builder/table_builder.rs b/tabled/src/builder/table_builder.rs
index c32714f..5117171 100644
--- a/tabled/src/builder/table_builder.rs
+++ b/tabled/src/builder/table_builder.rs
@@ -288,12 +288,12 @@ impl Builder {
 
             if is_empty {
                 for row in 0..self.records.len() {
-                    self.records[row].remove(col);
+                    let _ = self.records[row].remove(col);
                 }
 
                 if let Some(columns) = self.columns.as_mut() {
                     if columns.len() > col {
-                        columns.remove(col);
+                        let _ = columns.remove(col);
                     }
                 }
 
@@ -315,7 +315,7 @@ impl Builder {
             }
 
             if is_empty {
-                self.records.remove(row);
+                let _ = self.records.remove(row);
             }
 
             if row == 0 {
diff --git a/tabled/src/lib.rs b/tabled/src/lib.rs
index 9fee198..325bf12 100644
--- a/tabled/src/lib.rs
+++ b/tabled/src/lib.rs
@@ -105,7 +105,7 @@
 #![cfg_attr(not(feature = "derive"), doc = "```ignore")]
 //! use tabled::{
 //!     Tabled, Table,
-//!     settings::{style::Style, alignment::Alignment, Modify, object::{Rows, Columns, Object}}
+//!     settings::{Style, Alignment, Modify, object::{Rows, Columns, Object}}
 //! };
 //!
 //! #[derive(Tabled)]
@@ -153,7 +153,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//! use tabled::{builder::Builder, settings::{Modify, object::Rows, alignment::Alignment, style::Style}};
+//! use tabled::{builder::Builder, settings::{Modify, object::Rows, Alignment, Style}};
 //!
 //! let header = std::iter::once(String::from("i")).chain((0..10).map(|i| i.to_string()));
 //!
@@ -271,8 +271,19 @@
 #![warn(
     missing_docs,
     rust_2018_idioms,
+    rust_2018_compatibility,
     missing_debug_implementations,
-    unreachable_pub
+    unreachable_pub,
+    future_incompatible,
+    single_use_lifetimes,
+    trivial_casts,
+    trivial_numeric_casts,
+    unused_extern_crates,
+    unused_import_braces,
+    unused_qualifications,
+    unused_results,
+    unused_variables,
+    variant_size_differences
 )]
 #![allow(clippy::uninlined_format_args)]
 
@@ -287,8 +298,8 @@ pub mod records;
 pub mod settings;
 pub mod tables;
 
-#[cfg(all(feature = "std", feature = "macros"))]
-#[cfg_attr(docsrs, doc(cfg(all(feature = "std", feature = "macros"))))]
+#[cfg(feature = "macros")]
+#[cfg_attr(docsrs, doc(cfg(feature = "macros")))]
 pub mod macros;
 
 pub mod grid {
@@ -503,6 +514,6 @@ pub use crate::{tabled::Tabled, tables::table::Table};
 ///     price: f32,
 /// }
 /// ```
-#[cfg(all(feature = "std", feature = "derive"))]
-#[cfg_attr(docsrs, doc(cfg(all(feature = "std", feature = "derive"))))]
+#[cfg(feature = "derive")]
+#[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
 pub use tabled_derive::Tabled;
diff --git a/tabled/src/records/mod.rs b/tabled/src/records/mod.rs
index 2afe8ee..3a67864 100644
--- a/tabled/src/records/mod.rs
+++ b/tabled/src/records/mod.rs
@@ -36,7 +36,7 @@ pub trait ExactRecords {
     fn get_cell(&self, pos: Position) -> &Self::Cell;
 }
 
-impl<'a, T> ExactRecords for &'a T
+impl<T> ExactRecords for &'_ T
 where
     T: ExactRecords,
 {
@@ -107,7 +107,7 @@ pub trait Resizable {
     fn insert_column(&mut self, column: usize);
 }
 
-impl<'a, T> Resizable for &'a mut T
+impl<T> Resizable for &'_ mut T
 where
     T: Resizable,
 {
@@ -188,12 +188,12 @@ where
     }
 
     fn remove_row(&mut self, row: usize) {
-        self.remove(row);
+        let _ = self.remove(row);
     }
 
     fn remove_column(&mut self, column: usize) {
         for row in self.iter_mut() {
-            row.remove(column);
+            let _ = row.remove(column);
         }
     }
 
@@ -215,7 +215,7 @@ pub trait RecordsMut<Text> {
     fn set(&mut self, pos: Position, text: Text);
 }
 
-impl<'a, T, Text> RecordsMut<Text> for &'a mut T
+impl<T, Text> RecordsMut<Text> for &'_ mut T
 where
     T: RecordsMut<Text>,
 {
diff --git a/tabled/src/records/vec_records.rs b/tabled/src/records/vec_records.rs
index 3b01ccd..db91f2d 100644
--- a/tabled/src/records/vec_records.rs
+++ b/tabled/src/records/vec_records.rs
@@ -123,14 +123,14 @@ where
 
     fn remove_row(&mut self, row: usize) {
         self.shape.0 -= 1;
-        self.data.remove(row);
+        let _ = self.data.remove(row);
     }
 
     fn remove_column(&mut self, column: usize) {
         self.shape.1 -= 1;
 
         for row in &mut self.data {
-            row.remove(column);
+            let _ = row.remove(column);
         }
     }
 
diff --git a/tabled/src/settings/alignment/mod.rs b/tabled/src/settings/alignment/mod.rs
index e3d6961..c06e6f6 100644
--- a/tabled/src/settings/alignment/mod.rs
+++ b/tabled/src/settings/alignment/mod.rs
@@ -10,8 +10,7 @@
 //!     Table,
 //!     settings::{
 //!         formatting::AlignmentStrategy,
-//!         object::Segment, alignment::Alignment,
-//!         Modify, style::Style,
+//!         object::Segment, Alignment, Modify, Style,
 //!     }
 //! };
 //!
@@ -67,7 +66,7 @@ use crate::tables::table::ColoredConfig;
 ///
 #[cfg_attr(feature = "std", doc = "```")]
 #[cfg_attr(not(feature = "std"), doc = "```ignore")]
-/// # use tabled::{Table, settings::{alignment::Alignment, Modify, object::Rows}};
+/// # use tabled::{Table, settings::{Alignment, Modify, object::Rows}};
 /// # let data: Vec<&'static str> = Vec::new();
 /// let mut table = Table::new(&data);
 /// table.with(Modify::new(Rows::single(0)).with(Alignment::center()));
diff --git a/tabled/src/settings/color/mod.rs b/tabled/src/settings/color/mod.rs
index 2059156..c7c534e 100644
--- a/tabled/src/settings/color/mod.rs
+++ b/tabled/src/settings/color/mod.rs
@@ -1,6 +1,6 @@
 //! This module contains a configuration of a [`Border`] or a [`Table`] to set its borders color via [`Color`].
 //!
-//! [`Border`]: crate::settings::style::Border
+//! [`Border`]: crate::settings::Border
 //! [`Table`]: crate::Table
 
 use std::borrow::Cow;
@@ -17,7 +17,7 @@ use crate::{
 /// # Example
 ///
 /// ```
-/// use tabled::{settings::color::Color, Table};
+/// use tabled::{settings::Color, Table};
 ///
 /// let data = [
 ///     (0u8, "Hello"),
@@ -31,9 +31,9 @@ use crate::{
 /// println!("{}", table);
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
-/// [`Margin`]: crate::settings::margin::Margin
-/// [`Border`]: crate::settings::style::Border
+/// [`Padding`]: crate::settings::Padding
+/// [`Margin`]: crate::settings::Margin
+/// [`Border`]: crate::settings::Border
 #[derive(Debug, Clone, Default, Eq, PartialEq)]
 pub struct Color(AnsiColor<'static>);
 
@@ -217,7 +217,7 @@ where
     fn change(&mut self, records: &mut R, cfg: &mut ColoredConfig, _: &mut D) {
         for row in 0..records.count_rows() {
             for col in 0..records.count_columns() {
-                cfg.set_color((row, col), self.0.clone());
+                let _ = cfg.set_color((row, col), self.0.clone());
             }
         }
     }
@@ -229,7 +229,7 @@ where
 {
     fn change(&mut self, records: &mut R, cfg: &mut ColoredConfig, entity: Entity) {
         for pos in entity.iter(records.count_rows(), records.count_columns()) {
-            cfg.set_color(pos, self.0.clone());
+            let _ = cfg.set_color(pos, self.0.clone());
         }
     }
 }
diff --git a/tabled/src/settings/concat/mod.rs b/tabled/src/settings/concat/mod.rs
index 9ce16f5..fb4ca9d 100644
--- a/tabled/src/settings/concat/mod.rs
+++ b/tabled/src/settings/concat/mod.rs
@@ -4,7 +4,7 @@
 //!
 #![cfg_attr(feature = "derive", doc = "```")]
 #![cfg_attr(not(feature = "derive"), doc = "```ignore")]
-//! use tabled::{Table, Tabled, settings::{style::Style, concat::Concat}};
+//! use tabled::{Table, Tabled, settings::{Style, Concat}};
 //!
 //! #[derive(Tabled)]
 //! struct Message {
@@ -65,7 +65,7 @@ use crate::{
 /// But it behaves on tables rather than on an actual data.
 ///
 /// ```
-/// use tabled::{Table, settings::concat::Concat};
+/// use tabled::{Table, settings::Concat};
 /// let table1 = Table::new([0, 1, 2, 3]);
 /// let table2 = Table::new(["A", "B", "C", "D"]);
 ///
@@ -137,7 +137,7 @@ where
                 for row in 0..rhs.shape().0 {
                     for col in 0..rhs.shape().1 {
                         let mut cell_text = GetCell(String::new(), (row, col));
-                        rhs.with(&mut cell_text);
+                        let _ = rhs.with(&mut cell_text);
                         let text = cell_text.0;
 
                         let col = col + count_cols;
@@ -161,7 +161,7 @@ where
                 for row in 0..rhs.shape().0 {
                     for col in 0..rhs.shape().1 {
                         let mut cell_text = GetCell(String::new(), (row, col));
-                        rhs.with(&mut cell_text);
+                        let _ = rhs.with(&mut cell_text);
                         let text = cell_text.0;
 
                         let row = row + count_rows;
diff --git a/tabled/src/settings/disable/mod.rs b/tabled/src/settings/disable/mod.rs
index 74c127c..b2e003f 100644
--- a/tabled/src/settings/disable/mod.rs
+++ b/tabled/src/settings/disable/mod.rs
@@ -7,7 +7,7 @@
 //! # Example
 //!
 //! ```
-//! use tabled::{Table, settings::{disable::Disable, object::Rows}};
+//! use tabled::{Table, settings::{Disable, object::Rows}};
 //!
 //! let data = vec!["Hello", "World", "!!!"];
 //!
@@ -42,7 +42,7 @@ use crate::{
 /// # Example
 ///
 /// ```rust,no_run
-/// # use tabled::{Table, settings::{disable::Disable, object::Rows}};
+/// # use tabled::{Table, settings::{Disable, object::Rows}};
 /// # let data: Vec<&'static str> = Vec::new();
 /// let table = Table::new(&data).with(Disable::row(Rows::first()));
 /// ```
@@ -66,7 +66,7 @@ impl<L> Disable<L, TargetColumn> {
     /// - [`ByColumnName`]
     ///
     /// ```rust
-    /// use tabled::{builder::Builder, settings::{disable::Disable, locator::ByColumnName, object::Columns}};
+    /// use tabled::{builder::Builder, settings::{Disable, locator::ByColumnName, object::Columns}};
     ///
     /// let mut builder = Builder::default();
     ///
@@ -111,7 +111,7 @@ impl<L> Disable<L, TargetRow> {
     /// - [`LastRow`]
     ///
     /// ```rust
-    /// use tabled::{settings::{disable::Disable, object::Rows}, builder::Builder};
+    /// use tabled::{settings::{Disable, object::Rows}, builder::Builder};
     ///
     /// let mut builder = Builder::default();
     /// builder.push_record(["col1", "col2", "col3"]);
diff --git a/tabled/src/settings/extract/mod.rs b/tabled/src/settings/extract/mod.rs
index 71135a9..4068565 100644
--- a/tabled/src/settings/extract/mod.rs
+++ b/tabled/src/settings/extract/mod.rs
@@ -6,11 +6,12 @@
 //! [`Table`]: crate::Table
 //! [`Highlight`]: crate::settings::highlight::Highlight
 
-use std::ops::{RangeBounds, RangeFull};
+use core::cmp::min;
+use core::ops::{Bound, RangeBounds, RangeFull};
 
 use crate::{
     records::{ExactRecords, Records, Resizable},
-    settings::{object::util::bounds_to_usize, TableOption},
+    settings::TableOption,
 };
 
 /// Returns a new [`Table`] that reflects a segment of the referenced [`Table`]
@@ -18,7 +19,7 @@ use crate::{
 /// # Example
 ///
 /// ```
-/// use tabled::{Table, settings::{format::Format, object::Rows, Modify, extract::Extract}};
+/// use tabled::{Table, settings::{Format, object::Rows, Modify, Extract}};
 ///
 /// let data = vec![
 ///     (0, "Grodno", true),
@@ -54,7 +55,7 @@ where
     /// Returns a new [`Table`] that reflects a segment of the referenced [`Table`]
     ///
     /// ```rust,no_run
-    /// # use tabled::settings::extract::Extract;
+    /// # use tabled::settings::Extract;
     /// let rows = 1..3;
     /// let columns = 1..;
     /// Extract::segment(rows, columns);
@@ -89,7 +90,7 @@ where
     /// The segment is defined by [`RangeBounds`] for Rows
     ///
     /// ```rust,no_run
-    /// # use tabled::settings::extract::Extract;
+    /// # use tabled::settings::Extract;
     /// Extract::rows(1..3);
     /// ```
     ///
@@ -123,7 +124,7 @@ where
     /// The segment is defined by [`RangeBounds`] for columns.
     ///
     /// ```rust,no_run
-    /// # use tabled::settings::extract::Extract;
+    /// # use tabled::settings::Extract;
     /// Extract::columns(1..3);
     /// ```
     ///
@@ -167,8 +168,8 @@ where
         // Cleanup table in case if boundaries are exceeded.
         //
         // todo: can be optimized by adding a clear() method to Resizable
-        rows.0 = std::cmp::min(rows.0, count_rows);
-        cols.0 = std::cmp::min(cols.0, count_columns);
+        rows.0 = min(rows.0, count_rows);
+        cols.0 = min(cols.0, count_columns);
 
         extract(records, (count_rows, count_columns), rows, cols);
     }
@@ -233,3 +234,23 @@ fn extract<R>(
         records.remove_column(col);
     }
 }
+
+fn bounds_to_usize(
+    left: Bound<&usize>,
+    right: Bound<&usize>,
+    count_elements: usize,
+) -> (usize, usize) {
+    match (left, right) {
+        (Bound::Included(x), Bound::Included(y)) => (*x, y + 1),
+        (Bound::Included(x), Bound::Excluded(y)) => (*x, *y),
+        (Bound::Included(x), Bound::Unbounded) => (*x, count_elements),
+        (Bound::Unbounded, Bound::Unbounded) => (0, count_elements),
+        (Bound::Unbounded, Bound::Included(y)) => (0, y + 1),
+        (Bound::Unbounded, Bound::Excluded(y)) => (0, *y),
+        (Bound::Excluded(_), Bound::Unbounded)
+        | (Bound::Excluded(_), Bound::Included(_))
+        | (Bound::Excluded(_), Bound::Excluded(_)) => {
+            unreachable!("A start bound can't be excluded")
+        }
+    }
+}
diff --git a/tabled/src/settings/format/format_content.rs b/tabled/src/settings/format/format_content.rs
index a8152a3..29940bd 100644
--- a/tabled/src/settings/format/format_content.rs
+++ b/tabled/src/settings/format/format_content.rs
@@ -20,7 +20,7 @@ where
     /// Using this formatting applied for all rows not to a string as a whole.
     ///
     /// ```rust,no_run
-    /// use tabled::{Table, settings::{format::Format, object::Segment, Modify}};
+    /// use tabled::{Table, settings::{Format, object::Segment, Modify}};
     ///
     /// let data: Vec<&'static str> = Vec::new();
     /// let table = Table::new(&data)
diff --git a/tabled/src/settings/format/mod.rs b/tabled/src/settings/format/mod.rs
index 6d292d2..1f621b0 100644
--- a/tabled/src/settings/format/mod.rs
+++ b/tabled/src/settings/format/mod.rs
@@ -23,7 +23,7 @@ impl Format {
     /// # Example
     ///
     /// ```
-    /// use tabled::{Table, settings::{format::Format, object::Rows, Modify}};
+    /// use tabled::{Table, settings::{Format, object::Rows, Modify}};
     ///
     /// let data = vec![
     ///     (0, "Grodno", true),
@@ -65,7 +65,7 @@ impl Format {
     /// # Example
     ///
     /// ```
-    /// use tabled::{Table, settings::{format::Format, object::Rows, Modify}};
+    /// use tabled::{Table, settings::{Format, object::Rows, Modify}};
     ///
     /// let data = vec![
     ///     (0, "Grodno", true),
diff --git a/tabled/src/settings/formatting/alignment_strategy.rs b/tabled/src/settings/formatting/alignment_strategy.rs
index 6dbf407..a8a5a70 100644
--- a/tabled/src/settings/formatting/alignment_strategy.rs
+++ b/tabled/src/settings/formatting/alignment_strategy.rs
@@ -9,7 +9,7 @@ use crate::{grid::config::Entity, settings::CellOption, tables::table::ColoredCo
 /// use tabled::{
 ///     Table,
 ///     settings::{
-///         style::Style, Modify, alignment::Alignment, object::Segment,
+///         Style, Modify, Alignment, object::Segment,
 ///         formatting::{AlignmentStrategy, TrimStrategy}
 ///     }
 /// };
diff --git a/tabled/src/settings/formatting/trim_strategy.rs b/tabled/src/settings/formatting/trim_strategy.rs
index cb8a63c..f78cf59 100644
--- a/tabled/src/settings/formatting/trim_strategy.rs
+++ b/tabled/src/settings/formatting/trim_strategy.rs
@@ -8,7 +8,7 @@ use crate::{grid::config::Entity, settings::CellOption, tables::table::ColoredCo
 /// use tabled::{
 ///     Table,
 ///     settings::{
-///         style::Style, Modify, alignment::Alignment, object::Segment,
+///         Style, Modify, Alignment, object::Segment,
 ///         formatting::{TrimStrategy, AlignmentStrategy}
 ///     }
 /// };
diff --git a/tabled/src/settings/height/cell_height_increase.rs b/tabled/src/settings/height/cell_height_increase.rs
index 81d859d..7072bf0 100644
--- a/tabled/src/settings/height/cell_height_increase.rs
+++ b/tabled/src/settings/height/cell_height_increase.rs
@@ -2,7 +2,7 @@ use crate::{
     grid::config::Entity,
     grid::util::string::count_lines,
     records::{ExactRecords, Records, RecordsMut},
-    settings::{height::Height, measurement::Measurement, peaker::Peaker, CellOption, TableOption},
+    settings::{measurement::Measurement, peaker::Peaker, CellOption, Height, TableOption},
     tables::table::{ColoredConfig, TableDimension},
 };
 
diff --git a/tabled/src/settings/height/cell_height_limit.rs b/tabled/src/settings/height/cell_height_limit.rs
index 09b6d72..dd51978 100644
--- a/tabled/src/settings/height/cell_height_limit.rs
+++ b/tabled/src/settings/height/cell_height_limit.rs
@@ -2,7 +2,7 @@ use crate::{
     grid::config::Entity,
     grid::util::string::{count_lines, get_lines},
     records::{ExactRecords, Records, RecordsMut},
-    settings::{height::Height, measurement::Measurement, peaker::Peaker, CellOption, TableOption},
+    settings::{measurement::Measurement, peaker::Peaker, CellOption, Height, TableOption},
     tables::table::{ColoredConfig, TableDimension},
 };
 
diff --git a/tabled/src/settings/height/height_list.rs b/tabled/src/settings/height/height_list.rs
index 432cd28..01ff497 100644
--- a/tabled/src/settings/height/height_list.rs
+++ b/tabled/src/settings/height/height_list.rs
@@ -42,6 +42,6 @@ where
             return;
         }
 
-        dims.set_heights(self.list.clone());
+        let _ = dims.set_heights(self.list.clone());
     }
 }
diff --git a/tabled/src/settings/height/mod.rs b/tabled/src/settings/height/mod.rs
index 85d9892..ad9caff 100644
--- a/tabled/src/settings/height/mod.rs
+++ b/tabled/src/settings/height/mod.rs
@@ -20,7 +20,7 @@ pub use table_height_limit::TableHeightLimit;
 /// # Example
 ///
 /// ```
-/// use tabled::{Table, settings::{height::Height, Settings}};
+/// use tabled::{Table, settings::{Height, Settings}};
 ///
 /// let data = vec![
 ///     ("Some data", "here", "and here"),
@@ -56,7 +56,7 @@ impl Height {
     /// ## Cell height
     ///
     /// ```
-    /// use tabled::{Table, settings::{height::Height, Modify, object::Columns}};
+    /// use tabled::{Table, settings::{Height, Modify, object::Columns}};
     ///
     /// let data = vec![
     ///     ("Some data", "here", "and here"),
@@ -94,7 +94,7 @@ impl Height {
     /// ## Table height
     ///
     /// ```
-    /// use tabled::{Table, settings::height::Height};
+    /// use tabled::{Table, settings::Height};
     ///
     /// let data = vec![
     ///     ("Some data", "here", "and here"),
@@ -130,7 +130,7 @@ impl Height {
     /// ## Cell height
     ///
     /// ```
-    /// use tabled::{Table, settings::{height::Height, Modify, object::Columns}};
+    /// use tabled::{Table, settings::{Height, Modify, object::Columns}};
     ///
     /// let data = vec![
     ///     ("Some\ndata", "here", "and here"),
@@ -156,7 +156,7 @@ impl Height {
     /// ## Table height
     ///
     /// ```
-    /// use tabled::{Table, settings::height::Height};
+    /// use tabled::{Table, settings::Height};
     ///
     /// let data = vec![
     ///     ("Some\ndata", "here", "and here"),
@@ -200,7 +200,7 @@ impl Height {
     /// # Example
     ///
     /// ```
-    /// use tabled::{Table, settings::{height::Height, Modify, object::Columns}};
+    /// use tabled::{Table, settings::{Height, Modify, object::Columns}};
     ///
     /// let data = vec![
     ///     ("Some\ndata", "here", "and here"),
diff --git a/tabled/src/settings/height/table_height_increase.rs b/tabled/src/settings/height/table_height_increase.rs
index 2fe21a1..dba69ed 100644
--- a/tabled/src/settings/height/table_height_increase.rs
+++ b/tabled/src/settings/height/table_height_increase.rs
@@ -1,10 +1,9 @@
 use crate::{
     records::{ExactRecords, Records},
     settings::{
-        height::Height,
         measurement::Measurement,
         peaker::{Peaker, PriorityNone},
-        TableOption,
+        Height, TableOption,
     },
     tables::table::{ColoredConfig, TableDimension},
 };
@@ -67,7 +66,7 @@ where
 
         get_increase_list(&mut heights, height, total, self.priority.clone());
 
-        dims.set_heights(heights);
+        let _ = dims.set_heights(heights);
     }
 }
 
diff --git a/tabled/src/settings/height/table_height_limit.rs b/tabled/src/settings/height/table_height_limit.rs
index aefc5d6..c473a64 100644
--- a/tabled/src/settings/height/table_height_limit.rs
+++ b/tabled/src/settings/height/table_height_limit.rs
@@ -2,10 +2,9 @@ use crate::{
     grid::util::string::{count_lines, get_lines},
     records::{ExactRecords, Records, RecordsMut},
     settings::{
-        height::Height,
         measurement::Measurement,
         peaker::{Peaker, PriorityNone},
-        TableOption,
+        Height, TableOption,
     },
     tables::table::{ColoredConfig, TableDimension},
 };
@@ -86,7 +85,7 @@ where
             }
         }
 
-        dims.set_heights(heights);
+        let _ = dims.set_heights(heights);
     }
 }
 
diff --git a/tabled/src/settings/highlight/mod.rs b/tabled/src/settings/highlight/mod.rs
index 1e9f57d..810d3fb 100644
--- a/tabled/src/settings/highlight/mod.rs
+++ b/tabled/src/settings/highlight/mod.rs
@@ -9,7 +9,7 @@ use crate::{
     grid::config::{Border as GridBorder, Entity, Position},
     grid::spanned::GridConfig,
     records::{ExactRecords, Records},
-    settings::{object::Object, style::Border, style::BorderColor, TableOption},
+    settings::{object::Object, style::BorderColor, Border, TableOption},
     tables::table::ColoredConfig,
 };
 
@@ -20,7 +20,7 @@ use crate::{
 /// ```
 /// use tabled::{
 ///     Table,
-///     settings::{highlight::Highlight, style::{Border, Style}, object::Segment}
+///     settings::{Highlight, Border, Style, object::Segment}
 /// };
 ///
 /// let data = [
@@ -54,8 +54,7 @@ use crate::{
 /// use tabled::{
 ///     Table,
 ///     settings::{
-///         highlight::Highlight,
-///         style::{Border, Style},
+///         Highlight, Border, Style,
 ///         object::{Segment, Object}
 ///     }
 /// };
@@ -96,6 +95,8 @@ pub struct Highlight<O> {
     border: Border,
 }
 
+// todo: Add BorderColor.
+
 impl<O> Highlight<O> {
     /// Build a new instance of [`Highlight`]
     ///
@@ -182,11 +183,11 @@ fn split_segments(
 
             match found_segment {
                 Some(segment) => {
-                    segment.insert(cell);
+                    let _ = segment.insert(cell);
                 }
                 None => {
                     let mut segment = HashSet::new();
-                    segment.insert(cell);
+                    let _ = segment.insert(cell);
                     segments.push(segment);
                 }
             }
@@ -201,7 +202,7 @@ fn split_segments(
         while i < segments.len() {
             if is_segment_connected(&segment, &segments[i]) {
                 segment.extend(&segments[i]);
-                segments.remove(i);
+                let _ = segments.remove(i);
             } else {
                 i += 1;
             }
diff --git a/tabled/src/settings/locator/mod.rs b/tabled/src/settings/locator/mod.rs
index 4d11419..d198160 100644
--- a/tabled/src/settings/locator/mod.rs
+++ b/tabled/src/settings/locator/mod.rs
@@ -1,5 +1,6 @@
 //! The module contains a [`Locator`] trait and implementations for it.
 
+use core::ops::Bound;
 use std::{
     iter::{self, Once},
     ops::{Range, RangeBounds},
@@ -9,8 +10,7 @@ use crate::{
     grid::config::Entity,
     records::{ExactRecords, Records},
     settings::object::{
-        util::bounds_to_usize, Column, Columns, FirstColumn, FirstRow, LastColumn, LastRow, Object,
-        Row, Rows,
+        Column, Columns, FirstColumn, FirstRow, LastColumn, LastRow, Object, Row, Rows,
     },
 };
 
@@ -180,3 +180,23 @@ where
             .into_iter()
     }
 }
+
+fn bounds_to_usize(
+    left: Bound<&usize>,
+    right: Bound<&usize>,
+    count_elements: usize,
+) -> (usize, usize) {
+    match (left, right) {
+        (Bound::Included(x), Bound::Included(y)) => (*x, y + 1),
+        (Bound::Included(x), Bound::Excluded(y)) => (*x, *y),
+        (Bound::Included(x), Bound::Unbounded) => (*x, count_elements),
+        (Bound::Unbounded, Bound::Unbounded) => (0, count_elements),
+        (Bound::Unbounded, Bound::Included(y)) => (0, y + 1),
+        (Bound::Unbounded, Bound::Excluded(y)) => (0, *y),
+        (Bound::Excluded(_), Bound::Unbounded)
+        | (Bound::Excluded(_), Bound::Included(_))
+        | (Bound::Excluded(_), Bound::Excluded(_)) => {
+            unreachable!("A start bound can't be excluded")
+        }
+    }
+}
diff --git a/tabled/src/settings/margin/mod.rs b/tabled/src/settings/margin/mod.rs
index ad2c022..6089f62 100644
--- a/tabled/src/settings/margin/mod.rs
+++ b/tabled/src/settings/margin/mod.rs
@@ -4,7 +4,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//! use tabled::{settings::{margin::Margin, style::Style}, Table};
+//! use tabled::{settings::{Margin, Style}, Table};
 //!
 //! let data = vec!["Hello", "World", "!"];
 //!
@@ -28,22 +28,27 @@
 
 use crate::{
     grid::{
-        color::{AnsiColor, StaticColor},
+        color::StaticColor,
         compact::CompactConfig,
         config::{Indent, Sides},
-        spanned::config::{ColoredMarginIndent, Offset},
     },
     settings::TableOption,
 };
 
 #[cfg(feature = "std")]
-use crate::tables::table::ColoredConfig;
+use crate::{
+    grid::{
+        color::AnsiColor,
+        spanned::config::{ColoredMarginIndent, Offset},
+    },
+    tables::table::ColoredConfig,
+};
 
 /// Margin is responsible for a left/right/top/bottom outer indent of a grid.
 ///
 #[cfg_attr(feature = "std", doc = "```")]
 #[cfg_attr(not(feature = "std"), doc = "```ignore")]
-/// # use tabled::{settings::margin::Margin, Table};
+/// # use tabled::{settings::Margin, Table};
 /// # let data: Vec<&'static str> = Vec::new();
 /// let table = Table::new(&data)
 ///     .with(Margin::new(1, 1, 1, 1).fill('>', '<', 'V', '^'));
diff --git a/tabled/src/settings/measurement/mod.rs b/tabled/src/settings/measurement/mod.rs
index b1362a5..afbf53a 100644
--- a/tabled/src/settings/measurement/mod.rs
+++ b/tabled/src/settings/measurement/mod.rs
@@ -4,8 +4,7 @@ use crate::{
     grid::spanned::{ExactDimension, GridConfig},
     grid::util::string::{self, string_width_multiline},
     records::{ExactRecords, Records},
-    settings::height::Height,
-    settings::width::Width,
+    settings::{Height, Width},
 };
 
 /// A width value which can be obtained on behalf of [`Table`].
diff --git a/tabled/src/settings/mod.rs b/tabled/src/settings/mod.rs
index 8aed90b..40e6914 100644
--- a/tabled/src/settings/mod.rs
+++ b/tabled/src/settings/mod.rs
@@ -11,7 +11,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//! use tabled::{Table, settings::{Settings, style::Style, padding::Padding}};
+//! use tabled::{Table, settings::{Settings, Style, Padding}};
 //!
 //! let table_config = Settings::default()
 //!     .with(Padding::new(2, 2, 1, 1))
@@ -41,13 +41,7 @@
 //! )
 //! ```
 
-#[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 mod cell_option;
-
-#[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-mod modify;
 mod settings_list;
 mod table_option;
 
@@ -55,16 +49,25 @@ mod table_option;
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod object;
 
-pub mod alignment;
 #[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-pub mod concat;
+mod modify;
+
+mod alignment;
+mod extract;
+mod margin;
+mod padding;
+mod rotate;
+
 #[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-pub mod disable;
+mod color;
+#[cfg(feature = "std")]
+mod concat;
+
+pub mod style;
+
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-pub mod extract;
+pub mod disable;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod format;
@@ -80,14 +83,12 @@ pub mod highlight;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod locator;
-pub mod margin;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod measurement;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod merge;
-pub mod padding;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod panel;
@@ -96,28 +97,30 @@ pub mod panel;
 pub mod peaker;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-pub mod rotate;
-#[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-pub mod shadow;
+mod shadow;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod span;
-pub mod style;
-
-#[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
-pub mod color;
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub mod width;
 
-#[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub use cell_option::CellOption;
+pub use settings_list::{EmptySettings, Settings};
+pub use table_option::TableOption;
+
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub use modify::{Modify, ModifyList};
 
-pub use settings_list::{EmptySettings, Settings};
-pub use table_option::TableOption;
+pub use self::{
+    alignment::Alignment, extract::Extract, margin::Margin, padding::Padding, style::Style,
+};
+
+#[cfg(feature = "std")]
+#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
+pub use self::{
+    color::Color, concat::Concat, disable::Disable, format::Format, height::Height,
+    highlight::Highlight, merge::Merge, panel::Panel, rotate::Rotate, shadow::Shadow, span::Span,
+    style::Border, width::Width,
+};
diff --git a/tabled/src/settings/object/mod.rs b/tabled/src/settings/object/mod.rs
index f227daa..3162ebf 100644
--- a/tabled/src/settings/object/mod.rs
+++ b/tabled/src/settings/object/mod.rs
@@ -260,7 +260,7 @@ where
                     continue;
                 }
 
-                self.seen.insert(p);
+                let _ = self.seen.insert(p);
                 return Some(Entity::Cell(p.0, p.1));
             }
         }
@@ -269,7 +269,7 @@ where
             for entity in lhs.by_ref() {
                 let mut iter = entity.iter(self.count_rows, self.count_cols);
                 if let Some(p) = iter.by_ref().next() {
-                    self.seen.insert(p);
+                    let _ = self.seen.insert(p);
                     self.current = Some(iter);
                     return Some(Entity::Cell(p.0, p.1));
                 }
@@ -283,7 +283,7 @@ where
 
             for p in iter.by_ref() {
                 if !self.seen.contains(&p) {
-                    self.seen.insert(p);
+                    let _ = self.seen.insert(p);
                     self.current = Some(iter);
                     return Some(Entity::Cell(p.0, p.1));
                 }
diff --git a/tabled/src/settings/object/util.rs b/tabled/src/settings/object/util.rs
index dfce0c7..94ca20e 100644
--- a/tabled/src/settings/object/util.rs
+++ b/tabled/src/settings/object/util.rs
@@ -1,7 +1,7 @@
 use std::ops::Bound;
 
 /// Converts a range bound to its indexes.
-pub(crate) fn bounds_to_usize(
+pub(super) fn bounds_to_usize(
     left: Bound<&usize>,
     right: Bound<&usize>,
     count_elements: usize,
diff --git a/tabled/src/settings/padding/mod.rs b/tabled/src/settings/padding/mod.rs
index 968b55a..0d4c7db 100644
--- a/tabled/src/settings/padding/mod.rs
+++ b/tabled/src/settings/padding/mod.rs
@@ -4,7 +4,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//! use tabled::{Table, settings::{padding::Padding, style::Style, Modify, object::Cell}};
+//! use tabled::{Table, settings::{Padding, Style, Modify, object::Cell}};
 //!
 //! let table = Table::new("2022".chars())
 //!     .with(Style::modern())
@@ -37,22 +37,24 @@
 
 use crate::{
     grid::{
-        color::{AnsiColor, StaticColor},
+        color::StaticColor,
         compact::CompactConfig,
         config::{Entity, Indent, Sides},
-        spanned::config::ColoredIndent,
     },
     settings::TableOption,
 };
 
 #[cfg(feature = "std")]
-use crate::tables::table::ColoredConfig;
+use crate::{
+    grid::{color::AnsiColor, spanned::config::ColoredIndent},
+    tables::table::ColoredConfig,
+};
 
 /// Padding is responsible for a left/right/top/bottom inner indent of a particular cell.
 ///
 #[cfg_attr(feature = "std", doc = "```")]
 #[cfg_attr(not(feature = "std"), doc = "```ignore")]
-/// # use tabled::{settings::{style::Style, padding::Padding, object::Rows, Modify}, Table};
+/// # use tabled::{settings::{Style, Padding, object::Rows, Modify}, Table};
 /// # let data: Vec<&'static str> = Vec::new();
 /// let table = Table::new(&data).with(Modify::new(Rows::single(0)).with(Padding::new(0, 0, 1, 1).fill('>', '<', '^', 'V')));
 /// ```
@@ -145,6 +147,7 @@ where
     }
 }
 
+#[cfg(feature = "std")]
 fn create_padding<C: Into<AnsiColor<'static>> + Clone>(
     i: &Sides<Indent>,
     c: Option<&Sides<C>>,
diff --git a/tabled/src/settings/panel/mod.rs b/tabled/src/settings/panel/mod.rs
index 69b955c..e4e819b 100644
--- a/tabled/src/settings/panel/mod.rs
+++ b/tabled/src/settings/panel/mod.rs
@@ -6,7 +6,7 @@
 //! # Example
 //!
 //! ```
-//! use tabled::{Table, settings::panel::Panel};
+//! use tabled::{Table, settings::Panel};
 //!
 //! let data = [[1, 2, 3], [4, 5, 6]];
 //!
@@ -58,7 +58,7 @@ impl Panel {
     /// Creates an empty vertical row at given index.
     ///
     /// ```
-    /// use tabled::{settings::panel::Panel, Table};
+    /// use tabled::{settings::Panel, Table};
     ///
     /// let data = [[1, 2, 3], [4, 5, 6]];
     ///
@@ -88,7 +88,7 @@ impl Panel {
     /// Creates an empty horizontal row at given index.
     ///
     /// ```
-    /// use tabled::{Table, settings::panel::Panel};
+    /// use tabled::{Table, settings::Panel};
     ///
     /// let data = [[1, 2, 3], [4, 5, 6]];
     ///
diff --git a/tabled/src/settings/rotate/mod.rs b/tabled/src/settings/rotate/mod.rs
index dc7bd7c..7d476f2 100644
--- a/tabled/src/settings/rotate/mod.rs
+++ b/tabled/src/settings/rotate/mod.rs
@@ -6,7 +6,7 @@
 //! # Example
 //!
 //! ```
-//! use tabled::{Table, settings::rotate::Rotate};
+//! use tabled::{Table, settings::Rotate};
 //!
 //! let data = [[1, 2, 3], [4, 5, 6]];
 //!
@@ -29,6 +29,9 @@
 //! [`Table`]: crate::Table
 //! [`Builder::index`]: crate::builder::Builder::index
 
+// use core::cmp::max;
+use core::cmp::max;
+
 use crate::{
     records::{ExactRecords, Records, Resizable},
     settings::TableOption,
@@ -69,7 +72,7 @@ where
 
         match self {
             Self::Left => {
-                let size = std::cmp::max(count_rows, count_cols);
+                let size = max(count_rows, count_cols);
 
                 {
                     for _ in count_rows..size {
@@ -104,7 +107,7 @@ where
                 }
             }
             Self::Right => {
-                let size = std::cmp::max(count_rows, count_cols);
+                let size = max(count_rows, count_cols);
 
                 {
                     for _ in count_rows..size {
diff --git a/tabled/src/settings/shadow/mod.rs b/tabled/src/settings/shadow/mod.rs
index 1008757..adcdb8c 100644
--- a/tabled/src/settings/shadow/mod.rs
+++ b/tabled/src/settings/shadow/mod.rs
@@ -3,7 +3,7 @@
 //! # Example
 //!
 //! ```
-//! use tabled::{Table, settings::{shadow::Shadow, style::Style}};
+//! use tabled::{Table, settings::{Shadow, Style}};
 //!
 //! let data = vec!["Hello", "World", "!"];
 //!
@@ -38,7 +38,7 @@ use crate::{
 ///
 /// NOTICE: It uses [`Margin`] therefore it often can't be combined.
 ///
-/// [`Margin`]: crate::settings::margin::Margin
+/// [`Margin`]: crate::settings::Margin
 #[derive(Debug, Clone)]
 pub struct Shadow {
     c: char,
diff --git a/tabled/src/settings/span/mod.rs b/tabled/src/settings/span/mod.rs
index 42b5170..c23ef24 100644
--- a/tabled/src/settings/span/mod.rs
+++ b/tabled/src/settings/span/mod.rs
@@ -4,7 +4,7 @@
 //! # Example
 //!
 //! ```
-//! use tabled::{settings::{span::Span, Modify}, Table};
+//! use tabled::{settings::{Span, Modify}, Table};
 //!
 //! let data = [[1, 2, 3], [4, 5, 6]];
 //!
@@ -41,7 +41,7 @@ pub use row::RowSpan;
 ///  - size is bigger then the total number of rows.
 ///
 /// ```rust,no_run
-/// # use tabled::{Table, settings::{style::Style, span::Span, Modify, object::Columns}};
+/// # use tabled::{Table, settings::{Style, Span, Modify, object::Columns}};
 /// # let data: Vec<&'static str> = Vec::new();
 /// let table = Table::new(&data)
 ///     .with(Modify::new(Columns::single(0)).with(Span::horizontal(2)));
diff --git a/tabled/src/settings/style/border_color.rs b/tabled/src/settings/style/border_color.rs
index 3411d91..fdbc202 100644
--- a/tabled/src/settings/style/border_color.rs
+++ b/tabled/src/settings/style/border_color.rs
@@ -13,7 +13,7 @@ use crate::{
 /// BorderColored represents a colored border of a Cell.
 ///
 /// ```rust,no_run
-/// # use tabled::{settings::{style::{Style, BorderColor}, color::Color, object::Rows, Modify}, Table};
+/// # use tabled::{settings::{style::BorderColor, Style, Color, object::Rows, Modify}, Table};
 /// #
 /// # let data: Vec<&'static str> = Vec::new();
 /// #
diff --git a/tabled/src/settings/style/builder.rs b/tabled/src/settings/style/builder.rs
index b4b6314..2efc5e9 100644
--- a/tabled/src/settings/style/builder.rs
+++ b/tabled/src/settings/style/builder.rs
@@ -57,7 +57,7 @@ use super::{HorizontalLine, Line, VerticalLine};
 ///
 #[cfg_attr(feature = "std", doc = "```")]
 #[cfg_attr(not(feature = "std"), doc = "```ignore")]
-/// use tabled::{Table, settings::style::Style};
+/// use tabled::{Table, settings::Style};
 ///
 /// let style = Style::ascii()
 ///                 .bottom('*')
@@ -110,7 +110,7 @@ impl Style<(), (), (), (), (), (), (), ()> {
     /// This style can be used as a base style to build a custom one.
     ///
     /// ```rust,no_run
-    /// # use tabled::settings::style::Style;
+    /// # use tabled::settings::Style;
     /// let style = Style::empty()
     ///     .top('*')
     ///     .bottom('*')
@@ -445,7 +445,7 @@ impl<T, B, L, R, H, V, HLines, VLines> Style<T, B, L, R, H, V, HLines, VLines> {
     /// # Example
     ///
     /// ```
-    /// use tabled::{Table, settings::{style::Style, highlight::Highlight, object::Rows}};
+    /// use tabled::{Table, settings::{Style, Highlight, object::Rows}};
     ///
     /// let data = [["10:52:19", "Hello"], ["10:52:20", "World"]];
     /// let table = Table::new(data)
diff --git a/tabled/src/settings/style/mod.rs b/tabled/src/settings/style/mod.rs
index 2821e8d..e5dd5c3 100644
--- a/tabled/src/settings/style/mod.rs
+++ b/tabled/src/settings/style/mod.rs
@@ -9,7 +9,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//! use tabled::{Table, settings::style::Style};
+//! use tabled::{Table, settings::Style};
 //!
 //! let data = vec!["Hello", "2022"];
 //! let mut table = Table::new(&data);
@@ -63,7 +63,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//! use tabled::{Table, settings::{Modify, style::Style}};
+//! use tabled::{Table, settings::{Modify, Style}};
 //!
 //! let data = vec!["Hello", "2022"];
 //! let table = Table::new(&data)
@@ -116,12 +116,11 @@ mod raw_style;
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 mod span_border_correction;
 
+mod builder;
 mod horizontal_line;
 mod line;
 mod vertical_line;
 
-pub mod builder;
-
 #[cfg(feature = "std")]
 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
 pub use self::{
@@ -129,7 +128,7 @@ pub use self::{
     offset::Offset, raw_style::RawStyle, span_border_correction::BorderSpanCorrection,
 };
 
-pub use builder::Style;
+pub use builder::{HorizontalLineIter, On, Style, VerticalLineIter};
 pub use horizontal_line::HorizontalLine;
 pub use line::Line;
 pub use vertical_line::VerticalLine;
diff --git a/tabled/src/settings/style/raw_style.rs b/tabled/src/settings/style/raw_style.rs
index 404bda7..414f6f5 100644
--- a/tabled/src/settings/style/raw_style.rs
+++ b/tabled/src/settings/style/raw_style.rs
@@ -6,7 +6,7 @@ use std::collections::HashMap;
 use crate::{
     grid::{color::AnsiColor, config::Borders, spanned::config},
     records::Records,
-    settings::{color::Color, TableOption},
+    settings::{Color, TableOption},
     tables::table::ColoredConfig,
 };
 
@@ -239,7 +239,7 @@ impl RawStyle {
 
     /// Insert a horizontal line to a specific row location.
     pub fn insert_horizontal(&mut self, row: usize, line: Line) -> &mut Self {
-        self.horizontals.insert(row, line);
+        let _ = self.horizontals.insert(row, line);
         self
     }
 
@@ -281,7 +281,7 @@ impl RawStyle {
 
     /// Insert a vertical line into specific column location.
     pub fn insert_vertical(&mut self, column: usize, line: Line) -> &mut Self {
-        self.verticals.insert(column, line);
+        let _ = self.verticals.insert(column, line);
         self
     }
 
diff --git a/tabled/src/settings/style/span_border_correction.rs b/tabled/src/settings/style/span_border_correction.rs
index 1cceba3..0465358 100644
--- a/tabled/src/settings/style/span_border_correction.rs
+++ b/tabled/src/settings/style/span_border_correction.rs
@@ -26,7 +26,7 @@ use crate::{
 ///     Table,
 ///     settings::{
 ///         Modify, style::{Style, BorderSpanCorrection},
-///         format::Format, span::Span, object::Cell
+///         Format, Span, object::Cell
 ///     }
 /// };
 ///
@@ -70,7 +70,7 @@ use crate::{
 ///
 /// [`Table`]: crate::Table
 /// [`Span`]: crate::settings::span::Span
-/// [`Style`]: crate::settings::style::Style
+/// [`Style`]: crate::settings::Style
 /// [`Style::correct_spans`]: crate::settings::style::BorderSpanCorrection
 #[derive(Debug)]
 pub struct BorderSpanCorrection;
diff --git a/tabled/src/settings/width/justify.rs b/tabled/src/settings/width/justify.rs
index e5223dd..145784e 100644
--- a/tabled/src/settings/width/justify.rs
+++ b/tabled/src/settings/width/justify.rs
@@ -4,8 +4,7 @@ use crate::{
     records::{ExactRecords, Records, RecordsMut},
     settings::{
         measurement::{Max, Measurement, Min},
-        width::Width,
-        CellOption, TableOption,
+        CellOption, TableOption, Width,
     },
     tables::table::ColoredConfig,
 };
@@ -18,20 +17,20 @@ use crate::{
 /// ## Examples
 ///
 /// ```
-/// use tabled::{Table, settings::{width::Justify, style::Style, object::Segment, padding::Padding, Modify}};
+/// use tabled::{Table, settings::{Width, Style, object::Segment, Padding, Modify}};
 ///
 /// let data = ["Hello", "World", "!"];
 ///
 /// let table = Table::new(&data)
 ///     .with(Style::markdown())
 ///     .with(Modify::new(Segment::all()).with(Padding::zero()))
-///     .with(Justify::new(3));
+///     .with(Width::justify(3));
 /// ```
 ///
 /// [`Max`] usage to justify by a max column width.
 ///
 /// ```
-/// use tabled::{Table, settings::{width::Justify, style::Style}};
+/// use tabled::{Table, settings::{width::Justify, Style}};
 ///
 /// let data = ["Hello", "World", "!"];
 ///
@@ -40,7 +39,7 @@ use crate::{
 ///     .with(Justify::max());
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
+/// [`Padding`]: crate::settings::Padding
 #[derive(Debug)]
 pub struct Justify<W> {
     width: W,
@@ -54,7 +53,7 @@ where
     ///
     /// Be aware that [`Padding`] is not considered when comparing the width.
     ///
-    /// [`Padding`]: crate::settings::padding::Padding
+    /// [`Padding`]: crate::settings::Padding
     pub fn new(width: W) -> Self {
         Self { width }
     }
diff --git a/tabled/src/settings/width/min_width.rs b/tabled/src/settings/width/min_width.rs
index 42c6850..7b16f37 100644
--- a/tabled/src/settings/width/min_width.rs
+++ b/tabled/src/settings/width/min_width.rs
@@ -11,8 +11,7 @@ use crate::{
     settings::{
         measurement::Measurement,
         peaker::{Peaker, PriorityNone},
-        width::Width,
-        CellOption, TableOption,
+        CellOption, TableOption, Width,
     },
     tables::table::{ColoredConfig, TableDimension},
 };
@@ -37,7 +36,7 @@ use super::util::get_table_widths_with_total;
 /// Cell change
 ///
 /// ```
-/// use tabled::{Table, settings::{object::Segment, width::Width, style::Style, Modify}};
+/// use tabled::{Table, settings::{object::Segment, Width, Style, Modify}};
 ///
 /// let data = ["Hello", "World", "!"];
 ///
@@ -48,12 +47,12 @@ use super::util::get_table_widths_with_total;
 /// Table change
 ///
 /// ```
-/// use tabled::{Table, settings::width::Width};
+/// use tabled::{Table, settings::Width};
 ///
 /// let table = Table::new(&["Hello World!"]).with(Width::increase(5));
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
+/// [`Padding`]: crate::settings::Padding
 #[derive(Debug)]
 pub struct MinWidth<W = usize, P = PriorityNone> {
     width: W,
@@ -152,7 +151,7 @@ where
         }
 
         let widths = get_increase_list(widths, nessary_width, total_width, P::create());
-        dims.set_widths(widths);
+        let _ = dims.set_widths(widths);
     }
 }
 
diff --git a/tabled/src/settings/width/mod.rs b/tabled/src/settings/width/mod.rs
index 80389e3..c1202f7 100644
--- a/tabled/src/settings/width/mod.rs
+++ b/tabled/src/settings/width/mod.rs
@@ -9,7 +9,7 @@
 //! ## Example
 //!
 //! ```
-//! use tabled::{Table, settings::width::Width};
+//! use tabled::{Table, settings::Width};
 //!
 //! let table = Table::new(&["Hello World!"])
 //!     .with(Width::wrap(7))
@@ -71,7 +71,7 @@ pub use self::{
 /// ### Cell change
 ///
 /// ```
-/// use tabled::{Table, settings::{object::Segment, width::Width, style::Style, Modify}};
+/// use tabled::{Table, settings::{object::Segment, Width, Style, Modify}};
 ///
 /// let data = ["Hello", "World", "!"];
 ///
@@ -83,7 +83,7 @@ pub use self::{
 /// ### Table change
 ///
 /// ```
-/// use tabled::{Table, settings::width::Width};
+/// use tabled::{Table, settings::Width};
 ///
 /// let table = Table::new(&["Hello World!"]).with(Width::wrap(5));
 /// ```
@@ -91,14 +91,14 @@ pub use self::{
 /// ### Total width
 ///
 /// ```
-/// use tabled::{Table, settings::width::Width};
+/// use tabled::{Table, settings::Width};
 ///
 /// let table = Table::new(&["Hello World!"])
 ///     .with(Width::wrap(5))
 ///     .with(Width::increase(5));
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
+/// [`Padding`]: crate::settings::Padding
 /// [`Table`]: crate::Table
 #[derive(Debug)]
 pub struct Width;
@@ -133,7 +133,7 @@ impl Width {
     /// # Example
     ///
     /// ```
-    /// use tabled::{Table, settings::width::Width};
+    /// use tabled::{Table, settings::Width};
     ///
     /// let data = vec![
     ///     ("Some\ndata", "here", "and here"),
diff --git a/tabled/src/settings/width/truncate.rs b/tabled/src/settings/width/truncate.rs
index 2491938..6959008 100644
--- a/tabled/src/settings/width/truncate.rs
+++ b/tabled/src/settings/width/truncate.rs
@@ -13,8 +13,7 @@ use crate::{
     settings::{
         measurement::Measurement,
         peaker::{Peaker, PriorityNone},
-        width::Width,
-        CellOption, TableOption,
+        CellOption, TableOption, Width,
     },
     tables::table::{ColoredConfig, TableDimension},
 };
@@ -32,13 +31,13 @@ use super::util::{cut_str, get_table_widths, get_table_widths_with_total};
 /// ## Example
 ///
 /// ```
-/// use tabled::{Table, settings::{object::Segment, width::Width, Modify}};
+/// use tabled::{Table, settings::{object::Segment, Width, Modify}};
 ///
 /// let table = Table::new(&["Hello World!"])
 ///     .with(Modify::new(Segment::all()).with(Width::truncate(3)));
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
+/// [`Padding`]: crate::settings::Padding
 #[derive(Debug)]
 pub struct Truncate<'a, W = usize, P = PriorityNone> {
     width: W,
@@ -274,7 +273,7 @@ where
 
         let widths = truncate_total_width(records, cfg, widths, total, width, P::create(), suffix);
 
-        dims.set_widths(widths);
+        let _ = dims.set_widths(widths);
     }
 }
 
diff --git a/tabled/src/settings/width/width_list.rs b/tabled/src/settings/width/width_list.rs
index 5cac438..c9dd2f9 100644
--- a/tabled/src/settings/width/width_list.rs
+++ b/tabled/src/settings/width/width_list.rs
@@ -38,6 +38,6 @@ where
             return;
         }
 
-        dimension.set_widths(self.list.clone());
+        let _ = dimension.set_widths(self.list.clone());
     }
 }
diff --git a/tabled/src/settings/width/wrap.rs b/tabled/src/settings/width/wrap.rs
index 70ffce0..40bdc18 100644
--- a/tabled/src/settings/width/wrap.rs
+++ b/tabled/src/settings/width/wrap.rs
@@ -37,7 +37,7 @@ use super::util::{get_table_widths, get_table_widths_with_total, split_at_pos};
 ///     .with(Modify::new(Segment::all()).with(Width::wrap(3)));
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
+/// [`Padding`]: crate::settings::Padding
 #[derive(Debug, Clone)]
 pub struct Wrap<W = usize, P = PriorityNone> {
     width: W,
@@ -69,7 +69,7 @@ impl<W, P> Wrap<W, P> {
     /// Be aware that it doesn't consider padding.
     /// So if you want to set a exact width you might need to use [`Padding`] to set it to 0.
     ///
-    /// [`Padding`]: crate::settings::padding::Padding
+    /// [`Padding`]: crate::settings::Padding
     /// [`PriorityMax`]: crate::settings::peaker::PriorityMax
     /// [`PriorityMin`]: crate::settings::peaker::PriorityMin
     pub fn priority<PP>(self) -> Wrap<W, PP> {
@@ -117,7 +117,7 @@ where
         let keep_words = self.keep_words;
         let widths = wrap_total_width(records, cfg, widths, total, width, keep_words, priority);
 
-        dims.set_widths(widths);
+        let _ = dims.set_widths(widths);
     }
 }
 
diff --git a/tabled/src/tables/compact/mod.rs b/tabled/src/tables/compact/mod.rs
index 06868dc..c552ce5 100644
--- a/tabled/src/tables/compact/mod.rs
+++ b/tabled/src/tables/compact/mod.rs
@@ -8,7 +8,7 @@
 //! It works smoothly with arrays.
 //!
 //! ```
-//!use tabled::{settings::style::Style, tables::compact::CompactTable};
+//!use tabled::{settings::Style, tables::compact::CompactTable};
 //!
 //! let data = [
 //!     ["FreeBSD", "1993", "William and Lynne Jolitz", "?"],
@@ -35,7 +35,7 @@
 //!
 #![cfg_attr(feature = "std", doc = "```")]
 #![cfg_attr(not(feature = "std"), doc = "```ignore")]
-//!use tabled::{settings::style::Style, tables::compact::CompactTable};
+//!use tabled::{settings::Style, tables::compact::CompactTable};
 //!
 //! let data = [
 //!     ["FreeBSD", "1993", "William and Lynne Jolitz", "?"],
@@ -81,7 +81,7 @@ use crate::{
         into_records::{LimitColumns, LimitRows},
         IntoRecords, IterRecords,
     },
-    settings::{style::Style, TableOption},
+    settings::{Style, TableOption},
 };
 
 use self::dimension::{ConstSize, ConstantDimension};
@@ -204,10 +204,26 @@ impl<I, D> CompactTable<I, D> {
         )
     }
 
+    /// Format table into [`io::Write`]r.
+    #[cfg(feature = "std")]
+    #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
+    pub fn build<W>(self, writer: W) -> std::io::Result<()>
+    where
+        I: IntoRecords,
+        D: Dimension,
+        W: std::io::Write,
+    {
+        let writer = crate::tables::iter::utf8_writer::UTF8Writer::new(writer);
+        self.fmt(writer)
+            .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))
+    }
+
     /// Build a string.
     ///
     /// We can't implement [`std::string::ToString`] cause it does takes `&self` reference.
     #[allow(clippy::inherent_to_string)]
+    #[cfg(feature = "std")]
+    #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
     pub fn to_string(self) -> String
     where
         I: IntoRecords,
@@ -217,19 +233,6 @@ impl<I, D> CompactTable<I, D> {
         self.fmt(&mut buf).unwrap();
         buf
     }
-
-    /// Format table into [`io::Write`]r.
-    #[cfg(feature = "std")]
-    pub fn build<W>(self, writer: W) -> std::io::Result<()>
-    where
-        I: IntoRecords,
-        D: Dimension,
-        W: std::io::Write,
-    {
-        let writer = crate::tables::iter::utf8_writer::UTF8Writer::new(writer);
-        self.fmt(writer)
-            .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))
-    }
 }
 
 impl CompactTable<(), ()> {
diff --git a/tabled/src/tables/iter/mod.rs b/tabled/src/tables/iter/mod.rs
index 2c0fc10..956e691 100644
--- a/tabled/src/tables/iter/mod.rs
+++ b/tabled/src/tables/iter/mod.rs
@@ -45,7 +45,7 @@ use crate::{
         },
         IntoRecords, IterRecords,
     },
-    settings::{style::Style, TableOption},
+    settings::{Style, TableOption},
 };
 
 use self::dimension::ExactList;
diff --git a/tabled/src/tables/table/mod.rs b/tabled/src/tables/table/mod.rs
index 6c5981e..dccd737 100644
--- a/tabled/src/tables/table/mod.rs
+++ b/tabled/src/tables/table/mod.rs
@@ -18,7 +18,7 @@ use crate::{
         },
     },
     records::{ExactRecords, Records, VecRecords},
-    settings::{style::Style, TableOption},
+    settings::{Style, TableOption},
     Tabled,
 };
 
@@ -45,7 +45,7 @@ pub use dimension::TableDimension;
 /// ### With settings
 ///
 /// ```rust,no_run
-/// use tabled::{Table, settings::{style::Style, alignment::Alignment}};
+/// use tabled::{Table, settings::{Style, Alignment}};
 ///
 /// let data = vec!["Hello", "2021"];
 /// let mut table = Table::new(&data);
@@ -54,9 +54,9 @@ pub use dimension::TableDimension;
 /// println!("{}", table);
 /// ```
 ///
-/// [`Padding`]: crate::settings::padding::Padding
-/// [`Style`]: crate::settings::style::Style
-/// [`Style::ascii`]: crate::settings::style::Style::ascii
+/// [`Padding`]: crate::settings::Padding
+/// [`Style`]: crate::settings::Style
+/// [`Style::ascii`]: crate::settings::Style::ascii
 #[derive(Debug, Clone)]
 pub struct Table {
     records: VecRecords<String>,
@@ -107,7 +107,7 @@ impl Table {
     #[cfg_attr(not(feature = "derive"), doc = "```ignore")]
     /// use tabled::{
     ///     Table, Tabled,
-    ///     settings::{object::Segment, Modify, alignment::Alignment}
+    ///     settings::{object::Segment, Modify, Alignment}
     /// };
     ///
     /// #[derive(Tabled)]
@@ -399,7 +399,7 @@ impl ColoredConfig {
     /// The outcome is the same as if you'd use [`Format`] and added a color but it'd work only with `color` feature on.
     /// While this method works in all contexts.
     pub fn set_color(&mut self, pos: Position, color: AnsiColor<'static>) -> &mut Self {
-        self.colors.insert(pos, color);
+        let _ = self.colors.insert(pos, color);
         self
     }
 }


Test patch:
diff --git a/json_to_table/tests/test_config.rs b/json_to_table/tests/test_config.rs
index 518bafc..b745f5b 100644
--- a/json_to_table/tests/test_config.rs
+++ b/json_to_table/tests/test_config.rs
@@ -1,7 +1,7 @@
 use json_to_table::json_to_table;
 use serde_json::json;
 use tabled::{
-    settings::{alignment::Alignment, padding::Padding, style::Style},
+    settings::{Alignment, Padding, Style},
     Table,
 };
 
diff --git a/json_to_table/tests/test_orientation_modes.rs b/json_to_table/tests/test_orientation_modes.rs
index 4d58aa1..14ed9cc 100644
--- a/json_to_table/tests/test_orientation_modes.rs
+++ b/json_to_table/tests/test_orientation_modes.rs
@@ -1,6 +1,6 @@
 use json_to_table::{json_to_table, Orientation};
 use serde_json::json;
-use tabled::{settings::style::Style, Table};
+use tabled::{settings::Style, Table};
 
 #[test]
 fn orientation_test_1() {
diff --git a/json_to_table/tests/test_table.rs b/json_to_table/tests/test_table.rs
index 4c4d4df..24a1f7e 100644
--- a/json_to_table/tests/test_table.rs
+++ b/json_to_table/tests/test_table.rs
@@ -1,6 +1,6 @@
 use json_to_table::json_to_table;
 use serde_json::json;
-use tabled::settings::style::Style;
+use tabled::settings::Style;
 
 #[test]
 fn general_json_1_test() {
diff --git a/json_to_table/tests/test_types.rs b/json_to_table/tests/test_types.rs
index 32e9ae0..d373580 100644
--- a/json_to_table/tests/test_types.rs
+++ b/json_to_table/tests/test_types.rs
@@ -1,6 +1,6 @@
 use json_to_table::json_to_table;
 use serde_json::json;
-use tabled::settings::style::Style;
+use tabled::settings::Style;
 
 #[test]
 fn string_test() {
diff --git a/tabled/tests/alignment_test.rs b/tabled/tests/alignment_test.rs
index acf8e70..abe53a5 100644
--- a/tabled/tests/alignment_test.rs
+++ b/tabled/tests/alignment_test.rs
@@ -1,12 +1,9 @@
 #![cfg(feature = "std")]
 
 use tabled::settings::{
-    alignment::Alignment,
     locator::ByColumnName,
     object::{Columns, Rows, Segment},
-    padding::Padding,
-    style::Style,
-    Modify,
+    Alignment, Modify, Padding, Style,
 };
 
 use crate::util::{create_table, init_table, test_table};
diff --git a/tabled/tests/col_row_test.rs b/tabled/tests/col_row_test.rs
index 68ea05b..519beab 100644
--- a/tabled/tests/col_row_test.rs
+++ b/tabled/tests/col_row_test.rs
@@ -3,7 +3,7 @@
 
 use tabled::{
     col, row,
-    settings::{alignment::Alignment, format::Format, object::Segment, padding::Padding, Modify},
+    settings::{format::Format, object::Segment, Alignment, Modify, Padding},
 };
 
 use crate::util::{create_table, test_table};
diff --git a/tabled/tests/concat_test.rs b/tabled/tests/concat_test.rs
index fffd2a8..aa6d654 100644
--- a/tabled/tests/concat_test.rs
+++ b/tabled/tests/concat_test.rs
@@ -1,6 +1,6 @@
 #![cfg(feature = "std")]
 
-use tabled::settings::{concat::Concat, style::Style};
+use tabled::settings::{Concat, Style};
 
 use crate::util::{create_table, init_table, test_table};
 
diff --git a/tabled/tests/disable_test.rs b/tabled/tests/disable_test.rs
index 2278e5e..8eb5df9 100644
--- a/tabled/tests/disable_test.rs
+++ b/tabled/tests/disable_test.rs
@@ -1,12 +1,10 @@
 #![cfg(feature = "std")]
 
 use tabled::settings::{
-    alignment::Alignment,
-    disable::Disable,
     locator::ByColumnName,
     object::{Columns, Rows, Segment},
     style::{HorizontalLine, Style},
-    Modify,
+    Alignment, Disable, Modify,
 };
 
 use crate::util::{create_table, test_table};
diff --git a/tabled/tests/extract_test.rs b/tabled/tests/extract_test.rs
index ff0fb36..320854c 100644
--- a/tabled/tests/extract_test.rs
+++ b/tabled/tests/extract_test.rs
@@ -3,13 +3,8 @@
 use tabled::{
     builder::Builder,
     settings::{
-        alignment::Alignment,
-        disable::Disable,
-        extract::Extract,
-        format::Format,
         object::{Rows, Segment},
-        padding::Padding,
-        Modify,
+        Alignment, Disable, Extract, Format, Modify, Padding,
     },
 };
 
diff --git a/tabled/tests/format_test.rs b/tabled/tests/format_test.rs
index 439ec8d..bea4858 100644
--- a/tabled/tests/format_test.rs
+++ b/tabled/tests/format_test.rs
@@ -1,12 +1,8 @@
 #![cfg(feature = "std")]
 
 use tabled::settings::{
-    alignment::Alignment,
-    format::Format,
     object::{Cell, Columns, Object, Rows, Segment},
-    padding::Padding,
-    style::Style,
-    Modify,
+    Alignment, Format, Modify, Padding, Style,
 };
 
 use crate::util::{create_table, init_table, test_table};
diff --git a/tabled/tests/height_test.rs b/tabled/tests/height_test.rs
index 71f3c54..0bcd409 100644
--- a/tabled/tests/height_test.rs
+++ b/tabled/tests/height_test.rs
@@ -6,12 +6,8 @@ mod util;
 use owo_colors::OwoColorize;
 
 use tabled::settings::{
-    alignment::Alignment,
-    format::Format,
-    height::Height,
     object::{Columns, Segment},
-    style::Style,
-    Modify,
+    Alignment, Format, Height, Modify, Style,
 };
 
 use util::{create_table, test_table};
diff --git a/tabled/tests/margin_test.rs b/tabled/tests/margin_test.rs
index 83a8e5a..f1ee106 100644
--- a/tabled/tests/margin_test.rs
+++ b/tabled/tests/margin_test.rs
@@ -1,14 +1,6 @@
 #![cfg(feature = "std")]
 
-use tabled::settings::{
-    highlight::Highlight,
-    margin::Margin,
-    object::Cell,
-    span::ColumnSpan,
-    style::{Border, Style},
-    width::Width,
-    Modify,
-};
+use tabled::settings::{object::Cell, Border, Highlight, Margin, Modify, Span, Style, Width};
 
 use crate::util::{create_table, init_table, is_lines_equal, static_table, test_table};
 
@@ -39,7 +31,7 @@ test_table!(
     margin_without_table_based_on_grid_borders,
     init_table::<3, 3, _, _>([((2, 2), "https://\nwww\n.\nredhat\n.com\n/en")])
         .with(Style::psql())
-        .with(Modify::new(Cell::new(3, 2)).with(ColumnSpan::new(2)))
+        .with(Modify::new(Cell::new(3, 2)).with(Span::horizontal(2)))
         .with(Margin::new(1, 1, 1, 1).fill('>', '<', 'V', '^')),
     "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
     "> N | column 0 | column 1 | column 2 <"
@@ -59,7 +51,7 @@ test_table!(
     table_with_empty_margin,
     init_table::<3, 3, _, _>([((2, 2), "https://\nwww\n.\nredhat\n.com\n/en")])
         .with(Style::psql())
-        .with(Modify::new(Cell::new(3, 2)).with(ColumnSpan::new(2)))
+        .with(Modify::new(Cell::new(3, 2)).with(Span::horizontal(2)))
         .with(Margin::new(0, 0, 0, 0).fill('>', '<', 'V', '^')),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
@@ -77,7 +69,7 @@ test_table!(
 fn table_with_margin_and_min_width() {
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new(Cell::new(1, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new(Cell::new(1, 1)).with(Span::horizontal(2)))
         .with(Margin::new(1, 1, 1, 1).fill('>', '<', 'V', '^'))
         .with(Width::truncate(20))
         .to_string();
@@ -101,7 +93,7 @@ fn table_with_margin_and_min_width() {
 fn table_with_margin_and_max_width() {
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new(Cell::new(1, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new(Cell::new(1, 1)).with(Span::horizontal(2)))
         .with(Margin::new(1, 1, 1, 1).fill('>', '<', 'V', '^'))
         .with(Width::increase(50))
         .to_string();
@@ -125,14 +117,14 @@ fn table_with_margin_and_max_width() {
 #[ignore = "It's not yet clear what to do with such spans"]
 fn table_0_spanned_with_width() {
     let table = create_table::<0, 0>()
-        .with(Modify::new(Cell::new(0, 0)).with(ColumnSpan::new(0)))
+        .with(Modify::new(Cell::new(0, 0)).with(Span::horizontal(0)))
         .with(Width::increase(50))
         .to_string();
 
     assert_eq!(table, "++\n|\n++\n");
 
     let table = create_table::<0, 0>()
-        .with(Modify::new(Cell::new(0, 0)).with(ColumnSpan::new(0)))
+        .with(Modify::new(Cell::new(0, 0)).with(Span::horizontal(0)))
         .with(Width::truncate(50))
         .to_string();
 
@@ -141,7 +133,7 @@ fn table_0_spanned_with_width() {
 
 #[test]
 fn margin_color_test_not_colored_feature() {
-    use tabled::settings::color::Color;
+    use tabled::settings::Color;
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
@@ -174,7 +166,7 @@ fn margin_color_test_not_colored_feature() {
 fn margin_color_test() {
     use owo_colors::OwoColorize;
     use std::convert::TryFrom;
-    use tabled::settings::color::Color;
+    use tabled::settings::Color;
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
diff --git a/tabled/tests/padding_test.rs b/tabled/tests/padding_test.rs
index 430f1e6..3774b02 100644
--- a/tabled/tests/padding_test.rs
+++ b/tabled/tests/padding_test.rs
@@ -1,11 +1,8 @@
 #![cfg(feature = "std")]
 
 use tabled::settings::{
-    alignment::Alignment,
     object::{Rows, Segment},
-    padding::Padding,
-    style::Style,
-    Modify,
+    Alignment, Modify, Padding, Style,
 };
 
 use crate::util::{create_table, test_table};
@@ -106,7 +103,7 @@ test_table!(
     {
         use std::convert::TryFrom;
         use owo_colors::OwoColorize;
-        use tabled::settings::{color::Color};
+        use tabled::settings::Color;
 
         let padding = Padding::new(2, 2, 2, 2).colorize(
             Color::try_from(' '.on_yellow().to_string()).unwrap(),
diff --git a/tabled/tests/panel_test.rs b/tabled/tests/panel_test.rs
index ab41a47..98d8785 100644
--- a/tabled/tests/panel_test.rs
+++ b/tabled/tests/panel_test.rs
@@ -1,15 +1,9 @@
 #![cfg(feature = "std")]
 
 use tabled::settings::{
-    alignment::Alignment,
-    highlight::Highlight,
     object::{Cell, Object, Rows, Segment},
-    panel::Panel,
-    span::Span,
-    style::{Border, Style},
     style::{BorderSpanCorrection, HorizontalLine},
-    width::Width,
-    Modify,
+    Alignment, Border, Highlight, Modify, Panel, Span, Style, Width,
 };
 
 use crate::util::{create_table, new_table, test_table};
diff --git a/tabled/tests/qc/tests/builder.rs b/tabled/tests/qc/tests/builder.rs
index eae2686..6f1822b 100644
--- a/tabled/tests/qc/tests/builder.rs
+++ b/tabled/tests/qc/tests/builder.rs
@@ -3,7 +3,7 @@ use quickcheck_macros::quickcheck;
 use tabled::{
     builder::Builder,
     grid::util::string::{string_width, string_width_multiline},
-    settings::style::Style,
+    settings::Style,
     Table,
 };
 
diff --git a/tabled/tests/qc/tests/span.rs b/tabled/tests/qc/tests/span.rs
index 341074b..a9f5970 100644
--- a/tabled/tests/qc/tests/span.rs
+++ b/tabled/tests/qc/tests/span.rs
@@ -4,7 +4,7 @@ use quickcheck_macros::quickcheck;
 use tabled::{
     builder::Builder,
     grid::util::string::{string_width, string_width_multiline},
-    settings::{span::Span, style::Style, Modify},
+    settings::{Modify, Span, Style},
     Table,
 };
 
diff --git a/tabled/tests/render_settings.rs b/tabled/tests/render_settings.rs
index adde162..c98e916 100644
--- a/tabled/tests/render_settings.rs
+++ b/tabled/tests/render_settings.rs
@@ -1,12 +1,9 @@
 #![cfg(feature = "std")]
 
 use tabled::settings::{
-    alignment::Alignment,
     formatting::{AlignmentStrategy, TabSize, TrimStrategy},
     object::Segment,
-    span::ColumnSpan,
-    style::Style,
-    Modify,
+    Alignment, Modify, Span, Style,
 };
 
 use crate::util::{create_vector, new_table, test_table};
@@ -153,9 +150,9 @@ test_table!(
     new_table(tab_data2())
         .with(TabSize::new(4))
         .with(Style::psql())
-        .with(Modify::new((0, 0)).with(ColumnSpan::new(3)))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2)))
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2))),
+        .with(Modify::new((0, 0)).with(Span::horizontal(3)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(2)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(2))),
     "                     N                     | column 2 "
     "----------------------+-----+--------------+----------"
     "     H        ello    World |     0-1      |   0-2    "
diff --git a/tabled/tests/rotate_test.rs b/tabled/tests/rotate_test.rs
index 57ef2ab..0ba0fc4 100644
--- a/tabled/tests/rotate_test.rs
+++ b/tabled/tests/rotate_test.rs
@@ -3,10 +3,8 @@
 // todo: add method for SPACING between cells.
 
 use tabled::settings::{
-    highlight::Highlight,
     object::{Cell, Rows},
-    rotate::Rotate,
-    style::Border,
+    Border, Highlight, Rotate,
 };
 
 use crate::util::{new_table, test_table};
diff --git a/tabled/tests/shadow_test.rs b/tabled/tests/shadow_test.rs
index 7a9f572..7882782 100644
--- a/tabled/tests/shadow_test.rs
+++ b/tabled/tests/shadow_test.rs
@@ -1,15 +1,14 @@
 #![cfg(feature = "std")]
 
-use tabled::settings::{shadow::Shadow, style::Style};
-
 use crate::util::{new_table, test_table};
+use tabled::settings::{Shadow, Style};
 
 #[cfg(feature = "color")]
 use owo_colors::OwoColorize;
 #[cfg(feature = "color")]
 use std::convert::TryFrom;
 #[cfg(feature = "color")]
-use tabled::settings::color::Color;
+use tabled::settings::Color;
 
 mod util;
 
diff --git a/tabled/tests/span_test.rs b/tabled/tests/span_test.rs
index dc5af92..cef8f59 100644
--- a/tabled/tests/span_test.rs
+++ b/tabled/tests/span_test.rs
@@ -3,14 +3,9 @@
 
 use tabled::{
     settings::{
-        alignment::Alignment,
-        highlight::Highlight,
         object::{Columns, Segment},
-        padding::Padding,
-        panel::Panel,
-        span::{ColumnSpan, RowSpan},
         style::{Border, BorderSpanCorrection, Style},
-        Modify,
+        Alignment, Highlight, Modify, Padding, Panel, Span,
     },
     Table,
 };
@@ -24,7 +19,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new(Columns::single(0)).with(ColumnSpan::new(2))),
+        .with(Modify::new(Columns::single(0)).with(Span::horizontal(2))),
     " N | column 1 | column 2 "
     "-+-+----------+----------"
     " 0 | 0-1      | 0-2      "
@@ -37,7 +32,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new(Columns::new(1..2)).with(ColumnSpan::new(2))),
+        .with(Modify::new(Columns::new(1..2)).with(Span::horizontal(2))),
     " N | column 0 | column 2 "
     "---+-----+----+----------"
     " 0 | 0-0      | 0-2      "
@@ -50,7 +45,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new(Columns::single(0)).with(ColumnSpan::new(4))),
+        .with(Modify::new(Columns::single(0)).with(Span::horizontal(4))),
     " N "
     "+++"
     " 0 "
@@ -63,7 +58,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((0, 0)).with(ColumnSpan::new(2))),
+        .with(Modify::new((0, 0)).with(Span::horizontal(2))),
     " N       | column 1 | column 2 "
     "---+-----+----------+----------"
     " 0 | 0-0 | 0-1      | 0-2      "
@@ -76,7 +71,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2))),
+        .with(Modify::new((1, 0)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0            | 0-1      | 0-2      "
@@ -88,7 +83,7 @@ test_table!(
     cell_span_test_2,
     create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2))),
+        .with(Modify::new((2, 0)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 |   0-0    |   0-1    |   0-2    "
@@ -101,7 +96,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((3, 0)).with(ColumnSpan::new(2))),
+        .with(Modify::new((3, 0)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 | 0-0      | 0-1      | 0-2      "
@@ -114,7 +109,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((0, 1)).with(ColumnSpan::new(2))),
+        .with(Modify::new((0, 1)).with(Span::horizontal(2))),
     " N | column 0  | column 2 "
     "---+-----+-----+----------"
     " 0 | 0-0 | 0-1 | 0-2      "
@@ -127,7 +122,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((1, 1)).with(ColumnSpan::new(2))),
+        .with(Modify::new((1, 1)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 | 0-0                 | 0-2      "
@@ -140,7 +135,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2))),
+        .with(Modify::new((2, 1)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 | 0-0      | 0-1      | 0-2      "
@@ -153,7 +148,7 @@ test_table!(
     create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((3, 1)).with(ColumnSpan::new(2))),
+        .with(Modify::new((3, 1)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 | 0-0      | 0-1      | 0-2      "
@@ -165,7 +160,7 @@ test_table!(
     cell_span_test_8,
     create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 2)).with(ColumnSpan::new(2))),
+        .with(Modify::new((0, 2)).with(Span::horizontal(2))),
     " N | column 0 | column 1  "
     "---+----------+-----+-----"
     " 0 |   0-0    | 0-1 | 0-2 "
@@ -177,7 +172,7 @@ test_table!(
     cell_span_test_9,
     create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((1, 2)).with(ColumnSpan::new(2))),
+        .with(Modify::new((1, 2)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 |   0-0    |         0-1         "
@@ -189,7 +184,7 @@ test_table!(
     cell_span_test_10,
     create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((2, 2)).with(ColumnSpan::new(2))),
+        .with(Modify::new((2, 2)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 |   0-0    |   0-1    |   0-2    "
@@ -201,7 +196,7 @@ test_table!(
     cell_span_test_11,
     create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((3, 2)).with(ColumnSpan::new(2))),
+        .with(Modify::new((3, 2)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 |   0-0    |   0-1    |   0-2    "
@@ -213,7 +208,7 @@ test_table!(
     span_multiline,
     init_table::<3, 3, _, _>([((2, 2), "https://\nwww\n.\nredhat\n.com\n/en")])
         .with(Style::psql())
-        .with(Modify::new((3, 2)).with(ColumnSpan::new(2))),
+        .with(Modify::new((3, 2)).with(Span::horizontal(2))),
     " N | column 0 | column 1 | column 2 "
     "---+----------+----------+----------"
     " 0 |   0-0    |   0-1    |   0-2    "
@@ -232,8 +227,8 @@ test_table!(
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Padding::new(3, 0, 0, 0)))
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((1, 1)).with(ColumnSpan::new(3)))
-        .with(Modify::new((3, 1)).with(ColumnSpan::new(3))),
+        .with(Modify::new((1, 1)).with(Span::horizontal(3)))
+        .with(Modify::new((3, 1)).with(Span::horizontal(3))),
     "   N|   column 0|   column 1|   column 2"
     "----+-----------+-----------+-----------"
     "   0|   0-0                             "
@@ -247,37 +242,37 @@ test_table!(
         .with(Style::modern())
         .with(
             Modify::new((0, 0))
-                .with(ColumnSpan::new(5))
+                .with(Span::horizontal(5))
                 .with("span all 5 columns"),
         )
         .with(
             Modify::new((1, 0))
-                .with(ColumnSpan::new(4))
+                .with(Span::horizontal(4))
                 .with("span 4 columns"),
         )
         .with(
             Modify::new((2, 0))
-                .with(ColumnSpan::new(3))
+                .with(Span::horizontal(3))
                 .with("span 3 columns"),
         )
         .with(
             Modify::new((2, 3))
-                .with(ColumnSpan::new(2))
+                .with(Span::horizontal(2))
                 .with("span 2 columns"),
         )
         .with(
             Modify::new((3, 0))
-                .with(ColumnSpan::new(2))
+                .with(Span::horizontal(2))
                 .with("span 3 columns"),
         )
         .with(
             Modify::new((3, 2))
-                .with(ColumnSpan::new(3))
+                .with(Span::horizontal(3))
                 .with("span 3 columns"),
         )
         .with(
             Modify::new((4, 1))
-                .with(ColumnSpan::new(4))
+                .with(Span::horizontal(4))
                 .with("span 4 columns"),
         ),
     "┌───────────────┬───────────────┬───────────────┬───────────────┬───────────────┐"
@@ -299,7 +294,7 @@ test_table!(
     span_with_panel_test_0,
     new_table([[1, 2, 3]])
         .with(Panel::horizontal(0,"Tabled Releases"))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(2)))
         .with(Style::ascii()),
     "+-----+-----+-----+"
     "| Tabled Releases |"
@@ -314,7 +309,7 @@ test_table!(
     span_with_panel_test_1,
     new_table([[1, 2, 3], [4, 5, 6]])
         .with(Panel::horizontal(0,"Tabled Releases"))
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
         .with(Style::ascii()),
     "+-----+-----+-----+"
     "| Tabled Releases |"
@@ -331,8 +326,8 @@ test_table!(
     span_with_panel_test_2,
     new_table([[1, 2, 3], [4, 5, 6]])
         .with(Panel::horizontal(0,"Tabled Releases"))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2)))
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(2)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
         .with(Style::ascii()),
     "+-----+-----+-----+"
     "| Tabled Releases |"
@@ -349,7 +344,7 @@ test_table!(
     span_with_panel_with_correction_test_0,
     new_table([[1, 2, 3]])
         .with(Panel::horizontal(0,"Tabled Releases"))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(2)))
         .with(Style::ascii())
         .with(BorderSpanCorrection),
     "+-----------------+"
@@ -365,7 +360,7 @@ test_table!(
     span_with_panel_with_correction_test_1,
     new_table([[1, 2, 3], [4, 5, 6]])
         .with(Panel::horizontal(0,"Tabled Releases"))
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
         .with(Style::ascii())
         .with(BorderSpanCorrection),
     "+-----------------+"
@@ -383,8 +378,8 @@ test_table!(
     span_with_panel_with_correction_test_2,
     new_table([[1, 2, 3], [4, 5, 6]])
         .with(Panel::horizontal(0,"Tabled Releases"))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2)))
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(2)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
         .with(Style::ascii())
         .with(BorderSpanCorrection),
     "+-----------------+"
@@ -405,7 +400,7 @@ fn span_column_exceeds_boundaries_test() {
     // todo: determine if it's the right behaiviour
 
     create_table::<3, 3>()
-        .with(Modify::new(Columns::single(0)).with(ColumnSpan::new(100)))
+        .with(Modify::new(Columns::single(0)).with(Span::horizontal(100)))
         .to_string();
 }
 
@@ -419,7 +414,7 @@ fn span_cell_exceeds_boundaries_test() {
     let table = create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((0, 0)).with(ColumnSpan::new(20)))
+        .with(Modify::new((0, 0)).with(Span::horizontal(20)))
         .to_string();
 
     assert_eq!(
@@ -436,7 +431,7 @@ fn span_cell_exceeds_boundaries_test() {
     let table = create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((1, 1)).with(ColumnSpan::new(20)))
+        .with(Modify::new((1, 1)).with(Span::horizontal(20)))
         .to_string();
 
     assert_eq!(
@@ -453,7 +448,7 @@ fn span_cell_exceeds_boundaries_test() {
     let table = create_table::<3, 3>()
         .with(Style::psql())
         .with(Modify::new(Segment::all()).with(Alignment::left()))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(20)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(20)))
         .to_string();
 
     assert_eq!(
@@ -473,7 +468,7 @@ fn span_cell_exceeds_boundaries_test() {
 fn span_zero_test() {
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 0)).with(ColumnSpan::new(0)))
+        .with(Modify::new((0, 0)).with(Span::horizontal(0)))
         .to_string();
 
     assert_eq!(
@@ -489,7 +484,7 @@ fn span_zero_test() {
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 1)).with(ColumnSpan::new(0)))
+        .with(Modify::new((0, 1)).with(Span::horizontal(0)))
         .to_string();
 
     assert_eq!(
@@ -505,7 +500,7 @@ fn span_zero_test() {
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 2)).with(ColumnSpan::new(0)))
+        .with(Modify::new((0, 2)).with(Span::horizontal(0)))
         .to_string();
 
     assert_eq!(
@@ -521,7 +516,7 @@ fn span_zero_test() {
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 3)).with(ColumnSpan::new(0)))
+        .with(Modify::new((0, 3)).with(Span::horizontal(0)))
         .to_string();
 
     assert_eq!(
@@ -537,7 +532,7 @@ fn span_zero_test() {
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 4)).with(ColumnSpan::new(0)))
+        .with(Modify::new((0, 4)).with(Span::horizontal(0)))
         .to_string();
 
     assert_eq!(
@@ -553,11 +548,11 @@ fn span_zero_test() {
 
     let table = create_table::<3, 3>()
         .with(Style::psql())
-        .with(Modify::new((0, 0)).with(ColumnSpan::new(0)))
-        .with(Modify::new((1, 1)).with(ColumnSpan::new(0)))
-        .with(Modify::new((2, 2)).with(ColumnSpan::new(0)))
-        .with(Modify::new((3, 2)).with(ColumnSpan::new(0)))
-        .with(Modify::new((3, 1)).with(ColumnSpan::new(0)))
+        .with(Modify::new((0, 0)).with(Span::horizontal(0)))
+        .with(Modify::new((1, 1)).with(Span::horizontal(0)))
+        .with(Modify::new((2, 2)).with(Span::horizontal(0)))
+        .with(Modify::new((3, 2)).with(Span::horizontal(0)))
+        .with(Modify::new((3, 1)).with(Span::horizontal(0)))
         .to_string();
 
     assert_eq!(
@@ -577,7 +572,7 @@ fn span_zero_test() {
 fn span_all_table_to_zero_test() {
     let table = create_table::<2, 2>()
         .with(Style::psql())
-        .with(Modify::new(Segment::all()).with(ColumnSpan::new(0)))
+        .with(Modify::new(Segment::all()).with(Span::horizontal(0)))
         .to_string();
 
     // todo: determine whether it's correct
@@ -593,31 +588,31 @@ mod row {
     fn span_row_test() {
         let table = create_table::<3, 3>();
         {
-            // let table_str = table
-            //     .clone()
-            //     .with(Style::ascii())
-            //     .with(Modify::new(Segment::all()).with(Alignment::left()))
-            //     .with(Modify::new(Rows::single(0)).with(RowSpan::new(2)))
-            //     .to_string();
-
-            // assert_eq!(
-            //     table_str,
-            //     static_table!(
-            //         "+---+----------+----------+----------+"
-            //         "+ N + column 0 + column 1 + column 2 +"
-            //         "+---+----------+----------+----------+"
-            //         "| 1 | 1-0      | 1-1      | 1-2      |"
-            //         "+---+----------+----------+----------+"
-            //         "| 2 | 2-0      | 2-1      | 2-2      |"
-            //         "+---+----------+----------+----------+"
-            //     )
-            // );
+            let table_str = table
+                .clone()
+                .with(Style::ascii())
+                .with(Modify::new(Segment::all()).with(Alignment::left()))
+                .with(Modify::new(Rows::single(0)).with(Span::vertical(2)))
+                .to_string();
+
+            assert_eq!(
+                table_str,
+                static_table!(
+                    "+---+----------+----------+----------+"
+                    "+ N + column 0 + column 1 + column 2 +"
+                    "+---+----------+----------+----------+"
+                    "| 1 | 1-0      | 1-1      | 1-2      |"
+                    "+---+----------+----------+----------+"
+                    "| 2 | 2-0      | 2-1      | 2-2      |"
+                    "+---+----------+----------+----------+"
+                )
+            );
 
             let table = table
                 .clone()
                 .with(Style::psql())
                 .with(Modify::new(Segment::all()).with(Alignment::left()))
-                .with(Modify::new(Rows::single(0)).with(RowSpan::new(2)))
+                .with(Modify::new(Rows::single(0)).with(Span::vertical(2)))
                 .to_string();
 
             assert_eq!(
@@ -634,7 +629,7 @@ mod row {
                 .clone()
                 .with(Style::psql())
                 .with(Modify::new(Segment::all()).with(Alignment::left()))
-                .with(Modify::new(Rows::new(1..2)).with(RowSpan::new(2)))
+                .with(Modify::new(Rows::new(1..2)).with(Span::vertical(2)))
                 .to_string();
 
             assert_eq!(
@@ -652,7 +647,7 @@ mod row {
                 .clone()
                 .with(Style::psql())
                 .with(Modify::new(Segment::all()).with(Alignment::left()))
-                .with(Modify::new(Rows::single(0)).with(RowSpan::new(4)))
+                .with(Modify::new(Rows::single(0)).with(Span::vertical(4)))
                 .to_string();
 
             assert_eq!(table, " N + column 0 + column 1 + column 2 ");
@@ -670,7 +665,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((0, 0)).with(RowSpan::new(2)))
+                    .with(Modify::new((0, 0)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -689,7 +684,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((1, 0)).with(RowSpan::new(2)))
+                    .with(Modify::new((1, 0)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -707,7 +702,7 @@ mod row {
                 let table = table
                     .clone()
                     .with(Style::psql())
-                    .with(Modify::new((2, 0)).with(RowSpan::new(2)))
+                    .with(Modify::new((2, 0)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -731,7 +726,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((0, 1)).with(RowSpan::new(2)))
+                    .with(Modify::new((0, 1)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -750,7 +745,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((0, 2)).with(RowSpan::new(2)))
+                    .with(Modify::new((0, 2)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -768,7 +763,7 @@ mod row {
                 let table = table
                     .clone()
                     .with(Style::psql())
-                    .with(Modify::new((0, 3)).with(RowSpan::new(2)))
+                    .with(Modify::new((0, 3)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -791,7 +786,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((1, 1)).with(RowSpan::new(2)))
+                    .with(Modify::new((1, 1)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -810,7 +805,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((2, 1)).with(RowSpan::new(2)))
+                    .with(Modify::new((2, 1)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -832,7 +827,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((1, 2)).with(RowSpan::new(2)))
+                    .with(Modify::new((1, 2)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -851,7 +846,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((2, 2)).with(RowSpan::new(2)))
+                    .with(Modify::new((2, 2)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -873,7 +868,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((1, 3)).with(RowSpan::new(2)))
+                    .with(Modify::new((1, 3)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -892,7 +887,7 @@ mod row {
                     .clone()
                     .with(Style::psql())
                     .with(Modify::new(Segment::all()).with(Alignment::left()))
-                    .with(Modify::new((2, 3)).with(RowSpan::new(2)))
+                    .with(Modify::new((2, 3)).with(Span::vertical(2)))
                     .to_string();
 
                 assert_eq!(
@@ -913,7 +908,7 @@ mod row {
     fn span_with_panel_with_correction_test() {
         let data = [[1, 2, 3]];
         let table = Table::new(data)
-            .with(Modify::new((0, 0)).with(RowSpan::new(2)))
+            .with(Modify::new((0, 0)).with(Span::vertical(2)))
             .with(Style::ascii())
             .with(BorderSpanCorrection)
             .to_string();
@@ -931,8 +926,8 @@ mod row {
 
         let data = [[1, 2, 3], [4, 5, 6]];
         let table = Table::new(data)
-            .with(Modify::new((1, 0)).with(RowSpan::new(2)))
-            .with(Modify::new((0, 2)).with(RowSpan::new(3)))
+            .with(Modify::new((1, 0)).with(Span::vertical(2)))
+            .with(Modify::new((0, 2)).with(Span::vertical(3)))
             .with(Style::ascii())
             .with(BorderSpanCorrection)
             .to_string();
@@ -952,9 +947,9 @@ mod row {
 
         let data = [[1, 2, 3], [4, 5, 6]];
         let table = Table::new(data)
-            .with(Modify::new((1, 0)).with(RowSpan::new(2)))
-            .with(Modify::new((0, 2)).with(RowSpan::new(3)))
-            .with(Modify::new((0, 1)).with(RowSpan::new(2)))
+            .with(Modify::new((1, 0)).with(Span::vertical(2)))
+            .with(Modify::new((0, 2)).with(Span::vertical(3)))
+            .with(Modify::new((0, 1)).with(Span::vertical(2)))
             .with(Style::ascii())
             .with(BorderSpanCorrection)
             .to_string();
@@ -973,11 +968,11 @@ mod row {
 
         let data = [[1, 2, 3], [4, 5, 6]];
         let table = Table::new(data)
-            .with(Modify::new((1, 0)).with(RowSpan::new(2)))
+            .with(Modify::new((1, 0)).with(Span::vertical(2)))
             .with(
                 Modify::new((0, 1))
-                    .with(RowSpan::new(2))
-                    .with(ColumnSpan::new(2)),
+                    .with(Span::vertical(2))
+                    .with(Span::horizontal(2)),
             )
             .with(Style::ascii())
             .with(BorderSpanCorrection)
@@ -1000,8 +995,8 @@ mod row {
     fn span_example_test() {
         let data = [["just 1 column"; 5]; 5];
 
-        let h_span = |r, c, span| Modify::new((r, c)).with(ColumnSpan::new(span));
-        let v_span = |r, c, span| Modify::new((r, c)).with(RowSpan::new(span));
+        let h_span = |r, c, span| Modify::new((r, c)).with(Span::horizontal(span));
+        let v_span = |r, c, span| Modify::new((r, c)).with(Span::vertical(span));
 
         let table = Table::new(data)
             .with(h_span(0, 0, 5).with(String::from("span all 5 columns")))
@@ -1045,7 +1040,7 @@ mod row {
             ["7", "8", "9"],
         ];
         let table = Table::new(data)
-            .with(Modify::new((1, 1)).with(RowSpan::new(3)))
+            .with(Modify::new((1, 1)).with(Span::vertical(3)))
             .with(Style::modern())
             .with(Highlight::new(Columns::single(1), Border::filled('*')))
             .to_string();
@@ -1080,8 +1075,8 @@ fn highlight_row_col_span_test() {
     let table = Table::new(data)
         .with(
             Modify::new((1, 1))
-                .with(RowSpan::new(3))
-                .with(ColumnSpan::new(2)),
+                .with(Span::vertical(3))
+                .with(Span::horizontal(2)),
         )
         .with(Style::modern())
         .with(Highlight::new(Columns::new(1..3), Border::filled('*')))
@@ -1108,7 +1103,7 @@ fn highlight_row_col_span_test() {
 
 test_table!(
     column_span_bigger_then_max,
-    create_table::<3, 3>().with(Modify::new((0, 0)).with(ColumnSpan::new(100))),
+    create_table::<3, 3>().with(Modify::new((0, 0)).with(Span::horizontal(100))),
     "+---+-----+-----+-----+"
     "|          N          |"
     "+---+-----+-----+-----+"
@@ -1122,7 +1117,7 @@ test_table!(
 
 test_table!(
     row_span_bigger_then_max,
-    create_table::<3, 3>().with(Modify::new((0, 0)).with(RowSpan::new(100))),
+    create_table::<3, 3>().with(Modify::new((0, 0)).with(Span::vertical(100))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+   +----------+----------+----------+"
@@ -1136,7 +1131,7 @@ test_table!(
 
 test_table!(
     column_span_invalid_position_row,
-    create_table::<3, 3>().with(Modify::new((1000, 0)).with(ColumnSpan::new(2))),
+    create_table::<3, 3>().with(Modify::new((1000, 0)).with(Span::horizontal(2))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+---+----------+----------+----------+"
@@ -1150,7 +1145,7 @@ test_table!(
 
 test_table!(
     column_span_invalid_position_column,
-    create_table::<3, 3>().with(Modify::new((0, 1000)).with(ColumnSpan::new(2))),
+    create_table::<3, 3>().with(Modify::new((0, 1000)).with(Span::horizontal(2))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+---+----------+----------+----------+"
@@ -1164,7 +1159,7 @@ test_table!(
 
 test_table!(
     column_span_invalid_position_row_and_column,
-    create_table::<3, 3>().with(Modify::new((1000, 1000)).with(ColumnSpan::new(2))),
+    create_table::<3, 3>().with(Modify::new((1000, 1000)).with(Span::horizontal(2))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+---+----------+----------+----------+"
@@ -1178,7 +1173,7 @@ test_table!(
 
 test_table!(
     row_span_invalid_position_row,
-    create_table::<3, 3>().with(Modify::new((1000, 0)).with(RowSpan::new(2))),
+    create_table::<3, 3>().with(Modify::new((1000, 0)).with(Span::vertical(2))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+---+----------+----------+----------+"
@@ -1192,7 +1187,7 @@ test_table!(
 
 test_table!(
     row_span_invalid_position_column,
-    create_table::<3, 3>().with(Modify::new((0, 1000)).with(RowSpan::new(2))),
+    create_table::<3, 3>().with(Modify::new((0, 1000)).with(Span::vertical(2))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+---+----------+----------+----------+"
@@ -1206,7 +1201,7 @@ test_table!(
 
 test_table!(
     row_span_invalid_position_row_and_column,
-    create_table::<3, 3>().with(Modify::new((1000, 1000)).with(RowSpan::new(2))),
+    create_table::<3, 3>().with(Modify::new((1000, 1000)).with(Span::vertical(2))),
     "+---+----------+----------+----------+"
     "| N | column 0 | column 1 | column 2 |"
     "+---+----------+----------+----------+"
diff --git a/tabled/tests/style_test.rs b/tabled/tests/style_test.rs
index b7f41ff..4f85cbc 100644
--- a/tabled/tests/style_test.rs
+++ b/tabled/tests/style_test.rs
@@ -5,16 +5,12 @@ use std::iter::FromIterator;
 use tabled::{
     builder::Builder,
     settings::{
-        format::Format,
-        highlight::Highlight,
         object::{Columns, Rows, Segment},
-        padding::Padding,
-        span::ColumnSpan,
         style::{
             Border, BorderChar, BorderSpanCorrection, BorderText, HorizontalLine, Line, Offset,
             RawStyle, Style, VerticalLine,
         },
-        Modify,
+        Format, Highlight, Modify, Padding, Span,
     },
     Table,
 };
@@ -24,7 +20,7 @@ use crate::util::{create_table, init_table, static_table, test_table};
 #[cfg(feature = "color")]
 use std::convert::TryFrom;
 #[cfg(feature = "color")]
-use tabled::settings::color::Color;
+use tabled::settings::Color;
 
 mod util;
 
@@ -331,7 +327,7 @@ test_table!(
     border_text_colored,
     {
         use owo_colors::OwoColorize;
-        use tabled::settings::style::{BorderColor};
+        use tabled::settings::style::BorderColor;
 
         create_table::<2, 2>()
             .with(BorderText::new(1, "-Table"))
@@ -568,14 +564,14 @@ test_table!(
 test_table!(
     span_correct_test_0,
     create_table::<6, 4>()
-        .with(Modify::new((0, 3)).with(ColumnSpan::new(2)))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(3)))
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
-        .with(Modify::new((2, 3)).with(ColumnSpan::new(2)))
-        .with(Modify::new((3, 0)).with(ColumnSpan::new(5)))
-        .with(Modify::new((4, 1)).with(ColumnSpan::new(4)))
-        .with(Modify::new((5, 0)).with(ColumnSpan::new(5)))
-        .with(Modify::new((6, 0)).with(ColumnSpan::new(5)))
+        .with(Modify::new((0, 3)).with(Span::horizontal(2)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(3)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
+        .with(Modify::new((2, 3)).with(Span::horizontal(2)))
+        .with(Modify::new((3, 0)).with(Span::horizontal(5)))
+        .with(Modify::new((4, 1)).with(Span::horizontal(4)))
+        .with(Modify::new((5, 0)).with(Span::horizontal(5)))
+        .with(Modify::new((6, 0)).with(Span::horizontal(5)))
         .with(BorderSpanCorrection),
     "+---+----------+----------+-----------+"
     "| N | column 0 | column 1 | column 2  |"
@@ -597,14 +593,14 @@ test_table!(
 test_table!(
     span_correct_test_1,
     create_table::<6, 4>()
-        .with(Modify::new((0, 0)).with(ColumnSpan::new(5)))
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(3)))
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
-        .with(Modify::new((2, 3)).with(ColumnSpan::new(2)))
-        .with(Modify::new((3, 0)).with(ColumnSpan::new(5)))
-        .with(Modify::new((4, 1)).with(ColumnSpan::new(4)))
-        .with(Modify::new((5, 0)).with(ColumnSpan::new(5)))
-        .with(Modify::new((6, 0)).with(ColumnSpan::new(5)))
+        .with(Modify::new((0, 0)).with(Span::horizontal(5)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(3)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
+        .with(Modify::new((2, 3)).with(Span::horizontal(2)))
+        .with(Modify::new((3, 0)).with(Span::horizontal(5)))
+        .with(Modify::new((4, 1)).with(Span::horizontal(4)))
+        .with(Modify::new((5, 0)).with(Span::horizontal(5)))
+        .with(Modify::new((6, 0)).with(Span::horizontal(5)))
         .with(BorderSpanCorrection),
     "+----------------------+"
     "|          N           |"
@@ -2041,7 +2037,7 @@ fn test_default_border_usage() {
 #[test]
 fn border_colored_test() {
     use owo_colors::OwoColorize;
-    use tabled::settings::{color::Color, style::BorderColor};
+    use tabled::settings::{style::BorderColor, Color};
 
     let table = create_table::<2, 2>()
         .with(Style::ascii())
@@ -2114,7 +2110,7 @@ fn border_colored_test() {
 #[test]
 fn style_with_color_test() {
     use owo_colors::OwoColorize;
-    use tabled::settings::color::Color;
+    use tabled::settings::Color;
 
     let mut style: RawStyle = Style::ascii().into();
     style
@@ -2178,7 +2174,7 @@ test_table!(
 test_table!(
     border_color,
     {
-        use tabled::settings::color::Color;
+        use tabled::settings::Color;
         create_table::<3, 3>().with(Style::psql()).with(Color::BG_GREEN)
     },
     " \u{1b}[42mN\u{1b}[49m | \u{1b}[42mcolumn 0\u{1b}[49m | \u{1b}[42mcolumn 1\u{1b}[49m | \u{1b}[42mcolumn 2\u{1b}[49m \n---+----------+----------+----------\n \u{1b}[42m0\u{1b}[49m |   \u{1b}[42m0-0\u{1b}[49m    |   \u{1b}[42m0-1\u{1b}[49m    |   \u{1b}[42m0-2\u{1b}[49m    \n \u{1b}[42m1\u{1b}[49m |   \u{1b}[42m1-0\u{1b}[49m    |   \u{1b}[42m1-1\u{1b}[49m    |   \u{1b}[42m1-2\u{1b}[49m    \n \u{1b}[42m2\u{1b}[49m |   \u{1b}[42m2-0\u{1b}[49m    |   \u{1b}[42m2-1\u{1b}[49m    |   \u{1b}[42m2-2\u{1b}[49m    "
@@ -2187,7 +2183,7 @@ test_table!(
 test_table!(
     text_color,
     {
-        use tabled::settings::color::Color;
+        use tabled::settings::Color;
         create_table::<3, 3>().with(Style::psql()).with(Modify::new(Segment::all()).with(Color::BG_BLACK))
     },
     " \u{1b}[40mN\u{1b}[49m | \u{1b}[40mcolumn 0\u{1b}[49m | \u{1b}[40mcolumn 1\u{1b}[49m | \u{1b}[40mcolumn 2\u{1b}[49m \n---+----------+----------+----------\n \u{1b}[40m0\u{1b}[49m |   \u{1b}[40m0-0\u{1b}[49m    |   \u{1b}[40m0-1\u{1b}[49m    |   \u{1b}[40m0-2\u{1b}[49m    \n \u{1b}[40m1\u{1b}[49m |   \u{1b}[40m1-0\u{1b}[49m    |   \u{1b}[40m1-1\u{1b}[49m    |   \u{1b}[40m1-2\u{1b}[49m    \n \u{1b}[40m2\u{1b}[49m |   \u{1b}[40m2-0\u{1b}[49m    |   \u{1b}[40m2-1\u{1b}[49m    |   \u{1b}[40m2-2\u{1b}[49m    "
diff --git a/tabled/tests/table_test.rs b/tabled/tests/table_test.rs
index 15dd214..b31c76f 100644
--- a/tabled/tests/table_test.rs
+++ b/tabled/tests/table_test.rs
@@ -4,9 +4,7 @@ use std::iter::FromIterator;
 
 use tabled::{
     builder::Builder,
-    settings::{
-        formatting::Charset, height::Height, padding::Padding, style::Style, width::Width, Settings,
-    },
+    settings::{formatting::Charset, Height, Padding, Settings, Style, Width},
     Table,
 };
 
diff --git a/tabled/tests/util.rs b/tabled/tests/util.rs
index 47c82e9..8cc50cc 100644
--- a/tabled/tests/util.rs
+++ b/tabled/tests/util.rs
@@ -11,7 +11,7 @@ use std::{
 use tabled::{
     grid::config::Position,
     grid::util::string::string_width_multiline,
-    settings::{alignment::Alignment, object::SegmentAll, Modify},
+    settings::{object::SegmentAll, Alignment, Modify},
     Table, Tabled,
 };
 
diff --git a/tabled/tests/width_test.rs b/tabled/tests/width_test.rs
index 2701ccf..75bfb6b 100644
--- a/tabled/tests/width_test.rs
+++ b/tabled/tests/width_test.rs
@@ -3,17 +3,11 @@
 use tabled::{
     grid::util::string::string_width_multiline,
     settings::{
-        alignment::Alignment,
         formatting::{TabSize, TrimStrategy},
-        margin::Margin,
         object::{Columns, Object, Rows, Segment},
-        padding::Padding,
-        panel::Panel,
         peaker::{PriorityMax, PriorityMin},
-        span::ColumnSpan,
-        style::Style,
         width::{Justify, MinWidth, SuffixLimit, Width},
-        Modify, Settings,
+        Alignment, Margin, Modify, Padding, Panel, Settings, Span, Style,
     },
 };
 
@@ -1308,8 +1302,8 @@ fn max_width_with_span() {
     let mut table = init_table::<3, 3, _, _>([((0, 1), "a long string")]);
     table
         .with(Style::psql())
-        .with(Modify::new((1, 1)).with(ColumnSpan::new(2)))
-        .with(Modify::new((2, 2)).with(ColumnSpan::new(2)));
+        .with(Modify::new((1, 1)).with(Span::horizontal(2)))
+        .with(Modify::new((2, 2)).with(Span::horizontal(2)));
 
     table.with(Width::truncate(40));
 
@@ -1528,7 +1522,7 @@ fn min_width_with_span_1() {
 
     let table = new_table(data)
         .with(Style::markdown())
-        .with(Modify::new((1, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((1, 0)).with(Span::horizontal(2)))
         .with(MinWidth::new(100))
         .to_string();
 
@@ -1556,7 +1550,7 @@ fn min_width_with_span_2() {
 
     let table = new_table(data)
         .with(Style::markdown())
-        .with(Modify::new((2, 0)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 0)).with(Span::horizontal(2)))
         .with(MinWidth::new(100))
         .to_string();
 
@@ -1725,7 +1719,7 @@ fn max_width_table_when_cell_has_tabs() {
 fn max_width_truncate_with_big_span() {
     let table = init_table::<3, 3, _, _>([((1, 1), "Hello World With Big Line; Here we gooooooo")])
         .with(Style::markdown())
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(3)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(3)))
         .with(Width::truncate(40))
         .to_string();
 
@@ -1746,8 +1740,8 @@ fn max_width_truncate_with_big_span() {
         ((2, 2), "Hello World With Big Line; Here"),
     ])
     .with(Style::markdown())
-    .with(Modify::new((2, 1)).with(ColumnSpan::new(3)))
-    .with(Modify::new((3, 2)).with(ColumnSpan::new(2)))
+    .with(Modify::new((2, 1)).with(Span::horizontal(3)))
+    .with(Modify::new((3, 2)).with(Span::horizontal(2)))
     .to_string();
 
     assert_eq!(
@@ -1766,8 +1760,8 @@ fn max_width_truncate_with_big_span() {
         ((2, 2), "Hello World With Big Line; Here"),
     ])
     .with(Style::markdown())
-    .with(Modify::new((2, 1)).with(ColumnSpan::new(3)))
-    .with(Modify::new((3, 2)).with(ColumnSpan::new(2)))
+    .with(Modify::new((2, 1)).with(Span::horizontal(3)))
+    .with(Modify::new((3, 2)).with(Span::horizontal(2)))
     .with(Width::truncate(40))
     .to_string();
 
@@ -1788,8 +1782,8 @@ fn max_width_truncate_with_big_span() {
         ((2, 2), "Hello World With Big Line; Here"),
     ])
     .with(Style::markdown())
-    .with(Modify::new((2, 1)).with(ColumnSpan::new(2)))
-    .with(Modify::new((3, 2)).with(ColumnSpan::new(2)))
+    .with(Modify::new((2, 1)).with(Span::horizontal(2)))
+    .with(Modify::new((3, 2)).with(Span::horizontal(2)))
     .with(Width::truncate(40))
     .to_string();
 
@@ -1810,8 +1804,8 @@ fn max_width_truncate_with_big_span() {
         ((2, 2), "Hello World With Big L"),
     ])
     .with(Style::markdown())
-    .with(Modify::new((2, 1)).with(ColumnSpan::new(3)))
-    .with(Modify::new((3, 2)).with(ColumnSpan::new(2)))
+    .with(Modify::new((2, 1)).with(Span::horizontal(3)))
+    .with(Modify::new((3, 2)).with(Span::horizontal(2)))
     .to_string();
 
     assert_eq!(
@@ -1884,7 +1878,7 @@ fn max_width_truncate_priority_max() {
 fn max_width_truncate_priority_max_with_span() {
     let table = init_table::<3, 3, _, _>([((1, 1), "Hello World With Big Line")])
         .with(Style::markdown())
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(2)))
         .with(Width::truncate(15).priority::<PriorityMax>())
         .to_string();
 
@@ -1980,7 +1974,7 @@ fn max_width_wrap_priority_max() {
 fn max_width_wrap_priority_max_with_span() {
     let table = init_table::<3, 3, _, _>([((1, 1), "Hello World With Big Line")])
         .with(Style::markdown())
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(2)))
         .with(Width::wrap(15).priority::<PriorityMax>())
         .to_string();
 
@@ -2072,7 +2066,7 @@ fn max_width_truncate_priority_min() {
 fn max_width_truncate_priority_min_with_span() {
     let table = init_table::<3, 3, _, _>([((1, 1), "Hello World With Big Line")])
         .with(Style::markdown())
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(2)))
         .with(Width::truncate(15).priority::<PriorityMin>())
         .to_string();
 
@@ -2090,7 +2084,7 @@ fn max_width_truncate_priority_min_with_span() {
 
     let table = init_table::<3, 3, _, _>([((1, 1), "Hello World With Big Line")])
         .with(Style::markdown())
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(2)))
         .with(Width::truncate(17).priority::<PriorityMin>())
         .to_string();
 
@@ -2170,7 +2164,7 @@ fn max_width_wrap_priority_min() {
 fn max_width_wrap_priority_min_with_span() {
     let table = init_table::<3, 3, _, _>([((1, 1), "Hello World With Big Line")])
         .with(Style::markdown())
-        .with(Modify::new((2, 1)).with(ColumnSpan::new(2)))
+        .with(Modify::new((2, 1)).with(Span::horizontal(2)))
         .with(Width::wrap(15).priority::<PriorityMin>())
         .to_string();
 
@@ -2586,7 +2580,7 @@ mod derived {
                 name: text.to_owned(),
                 is_hyperlink: true,
             }];
-            tabled::Table::new(&data)
+            tabled::Table::new(data)
                 .with(
                     Modify::new(Segment::all())
                         .with(Width::wrap(5).keep_words())