use crate::manifest::{ContractManifest, ManifestPermission};
pub(in super::super) fn extract_contract_name(
manifest: Option<&ContractManifest>,
sanitizer: fn(&str) -> String,
) -> String {
manifest
.and_then(|m| {
let trimmed = m.name.trim();
if trimmed.is_empty() {
None
} else {
Some(trimmed)
}
})
.map(sanitizer)
.filter(|name| !name.is_empty())
.unwrap_or_else(|| "NeoContract".to_string())
}
pub(in super::super) fn format_permission_entry(permission: &ManifestPermission) -> String {
format!(
"contract={} methods={}",
permission.contract.describe(),
permission.methods.describe()
)
}
pub(in super::super) fn render_extra_scalar(value: &serde_json::Value) -> Option<String> {
match value {
serde_json::Value::String(s) => Some(s.clone()),
serde_json::Value::Bool(b) => Some(b.to_string()),
serde_json::Value::Number(n) => Some(n.to_string()),
_ => None,
}
}