use std::fmt::Write as _;
pub fn py_bool(b: bool) -> String {
if b { "True" } else { "False" }.to_string()
}
pub fn dataclass_str(type_name: &str, fields: &[(&str, String)]) -> String {
let mut out = String::new();
let _ = writeln!(out, "<{type_name}>");
for (key, value) in fields {
if value.contains('\n') {
let _ = writeln!(out, "{key}:");
for line in value.lines() {
let _ = writeln!(out, " {line}");
}
} else {
let _ = writeln!(out, "{key}: {value}");
}
}
out
}
pub fn dataclass_repr(type_name: &str, fields: &[(&str, String)]) -> String {
let mut out = String::new();
let _ = write!(out, "{type_name}(");
for (i, (key, value)) in fields.iter().enumerate() {
if i > 0 {
let _ = write!(out, ", ");
}
let _ = write!(out, "{key}={value}");
}
let _ = write!(out, ")");
out
}
pub fn dataclass_html_repr(type_name: &str, fields: &[(&str, String)]) -> String {
let mut out = String::new();
let _ = writeln!(
out,
"<div class=\"icechunk-repr\">\n <code><{type_name}></code>",
);
for (key, value) in fields {
if value.contains('\n') {
let _ = writeln!(
out,
" <div class=\"field\">\n <details>\n <summary><strong>{key}</strong></summary>",
);
let _ = writeln!(out, " <pre><code>");
for line in value.lines() {
let escaped = line.replace('<', "<").replace('>', ">");
let _ = writeln!(out, "{escaped}");
}
let _ = writeln!(out, " </code></pre>\n </details>\n </div>");
} else {
let escaped = value.replace('<', "<").replace('>', ">");
let _ = writeln!(
out,
" <div class=\"field\"><strong>{key}</strong>: <code>{escaped}</code></div>",
);
}
}
let _ = writeln!(out, "</div>");
out
}