zantetsu_vecdb/lib.rs
1//! # Zantetsu VecDB
2//!
3//! Canonical title matching for parsed anime names.
4//!
5//! The current implementation supports two backends:
6//! - A local Kitsu SQL dump (`latest.sql` or `latest.sql.gz`)
7//! - A remote GraphQL endpoint compatible with the expected anime search schema
8//!
9//! Crates:
10//! - [`zantetsu`](https://docs.rs/zantetsu) - unified API surface
11//! - [`zantetsu-core`](https://docs.rs/zantetsu-core) - parsing engine
12//! - [`zantetsu-vecdb`](https://docs.rs/zantetsu-vecdb) - canonical title matching
13//!
14//! ## Examples
15//!
16//! Use a local Kitsu dump:
17//!
18//! ```rust,no_run
19//! use zantetsu_vecdb::{MatchSource, TitleMatcher};
20//!
21//! let matcher = TitleMatcher::new(
22//! MatchSource::kitsu_dump("/home/user/.local/share/zantetsu/kitsu-dumps"),
23//! )
24//! .unwrap();
25//!
26//! let best = matcher.match_title("Sousou no Frieren").unwrap();
27//! assert!(best.is_some());
28//! ```
29//!
30//! Use a remote GraphQL endpoint:
31//!
32//! ```rust,no_run
33//! use zantetsu_vecdb::{MatchSource, TitleMatcher};
34//!
35//! let matcher = TitleMatcher::new(
36//! MatchSource::remote_endpoint("https://graphql.anilist.co"),
37//! )
38//! .unwrap();
39//!
40//! let best = matcher.match_title("Spy x Family").unwrap();
41//! assert!(best.is_some());
42//! ```
43
44pub mod error;
45mod matcher;
46
47pub use error::{MatchResult, MatcherError};
48pub use matcher::{
49 AnimeIds, AnimeTitleMatch, MatchProvider, MatchSource, TitleMatcher, default_kitsu_dump_dir,
50};