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}