use crate::e2e::escape::escape_elixir;
pub(super) fn elixir_module_name(category: &str) -> String {
use heck::ToUpperCamelCase;
category.to_upper_camel_case()
}
pub(super) fn json_to_elixir(value: &serde_json::Value) -> String {
match value {
serde_json::Value::String(s) => format!("\"{}\"", escape_elixir(s)),
serde_json::Value::Bool(true) => "true".to_string(),
serde_json::Value::Bool(false) => "false".to_string(),
serde_json::Value::Number(n) => {
let s = n.to_string().replace("e+", "e");
if s.contains('e') && !s.contains('.') {
s.replacen('e', ".0e", 1)
} else {
s
}
}
serde_json::Value::Null => "nil".to_string(),
serde_json::Value::Array(arr) => {
let items: Vec<String> = arr.iter().map(json_to_elixir).collect();
format!("[{}]", items.join(", "))
}
serde_json::Value::Object(map) => {
let entries: Vec<String> = map
.iter()
.map(|(k, v)| format!("\"{}\" => {}", escape_elixir(k), json_to_elixir(v)))
.collect();
format!("%{{{}}}", entries.join(", "))
}
}
}