use crate::{
duration::display_duration_seconds, nns::render::yes_no, sns::report::SnsNeuronPermissionList,
token_amount::e8s_decimal_text,
};
pub(in crate::sns::report::text) fn optional_text(value: Option<&String>) -> &str {
value.map_or("-", String::as_str)
}
pub(in crate::sns::report::text) fn optional_e8s_text(value: Option<u64>) -> String {
value.map_or_else(|| "-".to_string(), e8s_decimal_text)
}
pub(in crate::sns::report) fn optional_e8s_decimal_text(value: Option<u64>) -> String {
value.map_or_else(|| "-".to_string(), e8s_decimal_text)
}
pub(in crate::sns::report::text) fn optional_duration_text(value: Option<u64>) -> String {
value.map_or_else(|| "-".to_string(), display_duration_seconds)
}
pub(in crate::sns::report::text) fn optional_percentage_text(value: Option<u64>) -> String {
value.map_or_else(|| "-".to_string(), |value| format!("{value}%"))
}
pub(in crate::sns::report::text) fn optional_basis_points_text(value: Option<u64>) -> String {
value.map_or_else(|| "-".to_string(), basis_points_text)
}
pub(in crate::sns::report::text) fn optional_u64_text(value: Option<u64>) -> String {
value.map_or_else(|| "-".to_string(), |value| value.to_string())
}
pub(in crate::sns::report::text) fn optional_u32_text(value: Option<u32>) -> String {
value.map_or_else(|| "-".to_string(), |value| value.to_string())
}
pub(in crate::sns::report::text) fn optional_bool_text(value: Option<bool>) -> String {
value.map_or_else(|| "-".to_string(), |value| yes_no(value).to_string())
}
pub(in crate::sns::report::text) fn optional_permissions_text(
value: Option<&SnsNeuronPermissionList>,
) -> String {
value.map_or_else(
|| "-".to_string(),
|permissions| {
permissions
.permissions
.iter()
.map(i32::to_string)
.collect::<Vec<_>>()
.join(",")
},
)
}
fn basis_points_text(value: u64) -> String {
let whole = value / 100;
let fractional = value % 100;
format!("{whole}.{fractional:02}%")
}