use radio_code_calculator::{
RadioCodeCalculator, RadioCodeCalculatorError, RadioErrors, RadioModels,
};
#[tokio::main]
async fn main() {
let my_radio_code_calculator =
RadioCodeCalculator::new(Some("ABCD-ABCD-ABCD-ABCD".to_string()));
let serial = "123456";
let extra = "";
let radio_model = &*RadioModels::FORD_M_SERIES;
println!(
"Radio model {} expects a serial number of {} length and {} regex pattern<br>",
radio_model.name,
radio_model.serial_max_len,
radio_model.serial_regex_pattern()
);
if radio_model.extra_max_len > 0 {
println!(
"Additionally an extra field is required with {} and {:?} regex pattern<br>",
radio_model.extra_max_len,
radio_model.extra_regex_pattern()
);
}
let error = radio_model.validate(serial, Some(extra));
if error != RadioErrors::SUCCESS {
if error == RadioErrors::INVALID_SERIAL_LENGTH {
println!(
"Invalid serial number length (expected {} characters<br>",
radio_model.serial_max_len
);
} else if error == RadioErrors::INVALID_SERIAL_PATTERN {
println!(
"Invalid serial number regular expression pattern (expected {} regex pattern)<br>",
radio_model.serial_regex_pattern()
);
} else if error == RadioErrors::INVALID_SERIAL_NOT_SUPPORTED {
println!("This serial number is not supported");
} else if error == RadioErrors::INVALID_EXTRA_LENGTH {
println!(
"Invalid extra data length (expected {} characters)<br>",
radio_model.extra_max_len
);
} else if error == RadioErrors::INVALID_EXTRA_PATTERN {
println!(
"Invalid extra data regular expression pattern (expected {:?} regex pattern)<br>",
radio_model.extra_regex_pattern()
);
}
std::process::exit(1);
}
match my_radio_code_calculator
.calc(radio_model, serial, extra)
.await
{
Ok(result) => println!("Radio code is {}", result["code"]),
Err(e) => match e {
RadioCodeCalculatorError::ApiError(ref v) => match v["error"].as_i64().unwrap_or(-1) as i32 {
RadioErrors::INVALID_RADIO_MODEL => {
println!("Invalid radio model (not supported)");
}
RadioErrors::INVALID_SERIAL_LENGTH => println!(
"Invalid serial number length (expected {} characters)",
v["serialMaxLen"]
),
RadioErrors::INVALID_SERIAL_PATTERN => println!(
"Invalid serial number regular expression pattern (expected {} regex pattern)",
v["serialRegexPattern"]["php"]
),
RadioErrors::INVALID_SERIAL_NOT_SUPPORTED => {
println!("This serial number is not supported");
}
RadioErrors::INVALID_EXTRA_LENGTH => println!(
"Invalid extra data length (expected {} characters)",
v["extraMaxLen"]
),
RadioErrors::INVALID_EXTRA_PATTERN => println!(
"Invalid extra data regular expression pattern (expected {} regex pattern)",
v["extraRegexPattern"]["php"]
),
RadioErrors::INVALID_INPUT => println!("Invalid input data"),
RadioErrors::INVALID_COMMAND => {
println!("Invalid command sent to the Web API interface");
}
RadioErrors::INVALID_LICENSE => println!("Invalid license key!"),
_ => println!("Something unexpected happen while trying to login to the service (error code {v:?})."),
},
RadioCodeCalculatorError::InvalidLicense => println!("Invalid license key!"),
RadioCodeCalculatorError::Transport(msg) => println!("Connection error: {msg}"),
},
}
}