#![cfg(all(feature = "parse", feature = "display"))] #[derive(Copy, Clone)] pub struct Encoder; impl toml_test_harness::Encoder for Encoder { fn name(&self) -> &str { "toml" } fn encode(&self, data: toml_test_harness::Decoded) -> Result { let value = from_decoded(&data)?; let toml::Value::Table(document) = value else { return Err(toml_test_harness::Error::new("no root table")); }; let s = toml::to_string(&document).map_err(toml_test_harness::Error::new)?; Ok(s) } } fn from_decoded( decoded: &toml_test_harness::Decoded, ) -> Result { let value = match decoded { toml_test_harness::Decoded::Value(value) => from_decoded_value(value)?, toml_test_harness::Decoded::Table(value) => toml::Value::Table(from_table(value)?), toml_test_harness::Decoded::Array(value) => toml::Value::Array(from_array(value)?), }; Ok(value) } fn from_decoded_value( decoded: &toml_test_harness::DecodedValue, ) -> Result { match decoded { toml_test_harness::DecodedValue::String(value) => Ok(toml::Value::String(value.clone())), toml_test_harness::DecodedValue::Integer(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Integer), toml_test_harness::DecodedValue::Float(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Float), toml_test_harness::DecodedValue::Bool(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Boolean), toml_test_harness::DecodedValue::Datetime(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Datetime), toml_test_harness::DecodedValue::DatetimeLocal(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Datetime), toml_test_harness::DecodedValue::DateLocal(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Datetime), toml_test_harness::DecodedValue::TimeLocal(value) => value .parse::() .map_err(toml_test_harness::Error::new) .map(toml::Value::Datetime), } } fn from_table( decoded: &std::collections::HashMap, ) -> Result { decoded .iter() .map(|(k, v)| { let v = from_decoded(v)?; Ok((k.to_owned(), v)) }) .collect() } fn from_array( decoded: &[toml_test_harness::Decoded], ) -> Result { decoded.iter().map(from_decoded).collect() }