use std::fs;
use std::io;
use std::path::{Path, PathBuf};
use std::time::{Duration, Instant};
use crate::spec::types::MutationClass;
use super::mutation_cargo::{assert_source_matches_original, run_cargo_test};
pub use super::probe::{canary_plus_to_minus, mutation_probe};
use super::{MutationApplyError};
pub trait AppliedMutation: Send + Sync {
fn id(&self) -> &str;
fn description(&self) -> &str;
fn class(&self) -> MutationClass;
fn apply(&self, source: &str) -> Result<String, MutationApplyError>;
fn hint(&self) -> String {
format!(
"test passed when I applied `{}`. Add an assertion that distinguishes the \
original from the mutated behaviour.",
self.description()
)
}
}