use std::fmt;

pub type Field = (String, String);

pub fn field(key: &str, value: impl fmt::Display) -> Field {
    (key.to_owned(), value.to_string())
}

pub fn prefixed(prefix: &str, fields: Vec<Field>) -> Vec<Field> {
    fields
        .into_iter()
        .map(|(key, value)| (format!("{prefix} {key}"), value))
        .collect()
}

pub fn write_fields(f: &mut fmt::Formatter<'_>, fields: &[Field]) -> fmt::Result {
    for (index, (key, value)) in fields.iter().enumerate() {
        if index > 0 {
            f.write_str("\n")?;
        }

        write!(f, "{key}: {value}")?;
    }

    Ok(())
}