#![warn(
rustdoc::all,
absolute_paths_not_starting_with_crate,
deprecated_in_future,
explicit_outlives_requirements,
future_incompatible,
keyword_idents,
impl_trait_redundant_captures,
keyword_idents_2024,
let_underscore,
macro_use_extern_crate,
missing_debug_implementations,
missing_copy_implementations,
missing_docs,
non_ascii_idents,
// non_exhaustive_omitted_patterns, unstable
noop_method_call,
redundant_imports,
redundant_lifetimes,
rust_2018_compatibility,
rust_2021_compatibility,
rust_2024_compatibility,
rust_2018_idioms,
single_use_lifetimes,
trivial_numeric_casts,
trivial_casts,
unit_bindings,
unreachable_pub,
unsafe_op_in_unsafe_fn,
unused,
unused_crate_dependencies,
unused_extern_crates,
unused_lifetimes,
unused_qualifications,
clippy::style,
clippy::pedantic,
clippy::nursery,
clippy::cargo,
// clippy::restriction,
clippy::create_dir,
// clippy::exhaustive_enums,
// clippy::exhaustive_structs,
clippy::little_endian_bytes,
clippy::missing_asserts_for_indexing,
clippy::mixed_read_write_in_expression,
// clippy::panic,
clippy::partial_pub_fields,
clippy::redundant_type_annotations,
clippy::renamed_function_params,
clippy::rest_pat_in_fully_bound_structs,
clippy::same_name_method,
clippy::string_add,
clippy::string_lit_chars_any,
clippy::tests_outside_test_module,
// clippy::indexing_slicing,
// clippy::wildcard_enum_match_arm
clippy::unneeded_field_pattern,
clippy::perf,
// clippy::undocumented_unsafe_blocks,
// clippy::unwrap_used,
)]
#![allow(clippy::multiple_crate_versions)] #![allow(clippy::option_if_let_else)] #![allow(clippy::cast_possible_truncation)] #![allow(clippy::missing_panics_doc)] #![allow(clippy::cast_sign_loss)] #![allow(clippy::redundant_pub_crate)] #![allow(clippy::wildcard_imports)] #![allow(clippy::missing_errors_doc)] #![allow(clippy::too_many_lines)] #![allow(unused_crate_dependencies)] #![allow(clippy::items_after_statements)] #![allow(clippy::match_same_arms)] #![allow(clippy::float_cmp)] #![allow(clippy::same_name_method)]
pub mod agg;
pub mod anagram;
pub mod binsearch;
pub mod column;
pub mod comp;
pub mod dyadic;
pub mod expr;
pub mod format;
pub mod hash128;
pub mod input;
pub mod input_file;
pub mod join;
pub mod matcher;
pub mod memory_tracker;
pub mod num;
pub mod output;
pub mod prelude;
pub mod read_line;
pub mod recyclable_vec;
pub mod roman;
pub mod rusty_line;
pub mod sampler;
mod shunting_yard;
pub mod solve;
pub mod sort;
pub mod tabs;
pub mod text;
pub mod textgen;
mod tok2;
pub mod tooltest;
pub mod trans;
pub mod transpose;
#[cfg(feature = "track")]
pub mod use_memory_tracker;
pub mod util;
pub use crate::input_file::TextFile;
pub use crate::output::LineWriter;
pub use crate::recyclable_vec::RVec;
pub type ColumnNames = Vec<String>;
pub type ColumnNamesRef = [String];
pub type Bytes = Vec<u8>;
pub type BytesRef = [u8];
pub type ColumnValues = RVec<Bytes>;
pub type ColumnValuesRef = [Bytes];
#[must_use]
pub fn get_str(data: &ColumnNamesRef, index: usize) -> &str {
data.get(index).map_or("", |s| s.as_str())
}
#[macro_export]
macro_rules! svec {
($($x:expr),* $(,)?) => {
vec![$($x.to_string()),*]
};
}
#[macro_export]
macro_rules! useful {
($trait_name:ident) => {
pastey::paste! {
pub trait [<Useful $trait_name>]: $trait_name + std::fmt::Debug {}
impl<T> [<Useful $trait_name>] for T where T: $trait_name + fmt::Debug {}
pub trait [<Safe $trait_name>]: $trait_name + Send + Sync + std::fmt::Debug {}
impl<T> [<Safe $trait_name>] for T where T: $trait_name + Send + Sync + std::fmt::Debug {}
#[doc = " Reference to useful `" $trait_name "` trait."]
pub type [<$trait_name Ref>] = std::rc::Rc<std::cell::RefCell<dyn [<Useful $trait_name>]>>;
}
};
}