use binrw::binrw; use serde_json::{Value, json}; #[binrw] #[derive(Debug, Clone, Default)] pub struct CustomizeData { pub race: u8, pub gender: u8, pub age: u8, pub height: u8, pub subrace: u8, pub face: u8, pub hair: u8, pub enable_highlights: u8, pub skin_tone: u8, pub right_eye_color: u8, pub hair_tone: u8, pub highlights: u8, pub facial_features: u8, pub facial_feature_color: u8, pub eyebrows: u8, pub left_eye_color: u8, pub eyes: u8, pub nose: u8, pub jaw: u8, pub mouth: u8, pub lips_tone_fur_pattern: u8, pub race_feature_size: u8, pub race_feature_type: u8, pub bust: u8, pub face_paint: u8, pub face_paint_color: u8, } impl CustomizeData { pub fn to_json(&self) -> Value { json!([ self.race.to_string(), self.gender.to_string(), self.age.to_string(), self.height.to_string(), self.subrace.to_string(), self.face.to_string(), self.hair.to_string(), self.enable_highlights.to_string(), self.skin_tone.to_string(), self.right_eye_color.to_string(), self.hair_tone.to_string(), self.highlights.to_string(), self.facial_features.to_string(), self.facial_feature_color.to_string(), self.eyebrows.to_string(), self.left_eye_color.to_string(), self.eyes.to_string(), self.nose.to_string(), self.jaw.to_string(), self.mouth.to_string(), self.lips_tone_fur_pattern.to_string(), self.race_feature_size.to_string(), self.race_feature_type.to_string(), self.bust.to_string(), self.face_paint.to_string(), self.face_paint_color.to_string(), ]) } pub fn from_json(json: &Value) -> Self { Self { race: json[0].as_str().unwrap().parse::().unwrap(), gender: json[1].as_str().unwrap().parse::().unwrap(), age: json[2].as_str().unwrap().parse::().unwrap(), height: json[3].as_str().unwrap().parse::().unwrap(), subrace: json[4].as_str().unwrap().parse::().unwrap(), face: json[5].as_str().unwrap().parse::().unwrap(), hair: json[6].as_str().unwrap().parse::().unwrap(), enable_highlights: json[7].as_str().unwrap().parse::().unwrap(), skin_tone: json[8].as_str().unwrap().parse::().unwrap(), right_eye_color: json[9].as_str().unwrap().parse::().unwrap(), hair_tone: json[10].as_str().unwrap().parse::().unwrap(), highlights: json[11].as_str().unwrap().parse::().unwrap(), facial_features: json[12].as_str().unwrap().parse::().unwrap(), facial_feature_color: json[13].as_str().unwrap().parse::().unwrap(), eyebrows: json[14].as_str().unwrap().parse::().unwrap(), left_eye_color: json[15].as_str().unwrap().parse::().unwrap(), eyes: json[16].as_str().unwrap().parse::().unwrap(), nose: json[17].as_str().unwrap().parse::().unwrap(), jaw: json[18].as_str().unwrap().parse::().unwrap(), mouth: json[19].as_str().unwrap().parse::().unwrap(), lips_tone_fur_pattern: json[20].as_str().unwrap().parse::().unwrap(), race_feature_size: json[21].as_str().unwrap().parse::().unwrap(), race_feature_type: json[22].as_str().unwrap().parse::().unwrap(), bust: json[23].as_str().unwrap().parse::().unwrap(), face_paint: json[24].as_str().unwrap().parse::().unwrap(), face_paint_color: json[25].as_str().unwrap().parse::().unwrap(), } } }