diff --git a/Cargo.lock b/Cargo.lock index 544e8dc1..7c45dc2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -120,12 +120,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -586,7 +580,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "headers-core", "http", @@ -679,7 +673,7 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", @@ -1299,7 +1293,7 @@ version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-core", "http", @@ -1327,15 +1321,17 @@ dependencies = [ [[package]] name = "ron" -version = "0.8.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +checksum = "fd490c5b18261893f14449cbd28cb9c0b637aebf161cd77900bfdedaff21ec32" dependencies = [ - "base64 0.21.7", "bitflags 2.9.4", "indexmap", + "once_cell", "serde", "serde_derive", + "typeid", + "unicode-ident", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e3d5e981..ef580638 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -140,7 +140,7 @@ toml = { version = "0.9.6", optional = true, default-features = false, features serde_json = { version = "1.0.145", optional = true } yaml-rust2 = { version = "0.10.4", optional = true } rust-ini = { version = "0.21.3", optional = true } -ron = { version = "0.8.1", optional = true } +ron = { version = "0.12.0", optional = true } json5_rs = { version = "0.4.1", optional = true, package = "json5" } corn = { version = "0.10.0", optional = true, package = "libcorn" } indexmap = { version = "2.11.4", features = ["serde"], optional = true } diff --git a/src/file/format/ron.rs b/src/file/format/ron.rs index 2911a73c..7b4aeb6c 100644 --- a/src/file/format/ron.rs +++ b/src/file/format/ron.rs @@ -1,3 +1,4 @@ +use std::convert::TryInto as _; use std::error::Error; use crate::format; @@ -27,14 +28,27 @@ fn from_ron_value( ron::Value::Bool(value) => ValueKind::Boolean(value), ron::Value::Number(value) => match value { - ron::Number::Float(value) => ValueKind::Float(value.get()), - ron::Number::Integer(value) => ValueKind::I64(value), + ron::Number::F32(value) => ValueKind::Float(value.get().into()), + ron::Number::F64(value) => ValueKind::Float(value.get()), + ron::Number::I8(value) => ValueKind::I64(value.into()), + ron::Number::I16(value) => ValueKind::I64(value.into()), + ron::Number::I32(value) => ValueKind::I64(value.into()), + ron::Number::I64(value) => ValueKind::I64(value), + ron::Number::U8(value) => ValueKind::I64(value.into()), + ron::Number::U16(value) => ValueKind::I64(value.into()), + ron::Number::U32(value) => ValueKind::I64(value.into()), + ron::Number::U64(value) => ValueKind::I64(value.try_into()?), + _ => Err(crate::ConfigError::Message( + "unsupported numeric type".to_owned(), + ))?, }, ron::Value::Char(value) => ValueKind::String(value.to_string()), ron::Value::String(value) => ValueKind::String(value), + ron::Value::Bytes(_) => Err(crate::ConfigError::Message("unsupported bytes".to_owned()))?, + ron::Value::Seq(values) => { let array = values .into_iter() diff --git a/tests/testsuite/file_ron.rs b/tests/testsuite/file_ron.rs index d0e58686..e6376f40 100644 --- a/tests/testsuite/file_ron.rs +++ b/tests/testsuite/file_ron.rs @@ -115,7 +115,10 @@ fn test_error_parse() { .build(); assert!(res.is_err()); - assert_data_eq!(res.unwrap_err().to_string(), str!["5:1: Expected colon"]); + assert_data_eq!( + res.unwrap_err().to_string(), + str!["4:8-5:1: Expected colon"] + ); } #[test]