This commit is contained in:
Robin Appelman 2023-12-18 01:49:06 +01:00
commit 1f0a53d241
14 changed files with 1219 additions and 100 deletions

View file

@ -1,5 +1,3 @@
"#base" "panelBase.res"
"Resource/specificPanel.res"
{
// Specify panel-specific controls here

158
tests/serde.rs Normal file
View 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);
}

View file

@ -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")),

View file

@ -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,
),
),
),
),
),
)

View 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,
)

View 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,
)