chematic_smiles/lib.rs
1#![forbid(unsafe_code)]
2//! `chematic-smiles` — OpenSMILES parser, writer, and canonical SMILES generator.
3//!
4//! # Quick start
5//! ```rust
6//! use chematic_smiles::{parse, write, canonical_smiles};
7//!
8//! let mol = parse("c1ccccc1").unwrap(); // benzene
9//! assert_eq!(mol.atom_count(), 6);
10//! assert_eq!(mol.bond_count(), 6);
11//!
12//! // Non-canonical write (DFS order).
13//! let smiles = write(&mol);
14//! let mol2 = parse(&smiles).unwrap();
15//! assert_eq!(mol.atom_count(), mol2.atom_count());
16//!
17//! // Canonical SMILES (stable, unique).
18//! let c1 = canonical_smiles(&mol);
19//! let c2 = canonical_smiles(&parse("C1=CC=CC=C1").unwrap()); // Kekule benzene
20//! // c1 and c2 differ because aromaticity differs, but both are stable.
21//! assert_eq!(c1, canonical_smiles(&parse(&c1).unwrap()));
22//! ```
23//!
24//! # Design
25//! - Pure Rust: no C/C++ FFI, no unsafe.
26//! - Single-pass recursive-descent parser; no separate lexer phase.
27//! - WASM-compatible (no filesystem I/O, no threads).
28
29pub mod canonical;
30pub mod error;
31pub mod parser;
32pub mod writer;
33
34pub use canonical::canonical_smiles;
35pub use error::SmilesError;
36pub use parser::parse;
37pub use writer::write;