feat(common): persist configuration as TOML, migrate legacy config.ini

- save() writes <config>/config.toml (atomic temp+rename), flat keys
  at the top level and group/sub keys as [group] tables, values as
  native TOML int/float/bool/string (non-finite doubles degrade to
  strings and restore via the declared type)
- load() prefers config.toml; a legacy config.ini (C++ or pre-TOML
  Rust builds) is read once and immediately re-persisted as TOML; the
  INI file is left in place; a corrupt TOML is reported, never
  silently discarded
- cd.yml: drop a stale oakengine comment (the crate is retired)
This commit is contained in:
2026-08-20 22:28:58 +08:00
parent c5455c7521
commit 12ffce77db
4 changed files with 415 additions and 118 deletions
Generated
+21
View File
@@ -4754,6 +4754,7 @@ dependencies = [
"oaktask",
"oaktimeline",
"oakundo",
"serde_yaml",
"smallvec",
]
@@ -4818,6 +4819,7 @@ dependencies = [
"ocio-rs",
"quick-xml 0.41.0",
"thiserror 2.0.20",
"toml 0.8.23",
]
[[package]]
@@ -6770,6 +6772,19 @@ dependencies = [
"serde_core",
]
[[package]]
name = "serde_yaml"
version = "0.9.34+deprecated"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
dependencies = [
"indexmap",
"itoa",
"ryu",
"serde",
"unsafe-libyaml",
]
[[package]]
name = "sha1"
version = "0.11.0"
@@ -7991,6 +8006,12 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "unsafe-libyaml"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
[[package]]
name = "url"
version = "2.5.8"