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