#[cfg(feature = "no_std")]
use alloc::{format, string::String};
pub fn variable_not_found(name: &str) -> String {
format!("Variable `{}` not found", name)
}
pub fn function_not_found(name: &str) -> String {
format!("Function `{}` not found", name)
}
pub fn struct_has_no_field(type_name: &str, field: &str) -> String {
format!("Struct `{}` has no field `{}`", type_name, field)
}
pub fn variant_has_no_field(type_name: &str, variant: &str, field: &str) -> String {
format!(
"Variant `{}::{}` has no field `{}`",
type_name, variant, field
)
}
pub fn struct_not_declared(type_name: &str) -> String {
format!("Struct `{}` is not declared", type_name)
}
pub fn enum_not_declared(type_name: &str) -> String {
format!("Enum `{}` is not declared", type_name)
}
pub fn enum_has_no_variant(type_name: &str, variant: &str) -> String {
format!("Enum `{}` has no variant `{}`", type_name, variant)
}
pub fn cant_read_field(field: &str, kind: &str) -> String {
format!("Can't read field `{}` on {}", field, kind)
}
pub fn cant_assign_field(field: &str, kind: &str) -> String {
format!("Can't assign to field `{}` on {}", field, kind)
}
pub fn cant_call_a(kind: &str) -> String {
format!("Can't call a {}", kind)
}
pub fn cant_iterate_over(kind: &str) -> String {
format!("Can't iterate over {}", kind)
}
pub fn no_such_method(kind: &str, method: &str) -> String {
format!("{} doesn't have a .{}() method", kind, method)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn variable_not_found_format() {
assert_eq!(variable_not_found("x"), "Variable `x` not found");
}
#[test]
fn struct_has_no_field_matches_legacy_format() {
assert_eq!(
struct_has_no_field("Point", "z"),
"Struct `Point` has no field `z`"
);
}
#[test]
fn variant_has_no_field_uses_double_colon() {
assert_eq!(
variant_has_no_field("Shape", "Rect", "r"),
"Variant `Shape::Rect` has no field `r`"
);
}
#[test]
fn cant_read_field_formats_without_backticks_around_kind() {
assert_eq!(
cant_read_field("x", "array"),
"Can't read field `x` on array"
);
}
}