anyhow, cargo fmt
This commit is contained in:
@@ -4,6 +4,7 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.102"
|
||||
paste = "1.0.15"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
serde_json = "1.0.149"
|
||||
|
||||
@@ -8,4 +8,5 @@ fn main() {
|
||||
singleton::set_item_search(item_search).ok();
|
||||
let stellar_jade = singleton::get_item_mini_by_id(&1).unwrap();
|
||||
dbg!(stellar_jade);
|
||||
println!("{}", res_parser::common::Hash::from_str("HelLONi1"));
|
||||
}
|
||||
|
||||
@@ -2,13 +2,13 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Default, Debug, Clone, Copy, Serialize, Deserialize)]
|
||||
pub struct Hash {
|
||||
pub Hash: i32,
|
||||
#[serde(rename = "Hash")]
|
||||
pub hash: i32,
|
||||
}
|
||||
|
||||
impl Hash {
|
||||
pub const fn get_i32(s: &str) -> i32 {
|
||||
let mut hash1: i32 = 5381;
|
||||
let mut hash2: i32 = hash1;
|
||||
pub const fn from_str(s: &str) -> i32 {
|
||||
let mut hash1 @ mut hash2 = 5381i32;
|
||||
|
||||
let bytes = s.as_bytes();
|
||||
let length = bytes.len();
|
||||
@@ -16,11 +16,9 @@ impl Hash {
|
||||
let mut i = 0;
|
||||
while i < length {
|
||||
hash1 = ((hash1 << 5).wrapping_add(hash1)) ^ (bytes[i] as i32);
|
||||
|
||||
if i + 1 < length {
|
||||
hash2 = ((hash2 << 5).wrapping_add(hash2)) ^ (bytes[i + 1] as i32);
|
||||
}
|
||||
|
||||
i += 2;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,36 +1,50 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use super::common::Hash;
|
||||
use super::text_map::TextMaps;
|
||||
use std::collections::BTreeMap;
|
||||
use crate::types::common::Image;
|
||||
use crate::types::item::{ItemSearch, ItemMini};
|
||||
|
||||
// C:\Users\yuvlian\Downloads\git\others\srwk\Resources-DUMP\ExcelOutput\ItemConfig.json
|
||||
// pub struct ItemSearch(pub BTreeMap<Id, ItemMini>);
|
||||
use crate::types::item::{ItemMini, ItemSearch};
|
||||
use anyhow::{Context, Result};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct ItemConfigs(pub Vec<ItemConfig>);
|
||||
|
||||
impl ItemConfigs {
|
||||
pub fn parse_to_api_type(tm: &TextMaps) -> Result<ItemSearch, String> {
|
||||
let file = std::fs::read_to_string("../Resources-DUMP/ExcelOutput/ItemConfig.json").unwrap();
|
||||
let cfg: Vec<ItemConfig> = serde_json::from_str(&file).unwrap();
|
||||
let cfg = ItemConfigs(cfg);
|
||||
let mut item_search = BTreeMap::new();
|
||||
for item in cfg.0.iter() {
|
||||
let id = item.ID;
|
||||
// println!("{}", id);
|
||||
let name = tm.get_by_hash(item.ItemName).unwrap_or_default();
|
||||
let img = Image { path: String::new(), filename: String::new(), author_info: None };
|
||||
item_search.insert(id, ItemMini { name: name.Text.clone(), image: img});
|
||||
}
|
||||
pub fn parse_to_api_type(tm: &TextMaps) -> Result<ItemSearch> {
|
||||
let path = "../Resources-DUMP/ExcelOutput/ItemConfig.json";
|
||||
let file = std::fs::File::open(path).with_context(|| format!("Failed to open {}", path))?;
|
||||
let reader = std::io::BufReader::new(file);
|
||||
let cfg: Vec<ItemConfig> =
|
||||
serde_json::from_reader(reader).with_context(|| format!("Failed to parse {}", path))?;
|
||||
|
||||
let item_search = cfg
|
||||
.into_iter()
|
||||
.map(|item| {
|
||||
let id = item.id;
|
||||
let name = tm.get_by_hash(item.item_name).unwrap_or_default();
|
||||
let img = Image {
|
||||
path: String::new(),
|
||||
filename: String::new(),
|
||||
author_info: None,
|
||||
};
|
||||
(
|
||||
id,
|
||||
ItemMini {
|
||||
name: name.text.clone(),
|
||||
image: img,
|
||||
},
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(ItemSearch(item_search))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct ItemConfig {
|
||||
pub ID: i32,
|
||||
pub ItemName: Hash,
|
||||
#[serde(rename = "ID")]
|
||||
pub id: i32,
|
||||
#[serde(rename = "ItemName")]
|
||||
pub item_name: Hash,
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
pub mod common;
|
||||
pub mod item;
|
||||
pub mod text_map;
|
||||
|
||||
@@ -1,45 +1,48 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use super::common::Hash;
|
||||
|
||||
// C:\Users\yuvlian\Downloads\git\others\srwk\Resources-DUMP\TextMap\TextMapEN.json
|
||||
use anyhow::{Context, Result};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::io::BufReader;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct TextMaps(pub Vec<TextMap>);
|
||||
pub struct TextMaps(HashMap<i32, TextMap>);
|
||||
|
||||
impl TextMaps {
|
||||
pub fn parse() -> Result<Self, String> {
|
||||
let file = std::fs::read_to_string("../Resources-DUMP/TextMap/TextMapEN.json").unwrap();
|
||||
let v: Vec<TextMap> = serde_json::from_str(&file).unwrap();
|
||||
Ok(TextMaps(v))
|
||||
}
|
||||
pub fn parse() -> Result<Self> {
|
||||
let path = "../Resources-DUMP/TextMap/TextMapEN.json";
|
||||
let file = File::open(path).with_context(|| format!("Failed to open {}", path))?;
|
||||
let reader = BufReader::new(file);
|
||||
let v: Vec<TextMap> =
|
||||
serde_json::from_reader(reader).with_context(|| format!("Failed to parse {}", path))?;
|
||||
|
||||
pub fn get_by_i32(&self, i: i32) -> Option<TextMap> {
|
||||
self.get_by_hash(Hash { Hash: i })
|
||||
let map = v.into_iter().map(|t| (t.id.hash, t)).collect();
|
||||
Ok(TextMaps(map))
|
||||
}
|
||||
|
||||
pub fn get_by_str(&self, s: &str) -> Option<TextMap> {
|
||||
let hash = Hash::get_i32(s);
|
||||
self.get_by_hash(Hash { Hash: hash })
|
||||
let hash = Hash::from_str(s);
|
||||
self.get_by_i32(hash)
|
||||
}
|
||||
|
||||
pub fn get_by_i32(&self, i: i32) -> Option<TextMap> {
|
||||
self.get_by_hash(Hash { hash: i })
|
||||
}
|
||||
|
||||
pub fn get_by_hash(&self, h: Hash) -> Option<TextMap> {
|
||||
let mut m = None;
|
||||
if h.Hash == 0 {
|
||||
return m;
|
||||
if h.hash == 0 {
|
||||
return None;
|
||||
}
|
||||
for t in self.0.iter() {
|
||||
if t.ID.Hash == h.Hash {
|
||||
m = Some(t.clone());
|
||||
break;
|
||||
}
|
||||
}
|
||||
m
|
||||
self.0.get(&h.hash).cloned()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct TextMap {
|
||||
pub ID: Hash,
|
||||
pub Text: String,
|
||||
pub HasParam: bool,
|
||||
#[serde(rename = "ID")]
|
||||
pub id: Hash,
|
||||
#[serde(rename = "Text")]
|
||||
pub text: String,
|
||||
#[serde(rename = "HasParam")]
|
||||
pub has_param: bool,
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use super::common::{
|
||||
Ascension, Count, Desc, Element, Id, Level, Path, Rarity, StatType, StatValue, Image,
|
||||
Ascension, Count, Desc, Element, Id, Image, Level, Path, Rarity, StatType, StatValue,
|
||||
};
|
||||
use super::item::ItemMini;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::common::{Count, Desc, Id, Level, Path, Rarity, StatValue, Image};
|
||||
use super::common::{Count, Desc, Id, Image, Level, Path, Rarity, StatValue};
|
||||
use super::item::ItemMini;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::{BTreeMap, HashMap};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::common::{Desc, Id, RelicType, Image};
|
||||
use super::common::{Desc, Id, Image, RelicType};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::{BTreeMap, HashMap};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user