///|
pub fn serialize_field_snapshot(field : Field1D) -> String {
  field_to_csv(field)
}

///|
pub fn serialize_particles_snapshot(particles : ArrayView[Particle]) -> String {
  particles_to_csv(particles)
}

///|
pub fn serialize_scalar_series(
  name : String,
  values : ArrayView[Double],
) -> String {
  let output = StringBuilder()
  output.write_string("index,\{name}\n")
  for i in 0.. String {
  let output = StringBuilder()
  output.write_string("index,\{name}_x,\{name}_y,\{name}_z\n")
  for i in 0.. String {
  let output = StringBuilder()
  output.write_string("x,\{name}\n")
  for i in 0.. String {
  pipeline_to_csv(result)
}

///|
pub fn serialize_benchmark(suite : BenchmarkSuite) -> String {
  benchmark_suite_to_csv(suite)
}

///|
pub fn serialize_summary(name : String, values : ArrayView[Double]) -> String {
  summary_to_csv(summarize_series(name, values))
}

///|
pub fn serialize_shape_weights(weights : ShapeWeights) -> String {
  let output = StringBuilder()
  output.write_string("index,weight\n")
  for item in weights.contributions {
    output.write_string("\{item.index},\{item.weight}\n")
  }
  output.to_string()
}

///|
pub fn serialize_vlasov(state : VlasovState) -> String {
  vlasov_snapshot_to_csv(state)
}

///|
pub fn serialize_config(config : ExperimentConfig) -> String {
  "name,steps,dt,cells,length\n\{config.name},\{config.steps},\{config.dt},\{config.grid.cells},\{config.grid.length}\n"
}

///|
pub fn serialize_validation(report : ValidationReport) -> String {
  let output = StringBuilder()
  output.write_string("valid,code,message,value\n")
  if report.issues.length() == 0 {
    output.write_string("\{report.valid},,,\n")
  } else {
    for issue in report.issues {
      output.write_string(
        "\{report.valid},\{issue.code},\{issue.message},\{issue.value}\n",
      )
    }
  }
  output.to_string()
}

///|
pub fn csv_escape(value : String) -> String {
  value
}

///|
pub fn serialize_named_values(
  names : ArrayView[String],
  values : ArrayView[Double],
) -> String {
  let output = StringBuilder()
  output.write_string("name,value\n")
  let count = if names.length() < values.length() {
    names.length()
  } else {
    values.length()
  }
  for i in 0..