use qfe::{setup_qfe_pair, QfeError}; use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> { println!("--- QFE 'Hello, world!' Example ---");
println!("\n[1] Initializing Frames and establishing SQS...");
let (frame_a, mut frame_b) = match setup_qfe_pair(
"Frame_A".to_string(), 20250330, "Frame_B".to_string(), 115702, ) {
Ok(pair) => {
println!(" Frames A & B initialized and SQS established successfully.");
pair
}
Err(e) => {
eprintln!(" Error setting up QFE pair: {}", e);
return Err(Box::new(e)); }
};
println!(" Frame A Valid: {}", frame_a.is_valid());
let original_message = "Hello, world!";
println!("\n[2] Original Message: '{}'", original_message);
println!("\n[3] Frame A encoding message...");
let encoded_signal = match frame_a.encode_str(original_message) {
Ok(signal) => {
println!(" Encoding successful. Signal length: {}", signal.len());
if !signal.is_empty() {
println!(" First Encoded Unit Hash: {:?}", signal[0].integrity_hash);
}
signal
}
Err(e) => {
eprintln!(" Error during encoding: {}", e);
return Err(Box::new(e));
}
};
println!("\n[4] Frame B decoding signal...");
let decoded_message = match frame_b.decode_to_str(&encoded_signal) {
Ok(msg) => {
println!(" Decoding successful.");
msg
}
Err(e) => {
eprintln!(" Error during decoding: {}", e);
println!(" Frame B Valid after failed decode attempt: {}", frame_b.is_valid());
return Err(Box::new(e));
}
};
println!(" Decoded Message: '{}'", decoded_message);
println!("\n[5] Verifying result...");
assert_eq!(original_message, decoded_message, "Mismatch between original and decoded message!");
println!(" Success! Decoded message matches original.");
println!(" Frame B Valid after successful decode: {}", frame_b.is_valid());
println!("\n[6] Tamper Detection Demo...");
let mut tampered_signal = encoded_signal.clone();
if !tampered_signal.is_empty() {
println!(" Tampering with integrity hash of first signal unit...");
tampered_signal[0].integrity_hash[0] ^= 0x01; }
println!(" Frame B attempting to decode tampered signal...");
match frame_b.decode_to_str(&tampered_signal) {
Ok(msg) => {
eprintln!(" ERROR: Decoding tampered signal succeeded unexpectedly! Decoded: '{}'", msg);
return Err("Tamper detection failed!".into()); }
Err(e) => {
println!(" Successfully detected tampering!");
println!(" Decode error reported: {}", e);
match e {
QfeError::DecodingFailed(_) => println!(" Error type is correctly DecodingFailed."),
_ => eprintln!(" WARNING: Incorrect error type reported for tamper detection: {:?}", e),
}
assert!(!frame_b.is_valid(), "Frame B should be marked invalid after detecting tampering");
println!(" Frame B validation status correctly set to: {}", frame_b.is_valid());
}
}
println!("\n--- QFE Example Complete ---");
Ok(())
}