Skip to main content

argumentation_schemes/catalog/
mod.rs

1//! The built-in scheme catalog. Each submodule exports `pub fn all() -> Vec<SchemeSpec>`
2//! plus individual `pub fn <scheme_name>() -> SchemeSpec` constructors.
3//! [`default_catalog`] collects all of them into a [`CatalogRegistry`].
4//!
5//! ## ID assignment
6//!
7//! Each category has a 100-element ID range starting at the corresponding
8//! `*_ID_OFFSET` constant. Within a category, IDs are assigned sequentially
9//! from the offset. This prevents cross-category collisions without a
10//! central ID registry. The `catalog_coverage::scheme_ids_are_unique` test
11//! enforces this at runtime.
12
13pub mod analogy;
14pub mod causal;
15pub mod epistemic;
16pub mod popular;
17pub mod practical;
18pub mod source;
19
20use crate::registry::CatalogRegistry;
21
22/// First epistemic-scheme ID. Range: 1..100.
23pub const EPISTEMIC_ID_OFFSET: u32 = 1;
24/// First practical-scheme ID. Range: 100..200.
25pub const PRACTICAL_ID_OFFSET: u32 = 100;
26/// First source-based-scheme ID. Range: 200..300.
27pub const SOURCE_ID_OFFSET: u32 = 200;
28/// First popular-scheme ID. Range: 300..400.
29pub const POPULAR_ID_OFFSET: u32 = 300;
30/// First causal-scheme ID. Range: 400..500.
31pub const CAUSAL_ID_OFFSET: u32 = 400;
32/// First analogical-scheme ID. Range: 500..600.
33pub const ANALOGICAL_ID_OFFSET: u32 = 500;
34
35/// Build the default catalog containing all built-in schemes.
36pub fn default_catalog() -> CatalogRegistry {
37    let mut reg = CatalogRegistry::new();
38    for scheme in epistemic::all() {
39        reg.register(scheme);
40    }
41    for scheme in practical::all() {
42        reg.register(scheme);
43    }
44    for scheme in source::all() {
45        reg.register(scheme);
46    }
47    for scheme in popular::all() {
48        reg.register(scheme);
49    }
50    for scheme in causal::all() {
51        reg.register(scheme);
52    }
53    for scheme in analogy::all() {
54        reg.register(scheme);
55    }
56    reg
57}