#![warn(missing_docs)]
mod datatype;
pub use datatype::*;
use std::fmt::Display;
mod datatype_parse;
mod error;
pub use error::*;
mod field;
pub use field::*;
mod fields;
pub use fields::*;
mod schema;
pub use schema::*;
use std::ops;
#[cfg(feature = "ffi")]
pub mod ffi;
#[derive(Clone, Hash, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)]
pub struct SortOptions {
pub descending: bool,
pub nulls_first: bool,
}
impl Display for SortOptions {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
if self.descending {
write!(f, "DESC")?;
} else {
write!(f, "ASC")?;
}
if self.nulls_first {
write!(f, " NULLS FIRST")?;
} else {
write!(f, " NULLS LAST")?;
}
Ok(())
}
}
impl SortOptions {
pub fn new(descending: bool, nulls_first: bool) -> Self {
Self {
descending,
nulls_first,
}
}
pub fn desc(mut self) -> Self {
self.descending = true;
self
}
pub fn asc(mut self) -> Self {
self.descending = false;
self
}
pub fn nulls_first(mut self) -> Self {
self.nulls_first = true;
self
}
pub fn nulls_last(mut self) -> Self {
self.nulls_first = false;
self
}
pub fn with_descending(mut self, descending: bool) -> Self {
self.descending = descending;
self
}
pub fn with_nulls_first(mut self, nulls_first: bool) -> Self {
self.nulls_first = nulls_first;
self
}
}
impl Default for SortOptions {
fn default() -> Self {
Self {
descending: false,
nulls_first: true,
}
}
}
impl ops::Not for SortOptions {
type Output = SortOptions;
fn not(self) -> SortOptions {
SortOptions {
descending: !self.descending,
nulls_first: !self.nulls_first,
}
}
}
#[test]
fn test_overloaded_not_sort_options() {
let sort_options_array = [
SortOptions {
descending: false,
nulls_first: false,
},
SortOptions {
descending: false,
nulls_first: true,
},
SortOptions {
descending: true,
nulls_first: false,
},
SortOptions {
descending: true,
nulls_first: true,
},
];
assert!((!sort_options_array[0]).descending);
assert!((!sort_options_array[0]).nulls_first);
assert!((!sort_options_array[1]).descending);
assert!(!(!sort_options_array[1]).nulls_first);
assert!(!(!sort_options_array[2]).descending);
assert!((!sort_options_array[2]).nulls_first);
assert!(!(!sort_options_array[3]).descending);
assert!(!(!sort_options_array[3]).nulls_first);
}