1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//! A utility crate for parsing the text file you get when [exporting a WhatsApp
//! conversation][export].
//!
//! # Examples
//!
//! The main purpose of this crate is the [`parse()`] function for parsing
//! source text into [`Message`]s and [`ParseError`]s.
//!
//! ```rust
//! use whatsapp_export_parser::{parse, Body, DirectMessage, Message, Span};
//!
//! let src = r#"
//! 31/10/19, 16:16 - Michael-F-Bryan: This is a message!
//! 31/10/19, 14:13 - +60 12-345 6789: IMG-20191031-WA0005.jpg (file attached)
//! "#;
//!
//! let parsed = dbg!(parse(src));
//!
//! assert!(parsed.errors.is_empty(), "Everything should have parsed successfully");
//! assert_eq!(parsed.messages.len(), 2);
//!
//! assert_eq!(parsed.messages[0].meta.sender, "Michael-F-Bryan");
//! let expected_body = Body::from(DirectMessage {
//!     content: String::from("This is a message!"),
//!     span: Span::new(36, 54),
//! });
//! assert_eq!(parsed.messages[0].body, expected_body);
//! assert_eq!(parsed.messages[1].meta.sender, "+60 12-345 6789");
//! ```
//!
//! # Cargo Features
//!
//! To help reduce compile times some features have been hidden behind cargo
//! feature flags.
//!
//! - `serde-1` - implements serialization for exported types
//!
//! [export]: https://faq.whatsapp.com/en/android/23756533/

#![forbid(unsafe_code)]
#![deny(
    missing_docs,
    missing_debug_implementations,
    missing_copy_implementations,
    rust_2018_idioms
)]

#[cfg(test)]
#[macro_use]
extern crate pretty_assertions;

mod messages;
mod parser;

pub use messages::{Attachment, Body, DirectMessage, Message, Metadata, Span};
pub use parser::{parse, ParseError, Parsed};