mirror of
https://codeberg.org/icewind/vdf-reader.git
synced 2026-06-03 10:04:08 +02:00
serde
This commit is contained in:
parent
26c9b82b8e
commit
1f0a53d241
14 changed files with 1219 additions and 100 deletions
|
|
@ -1,5 +1,3 @@
|
|||
"#base" "panelBase.res"
|
||||
|
||||
"Resource/specificPanel.res"
|
||||
{
|
||||
// Specify panel-specific controls here
|
||||
|
|
|
|||
158
tests/serde.rs
Normal file
158
tests/serde.rs
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::{BTreeMap, HashMap};
|
||||
use std::fs::read_to_string;
|
||||
use test_case::test_case;
|
||||
use vdf_reader::from_str;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
enum Expected {
|
||||
LightmappedGeneric {
|
||||
#[serde(rename = "$baseTexture")]
|
||||
base_texture: String,
|
||||
#[serde(rename = "$bumpmap")]
|
||||
bumpmap: String,
|
||||
#[serde(rename = "$ssbump")]
|
||||
ssbump: bool,
|
||||
#[serde(rename = "%keywords")]
|
||||
keywords: String,
|
||||
#[serde(rename = "$detail")]
|
||||
detail: String,
|
||||
#[serde(rename = "$detailscale")]
|
||||
detailscale: f32,
|
||||
#[serde(rename = "$detailblendmode")]
|
||||
detailblendmode: i32,
|
||||
#[serde(rename = "$detailblendfactor")]
|
||||
detailblendfactor: f32,
|
||||
},
|
||||
#[serde(rename = "Resource/specificPanel.res")]
|
||||
Messy {
|
||||
empty: (),
|
||||
array: Vec<u32>,
|
||||
windows_path: String,
|
||||
#[serde(rename = r#"\\"$translucent""#)]
|
||||
translucent: bool,
|
||||
#[serde(rename = "$envmaptint")]
|
||||
env_map_tint: f32,
|
||||
#[serde(rename = ".5")]
|
||||
spare: f32,
|
||||
},
|
||||
UserConfigData {
|
||||
#[serde(rename = "Steam")]
|
||||
steam: UserConfigDataSteam,
|
||||
#[serde(rename = "FriendsMainDialog")]
|
||||
friends_main_dialog: UserConfigDataFriendsMainDialog,
|
||||
#[serde(rename = "Servers")]
|
||||
servers: UserConfigDataServers,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataSteam {
|
||||
cached: UserConfigDataSteamCached,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataSteamCached {
|
||||
#[serde(rename = "OverlaySplash.res")]
|
||||
overlay_splash: BTreeMap<String, String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataFriendsMainDialog {
|
||||
xpos: u32,
|
||||
ypos: u32,
|
||||
wide: u16,
|
||||
tall: u16,
|
||||
#[serde(rename = "FriendPanelSelf")]
|
||||
friends_panel_self: BTreeMap<String, String>,
|
||||
#[serde(rename = "FriendsDialogSheet")]
|
||||
friends_dialog_sheet: UserConfigDataFriendsMainDialogFriendsDialogSheet,
|
||||
#[serde(rename = "FriendsState")]
|
||||
friends_state: BTreeMap<String, u8>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataFriendsMainDialogFriendsDialogSheet {
|
||||
#[serde(rename = "FriendsFriendsPage")]
|
||||
friends_friends_page: UserConfigDataFriendsMainDialogFriendsDialogSheetFriendsPage,
|
||||
#[serde(rename = "FriendsClansPage")]
|
||||
friends_clan_page: UserConfigDataFriendsMainDialogFriendsDialogSheetFriendsPage,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataFriendsMainDialogFriendsDialogSheetFriendsPage {
|
||||
#[serde(rename = "BuddyList")]
|
||||
buddy_list: BTreeMap<String, bool>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataServers {
|
||||
#[serde(rename = "DialogServerBrowser.res")]
|
||||
dialog_server_browser: UserConfigDataServersDialog,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataServersDialog {
|
||||
xpos: u32,
|
||||
ypos: u32,
|
||||
wide: u16,
|
||||
tall: u16,
|
||||
#[serde(rename = "GameTabs")]
|
||||
game_tabs: UserConfigDataServersDialogGameTabs,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct UserConfigDataServersDialogGameTabs {
|
||||
#[serde(rename = "InternetGames")]
|
||||
internet_games: GameListHaver,
|
||||
#[serde(rename = "FavoriteGames")]
|
||||
favorite_games: GameListHaver,
|
||||
#[serde(rename = "HistoryGames")]
|
||||
history_games: GameListHaver,
|
||||
#[serde(rename = "SpectateGames")]
|
||||
spectate_games: GameListHaver,
|
||||
#[serde(rename = "LanGames")]
|
||||
lan_games: GameListHaver,
|
||||
#[serde(rename = "FriendsGames")]
|
||||
friends_games: GameListHaver,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct GameListHaver {
|
||||
gamelist: GameList,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct GameList {
|
||||
#[serde(rename = "#ServerBrowser_Password_hidden")]
|
||||
server_browser_password_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Bots_hidden")]
|
||||
server_browser_bots_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Secure_hidden")]
|
||||
server_browser_secure_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Servers_hidden")]
|
||||
server_browser_servers_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_IPAddress_hidden")]
|
||||
server_browser_ip_address_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Game_hidden")]
|
||||
server_browser_game_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Players_hidden")]
|
||||
server_browser_players_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Map_hidden")]
|
||||
server_browser_map_hidden: bool,
|
||||
#[serde(rename = "#ServerBrowser_Latency_hidden")]
|
||||
server_browser_latency_hidden: bool,
|
||||
sort_column: String,
|
||||
sort_column_secondary: Option<String>,
|
||||
sort_column_asc: bool,
|
||||
sort_column_secondary_asc: bool,
|
||||
}
|
||||
|
||||
#[test_case("tests/data/concrete.vmt")]
|
||||
#[test_case("tests/data/messy.vdf")]
|
||||
#[test_case("tests/data/DialogConfigOverlay_1280x720.vdf")]
|
||||
fn test_serde(path: &str) {
|
||||
let raw = read_to_string(path).unwrap();
|
||||
let result: Expected = from_str(&raw).map_err(miette::Error::from).unwrap();
|
||||
insta::assert_ron_snapshot!(path, result);
|
||||
}
|
||||
|
|
@ -3,11 +3,10 @@ source: tests/parse.rs
|
|||
expression: parsed
|
||||
---
|
||||
Table({
|
||||
"#base": Statement(Statement("panelBase.res")),
|
||||
"Resource/specificPanel.res": Table(Table({
|
||||
"$envmaptint": Value(Value(".5")),
|
||||
".5": Value(Value(".5")),
|
||||
"\\\"$translucent\"": Value(Value("1")),
|
||||
"\\\\\"$translucent\"": Value(Value("1")),
|
||||
"array": Array(Array([
|
||||
Value(Value("1")),
|
||||
Value(Value("2")),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,152 @@
|
|||
---
|
||||
source: tests/serde.rs
|
||||
expression: result
|
||||
---
|
||||
UserConfigData(
|
||||
Steam: UserConfigDataSteam(
|
||||
cached: UserConfigDataSteamCached(
|
||||
r#OverlaySplash.res: {},
|
||||
),
|
||||
),
|
||||
FriendsMainDialog: UserConfigDataFriendsMainDialog(
|
||||
xpos: 1028,
|
||||
ypos: 280,
|
||||
wide: 252,
|
||||
tall: 440,
|
||||
FriendPanelSelf: {},
|
||||
FriendsDialogSheet: UserConfigDataFriendsMainDialogFriendsDialogSheet(
|
||||
FriendsFriendsPage: UserConfigDataFriendsMainDialogFriendsDialogSheetFriendsPage(
|
||||
BuddyList: {
|
||||
"0_collapsed": false,
|
||||
"1_collapsed": false,
|
||||
"2_collapsed": false,
|
||||
"3_collapsed": false,
|
||||
"4_collapsed": false,
|
||||
"5_collapsed": false,
|
||||
"allfriends_collapsed": false,
|
||||
},
|
||||
),
|
||||
FriendsClansPage: UserConfigDataFriendsMainDialogFriendsDialogSheetFriendsPage(
|
||||
BuddyList: {
|
||||
"0_collapsed": false,
|
||||
"1_collapsed": false,
|
||||
"2_collapsed": false,
|
||||
"3_collapsed": false,
|
||||
},
|
||||
),
|
||||
),
|
||||
FriendsState: {},
|
||||
),
|
||||
Servers: UserConfigDataServers(
|
||||
r#DialogServerBrowser.res: UserConfigDataServersDialog(
|
||||
xpos: 0,
|
||||
ypos: 0,
|
||||
wide: 1280,
|
||||
tall: 720,
|
||||
GameTabs: UserConfigDataServersDialogGameTabs(
|
||||
InternetGames: GameListHaver(
|
||||
gamelist: GameList(
|
||||
r##ServerBrowser_Password_hidden: false,
|
||||
r##ServerBrowser_Bots_hidden: true,
|
||||
r##ServerBrowser_Secure_hidden: false,
|
||||
r##ServerBrowser_Servers_hidden: false,
|
||||
r##ServerBrowser_IPAddress_hidden: true,
|
||||
r##ServerBrowser_Game_hidden: false,
|
||||
r##ServerBrowser_Players_hidden: false,
|
||||
r##ServerBrowser_Map_hidden: false,
|
||||
r##ServerBrowser_Latency_hidden: false,
|
||||
sort_column: "#ServerBrowser_Latency",
|
||||
sort_column_secondary: Some(""),
|
||||
sort_column_asc: true,
|
||||
sort_column_secondary_asc: true,
|
||||
),
|
||||
),
|
||||
FavoriteGames: GameListHaver(
|
||||
gamelist: GameList(
|
||||
r##ServerBrowser_Password_hidden: false,
|
||||
r##ServerBrowser_Bots_hidden: true,
|
||||
r##ServerBrowser_Secure_hidden: false,
|
||||
r##ServerBrowser_Servers_hidden: false,
|
||||
r##ServerBrowser_IPAddress_hidden: true,
|
||||
r##ServerBrowser_Game_hidden: false,
|
||||
r##ServerBrowser_Players_hidden: false,
|
||||
r##ServerBrowser_Map_hidden: false,
|
||||
r##ServerBrowser_Latency_hidden: false,
|
||||
sort_column: "#ServerBrowser_Latency",
|
||||
sort_column_secondary: Some(""),
|
||||
sort_column_asc: true,
|
||||
sort_column_secondary_asc: true,
|
||||
),
|
||||
),
|
||||
HistoryGames: GameListHaver(
|
||||
gamelist: GameList(
|
||||
r##ServerBrowser_Password_hidden: false,
|
||||
r##ServerBrowser_Bots_hidden: true,
|
||||
r##ServerBrowser_Secure_hidden: false,
|
||||
r##ServerBrowser_Servers_hidden: false,
|
||||
r##ServerBrowser_IPAddress_hidden: true,
|
||||
r##ServerBrowser_Game_hidden: false,
|
||||
r##ServerBrowser_Players_hidden: false,
|
||||
r##ServerBrowser_Map_hidden: false,
|
||||
r##ServerBrowser_Latency_hidden: false,
|
||||
sort_column: "#ServerBrowser_LastPlayed",
|
||||
sort_column_secondary: Some("#ServerBrowser_Latency"),
|
||||
sort_column_asc: true,
|
||||
sort_column_secondary_asc: true,
|
||||
),
|
||||
),
|
||||
SpectateGames: GameListHaver(
|
||||
gamelist: GameList(
|
||||
r##ServerBrowser_Password_hidden: false,
|
||||
r##ServerBrowser_Bots_hidden: true,
|
||||
r##ServerBrowser_Secure_hidden: false,
|
||||
r##ServerBrowser_Servers_hidden: false,
|
||||
r##ServerBrowser_IPAddress_hidden: true,
|
||||
r##ServerBrowser_Game_hidden: false,
|
||||
r##ServerBrowser_Players_hidden: false,
|
||||
r##ServerBrowser_Map_hidden: false,
|
||||
r##ServerBrowser_Latency_hidden: false,
|
||||
sort_column: "#ServerBrowser_Latency",
|
||||
sort_column_secondary: Some(""),
|
||||
sort_column_asc: true,
|
||||
sort_column_secondary_asc: true,
|
||||
),
|
||||
),
|
||||
LanGames: GameListHaver(
|
||||
gamelist: GameList(
|
||||
r##ServerBrowser_Password_hidden: false,
|
||||
r##ServerBrowser_Bots_hidden: true,
|
||||
r##ServerBrowser_Secure_hidden: false,
|
||||
r##ServerBrowser_Servers_hidden: false,
|
||||
r##ServerBrowser_IPAddress_hidden: true,
|
||||
r##ServerBrowser_Game_hidden: false,
|
||||
r##ServerBrowser_Players_hidden: false,
|
||||
r##ServerBrowser_Map_hidden: false,
|
||||
r##ServerBrowser_Latency_hidden: false,
|
||||
sort_column: "#ServerBrowser_Latency",
|
||||
sort_column_secondary: Some(""),
|
||||
sort_column_asc: true,
|
||||
sort_column_secondary_asc: true,
|
||||
),
|
||||
),
|
||||
FriendsGames: GameListHaver(
|
||||
gamelist: GameList(
|
||||
r##ServerBrowser_Password_hidden: false,
|
||||
r##ServerBrowser_Bots_hidden: true,
|
||||
r##ServerBrowser_Secure_hidden: false,
|
||||
r##ServerBrowser_Servers_hidden: false,
|
||||
r##ServerBrowser_IPAddress_hidden: true,
|
||||
r##ServerBrowser_Game_hidden: false,
|
||||
r##ServerBrowser_Players_hidden: false,
|
||||
r##ServerBrowser_Map_hidden: false,
|
||||
r##ServerBrowser_Latency_hidden: false,
|
||||
sort_column: "#ServerBrowser_Latency",
|
||||
sort_column_secondary: Some(""),
|
||||
sort_column_asc: true,
|
||||
sort_column_secondary_asc: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
14
tests/snapshots/serde__tests__data__concrete.vmt.snap
Normal file
14
tests/snapshots/serde__tests__data__concrete.vmt.snap
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
source: tests/serde.rs
|
||||
expression: result
|
||||
---
|
||||
LightmappedGeneric(
|
||||
r#$baseTexture: "cp_mountainlab/concrete/concretefloor003",
|
||||
r#$bumpmap: "concrete/concretefloor007b_height-ssbump",
|
||||
r#$ssbump: true,
|
||||
r#%keywords: "tf",
|
||||
r#$detail: "overlays/detail001",
|
||||
r#$detailscale: 1.9,
|
||||
r#$detailblendmode: 0,
|
||||
r#$detailblendfactor: 1.0,
|
||||
)
|
||||
16
tests/snapshots/serde__tests__data__messy.vdf.snap
Normal file
16
tests/snapshots/serde__tests__data__messy.vdf.snap
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
source: tests/serde.rs
|
||||
expression: result
|
||||
---
|
||||
r#Resource/specificPanel.res(
|
||||
empty: (),
|
||||
array: [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
],
|
||||
windows_path: "C:\\test\\no newline",
|
||||
r#\\"$translucent": true,
|
||||
r#$envmaptint: 0.5,
|
||||
r#.5: 0.5,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue