source2rosetta/src/lib.rs
Kamal Tufekcic c458b4cb50
All checks were successful
CI / lint (push) Successful in 17s
CI / fuzz (push) Successful in 1m52s
CI / test (push) Successful in 24s
read what the binary says about itself: names, signatures, prototypes; gen v2
2026-07-29 20:09:21 +03:00

51 lines
2.6 KiB
Rust

//! source2rosetta — library crate: the reusable derivation/verification engine behind the CLI.
//!
//! The `source2rosetta` binary (`src/main.rs`) is a thin clap front-end over these modules. Keeping the
//! logic in a library lets the CI pipeline (and tests) link and call it directly instead of shelling
//! out and scraping stdout.
//!
//! # Supported API surface
//! A fork or embedder calls into these. Every engine entry point takes an explicit `&profile::GameProfile`
//! (there is NO process-global — CS2 and Dota can be derived in the same process):
//! - [`pipeline`] — the pure OFFLINE derivation engine (nothing here attaches to a running server):
//! `corpus_model_cmd` (distill the corpus model), `fold_model_cmd` (roll model N → N+1), `backfill_cmd`
//! (cross-build name/offset timelines), plus the `ClassScope` / `CorpusSource` inputs.
//! - [`produce`] — CI orchestration + the LIVE half (everything that drives a running server): `produce_cmd`
//! (the whole per-game build — boots its own bots server for validate-live + typed netvars when a game is
//! given), `integration_test_cmd` (the standalone live oracle), `classify_change_cmd` / `filter_corpus_cmd`
//! (the CI branch primitives), `unpack_seed`.
//! - [`profile`] — the per-game knobs: [`profile::GameProfile`] plus the `CS2` / `DOTA` consts. Adding a game is a const here.
//! - [`model`] / [`render`] (re-exported from `source2rosetta-core`) — the canonical derived-gamedata model and its
//! format emitters; the standalone `source2rosetta-gen` binary links just `core`.
//!
//! # Low-level engine (implementation detail)
//! The modules below are the building blocks the API composes (ELF/RTTI/SchemaSystem readers, the fingerprint
//! metric, the sig/abi machinery, the data-parallel primitive, the name taxonomy). They stay `pub` for the fuzz
//! harness and advanced embedders, but carry NO stability promise — treat them as internal.
// ---- supported API ----
pub mod pipeline;
pub mod produce;
pub mod profile;
// ---- low-level engine (implementation detail; `pub` only for the fuzz harness, not a stable surface) ----
pub mod abi;
pub mod concmd;
pub mod elf;
pub mod emit;
pub mod fingerprint;
pub mod live;
pub mod locate;
pub mod par;
pub mod prototypes;
pub mod pulse;
pub mod rtti;
pub mod schema;
pub mod sig;
pub mod taxonomy;
pub mod valvetab;
pub mod xref;
// The canonical model + emitters live in the deriver-free `source2rosetta-core` crate; re-export them so
// existing `source2rosetta::{model, render}` paths keep resolving.
pub use source2rosetta_core::{model, render};