Educational Message Registry
The message registry system provides organized, mappable, hashable educational content separated from code logic. Instead of hardcoding explanatory text throughout the codebase, MathHook maintains a centralized registry of educational messages that can be customized, internationalized, and adapted for different audiences.
Code Examples
Basic Message Usage
Create and use educational messages with template substitution
let intro = MessageBuilder::new(
MessageCategory::LinearEquation,
MessageType::Introduction,
0 // variant
)
.with_substitution("equation", "2x + 3 = 7")
.with_substitution("variable", "x")
.build()
.unwrap();
println!("{}", intro.description);
// Output: "We have a linear equation in the form ax + b = c. To solve for x, we'll isolate the variable."
Calculus Message with Power Rule
Generate educational message for derivative explanation
let derivative_msg = MessageBuilder::new(
MessageCategory::Calculus,
MessageType::DerivativePowerRule,
0
)
.with_substitution("expression", "x^3")
.with_substitution("exponent", "3")
.with_substitution("result", "3x^2")
.build()
.unwrap();
println!("{}", derivative_msg.description);
// Output: "Apply the power rule: d/dx(x^3) = 3ยทx^(3-1) = 3x^2"
Multiple Variants for Different Audiences
Use different message variants for beginner, intermediate, and advanced students
// Variant 0: Formal mathematical language
let formal = MessageBuilder::new(
MessageCategory::LinearEquation,
MessageType::Strategy,
0 // variant 0
)
.build()
.unwrap();
// Variant 1: Conversational tone
let casual = MessageBuilder::new(
MessageCategory::LinearEquation,
MessageType::Strategy,
1 // variant 1
)
.build()
.unwrap();
// Variant 2: Step-by-step procedural
let procedural = MessageBuilder::new(
MessageCategory::LinearEquation,
MessageType::Strategy,
2 // variant 2
)
.build()
.unwrap();
Generating Educational Step Sequences
Generate complete explanation sequences using message registry
// Generate complete explanation sequence
let steps = EducationalMessageGenerator::linear_equation_steps(
"2x + 3 = 7", // equation
"x", // variable
"2" // solution
);
for step in &steps {
println!("{}", step.description);
}