use fsrs::{FSRS, FSRSItem, FSRSReview};
fn migrate_with_full_history() -> Result<(), Box<dyn std::error::Error>> {
let fsrs = FSRS::new(Some(&[]))?;
let reviews = vec![
FSRSReview {
rating: 3,
delta_t: 0,
},
FSRSReview {
rating: 3,
delta_t: 1,
},
FSRSReview {
rating: 4,
delta_t: 3,
},
FSRSReview {
rating: 3,
delta_t: 7,
},
];
let item = FSRSItem { reviews };
let memory_state = fsrs.memory_state(item, None)?;
println!("Migrated memory state: {:?}", memory_state);
Ok(())
}
fn migrate_with_partial_history() -> Result<(), Box<dyn std::error::Error>> {
let fsrs = FSRS::new(Some(&[]))?;
let sm2_retention = 0.9;
let ease_factor = 2.0;
let interval = 5.0;
let initial_state = fsrs.memory_state_from_sm2(ease_factor, interval, sm2_retention)?;
let reviews = vec![
FSRSReview {
rating: 3,
delta_t: 5,
},
FSRSReview {
rating: 4,
delta_t: 10,
},
FSRSReview {
rating: 3,
delta_t: 20,
},
];
let item = FSRSItem { reviews };
let memory_state = fsrs.memory_state(item, Some(initial_state))?;
println!("Migrated memory state: {:?}", memory_state);
Ok(())
}
fn migrate_with_latest_state() -> Result<(), Box<dyn std::error::Error>> {
let fsrs = FSRS::new(Some(&[]))?;
let sm2_retention = 0.9;
let ease_factor = 2.5;
let interval = 10.0;
let memory_state = fsrs.memory_state_from_sm2(ease_factor, interval, sm2_retention)?;
println!("Migrated memory state: {:?}", memory_state);
Ok(())
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Migrating with full history:");
migrate_with_full_history()?;
println!("\nMigrating with partial history:");
migrate_with_partial_history()?;
println!("\nMigrating with latest state only:");
migrate_with_latest_state()?;
Ok(())
}