use alloc::format;
use alloc::string::{String, ToString};
use super::{Container, CriticalityOf, Protocol, name, object_set};
use crate::{Error, ErrorIe};
pub fn ie_name<P: Protocol>(id: u16) -> String {
match name::<P>(id) {
Some(name) => name.to_string(),
None => format!("IE {id}"),
}
}
#[doc(hidden)]
pub fn __wrong_message<P: Protocol>(expected: &str, direction: &str, code: u8) -> Error {
let held = object_set::<P>(direction, code).map(|set| set.name);
Error::wrong_message(expected, held, direction, code)
}
#[doc(hidden)]
pub fn __missing_ie<'a, M: Container<'a>>(id: u16, field: &str) -> Error {
let error = Error::missing_ie(M::NAME, &ie_name::<M::Protocol>(id), field);
match M::__assigned(id) {
Some(assigned) => error.about_ie(ErrorIe::new(id, assigned, None)),
None => error,
}
}
#[doc(hidden)]
pub fn __undecodable_ie<P: Protocol>(
error: Error,
message: &str,
id: u16,
criticality: CriticalityOf<P>,
position: usize,
) -> Error {
let about = ErrorIe::new(id, criticality.into(), Some(position));
error
.undecodable_ie(message, &ie_name::<P>(id))
.about_ie(about)
}