mod encoding;
mod error;
mod field_type;
pub mod metadata;
mod sample;
mod sniffer;
mod tum;
pub use error::{Result, SnifferError};
pub use field_type::Type;
pub use metadata::{Dialect, Header, Metadata, Quote};
pub use sample::{DatePreference, SampleSize};
pub use sniffer::Sniffer;
pub use encoding::{EncodingInfo, detect_encoding, is_utf8};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_public_api() {
let _sniffer = Sniffer::new();
let _sample = SampleSize::Records(100);
let _date_pref = DatePreference::MdyFormat;
let _quote = Quote::Some(b'"');
let _type = Type::Text;
}
#[test]
fn test_metadata_constructors_preserve_compatibility_and_allow_encoding() {
let dialect = Dialect::default();
let metadata = Metadata::new(dialect.clone(), 10, 2, vec![], vec![]);
assert_eq!(metadata.encoding, EncodingInfo::new(true, false));
let encoding = EncodingInfo::with_name("windows-1252", false, false);
let metadata = Metadata::with_encoding(dialect, encoding, 10, 2, vec![], vec![]);
assert_eq!(metadata.encoding, encoding);
assert!(!metadata.dialect.is_utf8);
}
#[test]
fn test_sniff_simple_csv() {
let data = b"a,b,c\n1,2,3\n4,5,6\n";
let sniffer = Sniffer::new();
let metadata = sniffer.sniff_bytes(data).unwrap();
assert_eq!(metadata.dialect.delimiter, b',');
assert_eq!(metadata.num_fields, 3);
}
#[test]
fn test_builder_pattern() {
let mut sniffer = Sniffer::new();
sniffer
.sample_size(SampleSize::Bytes(4096))
.date_preference(DatePreference::DmyFormat)
.delimiter(b';')
.quote(Quote::None);
}
}