#![cfg_attr(not(any(feature = "std", test)), no_std)]
#![warn(
    rust_2018_idioms,
    rust_2018_compatibility,
    rust_2021_compatibility,
    missing_debug_implementations,
    unreachable_pub,
    missing_docs
)]
#![allow(clippy::uninlined_format_args)]
#![deny(unused_must_use)]
#![doc(
    html_logo_url = "https://raw.githubusercontent.com/zhiburt/tabled/86ac146e532ce9f7626608d7fd05072123603a2e/assets/tabled-gear.svg"
)]

//! Papergrid is a library for generating text-based tables.
//!
//! It has relatively low level API.
//! If you're interested in a more friendly one take a look at [`tabled`](https://github.com/zhiburt/tabled).
//!
//! # Example
//!
#![cfg_attr(feature = "std", doc = "```")]
#![cfg_attr(not(feature = "std"), doc = "```ignore")]
//! use papergrid::{
//!     records::IterRecords,
//!     dimension::{Estimate},
//!     config::Borders,
//!     colors::NoColors,
//!     grid::iterable::Grid,
//!     config::spanned::SpannedConfig,
//!     dimension::spanned::SpannedGridDimension,
//! };
//!
//! // Creating a borders structure of a grid.
//! let borders = Borders {
//!     top: Some('-'),
//!     top_left: Some('+'),
//!     top_right: Some('+'),
//!     top_intersection: Some('+'),
//!     bottom: Some('-'),
//!     bottom_left: Some('+'),
//!     bottom_right: Some('+'),
//!     bottom_intersection: Some('+'),
//!     horizontal: Some('-'),
//!     vertical: Some('|'),
//!     left: Some('|'),
//!     right: Some('|'),
//!     intersection: Some('+'),
//!     left_intersection: Some('+'),
//!     right_intersection: Some('+'),
//! };
//!
//! // Creating a grid config.
//! let mut cfg = SpannedConfig::default();
//! cfg.set_borders(borders);
//!
//! // Creating an actual data for grid.
//! let records = vec![vec!["Hello", "World"], vec!["Hi", "World"]];
//! let records = IterRecords::new(records, 2, None);
//!
//! // Estimate grid dimension.
//! let mut dimension = SpannedGridDimension::default();
//! dimension.estimate(&records, &cfg);
//!
//! // Creating a grid.
//! let grid = Grid::new(&records, &dimension, &cfg, NoColors).to_string();
//!
//! assert_eq!(
//!     grid,
//!     concat!(
//!         "+-----+-----+\n",
//!         "|Hello|World|\n",
//!         "+-----+-----+\n",
//!         "|Hi   |World|\n",
//!         "+-----+-----+",
//!     ),
//! );
//! ```

pub mod ansi;
pub mod colors;
pub mod config;
pub mod dimension;
pub mod grid;
pub mod records;
pub mod util;
