[feat] basic steam user parse
todo: steamid32 + avatar
This commit is contained in:
84
src-tauri/src/vdf/parse.rs
Normal file
84
src-tauri/src/vdf/parse.rs
Normal file
@@ -0,0 +1,84 @@
|
||||
pub fn to_json(vdf_data: &str) -> String {
|
||||
let linebreak = match std::env::consts::OS {
|
||||
"macos" => "\r",
|
||||
"windows" => "\n",
|
||||
"linux" => "\n",
|
||||
_ => "\n",
|
||||
};
|
||||
|
||||
let startpoint = vdf_data.find('{').unwrap_or(0);
|
||||
let vdf_data = &vdf_data[startpoint..];
|
||||
|
||||
let lines: Vec<&str> = vdf_data.split(linebreak).collect();
|
||||
let mut json_data = String::new();
|
||||
|
||||
for line in lines {
|
||||
let mut line = line.trim_end_matches('\r').trim().to_string();
|
||||
|
||||
if line.contains("\"\t\t\"") {
|
||||
line = line.replace("\"\t\t\"", "\": \"");
|
||||
line.push(',');
|
||||
} else if line.contains("\" \"") {
|
||||
line = line.replace("\" \"", "\": \"");
|
||||
line.push(',');
|
||||
}
|
||||
|
||||
line = line
|
||||
.replace('{', ": {")
|
||||
.replace('\t', "")
|
||||
.replace('}', "},");
|
||||
|
||||
json_data.push_str(&line);
|
||||
}
|
||||
|
||||
json_data = json_data
|
||||
.replace(",}", "}")
|
||||
.trim_start_matches(": ")
|
||||
.trim_end_matches(',')
|
||||
.to_string();
|
||||
|
||||
json_data
|
||||
}
|
||||
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_to_json() {
|
||||
let vdf_data = "\"users\"
|
||||
{
|
||||
\"76561198315078806\"
|
||||
{
|
||||
\"AccountName\" \"_jerry_dota2\"
|
||||
\"PersonaName\" \"Rop紫(已黑化)\"
|
||||
\"RememberPassword\" \"1\"
|
||||
\"WantsOfflineMode\" \"0\"
|
||||
\"SkipOfflineModeWarning\" \"0\"
|
||||
\"AllowAutoLogin\" \"1\"
|
||||
\"MostRecent\" \"1\"
|
||||
\"Timestamp\" \"1742706884\"
|
||||
}
|
||||
\"76561198107125441\"
|
||||
{
|
||||
\"AccountName\" \"_im_ai_\"
|
||||
\"PersonaName\" \"Buongiorno\"
|
||||
\"RememberPassword\" \"1\"
|
||||
\"WantsOfflineMode\" \"0\"
|
||||
\"SkipOfflineModeWarning\" \"0\"
|
||||
\"AllowAutoLogin\" \"1\"
|
||||
\"MostRecent\" \"0\"
|
||||
\"Timestamp\" \"1739093763\"
|
||||
}
|
||||
}
|
||||
";
|
||||
|
||||
// let expected_json = r#"{"key1": "value1","key2": "value2","subkey": {"key3": "value3"}}"#;
|
||||
let json_data = to_json(vdf_data);
|
||||
|
||||
// 解析json
|
||||
let json_value: serde_json::Value = serde_json::from_str(&json_data).unwrap();
|
||||
|
||||
println!("{}", json_value)
|
||||
// assert_eq!(to_json(vdf_data), expected_json);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user