Beatsaber Rust Utilities: A Beatsaber V3 parsing library.
beatsaber beatmap
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Update info.rs

AlephCubed 87f0d2c3 200ac09d

+137 -22
+137 -22
src/info.rs
··· 1 + use crate::loose_enum; 1 2 use serde::{Deserialize, Serialize}; 2 3 use serde_json::Value; 3 4 ··· 6 7 #[serde(rename = "_version")] 7 8 pub version: String, 8 9 #[serde(rename = "_songName")] 9 - pub song_name: String, 10 + pub name: String, 10 11 #[serde(rename = "_songSubName")] 11 - pub song_sub_name: String, 12 + pub sub_name: String, 12 13 #[serde(rename = "_songAuthorName")] 13 - pub song_author_name: String, 14 + pub artist: String, 14 15 #[serde(rename = "_levelAuthorName")] 15 - pub level_author_name: String, 16 + pub mapper: String, 16 17 #[serde(rename = "_beatsPerMinute")] 17 - pub beats_per_minute: i32, 18 + pub bpm: i32, 18 19 #[serde(rename = "_songTimeOffset")] 19 - pub song_time_offset: i32, 20 + pub time_offset: i32, 20 21 #[serde(rename = "_shuffle")] 21 22 pub shuffle: i32, 22 23 #[serde(rename = "_shufflePeriod")] ··· 26 27 #[serde(rename = "_previewDuration")] 27 28 pub preview_duration: i32, 28 29 #[serde(rename = "_songFilename")] 29 - pub song_filename: String, 30 + pub audio_file: String, 30 31 #[serde(rename = "_coverImageFilename")] 31 - pub cover_image_filename: String, 32 + pub cover_image_file: String, 32 33 #[serde(rename = "_environmentName")] 33 - pub environment_name: String, 34 + pub environment: String, 34 35 #[serde(rename = "_allDirectionsEnvironmentName")] 35 - pub all_directions_environment_name: String, 36 + pub all_directions_environment: String, 36 37 #[serde(rename = "_environmentNames")] 37 - pub environment_names: Vec<Value>, 38 + pub environments: Vec<Value>, 38 39 #[serde(rename = "_colorSchemes")] 39 - pub color_schemes: Vec<Value>, 40 + pub color_schemes: Vec<Value>, // Todo 40 41 #[serde(rename = "_difficultyBeatmapSets")] 41 - pub difficulty_beatmap_sets: Vec<DifficultyBeatmapSet>, 42 + pub difficulty_sets: Vec<DifficultySet>, 43 + } 44 + 45 + // Todo: Serde rename is not supported by macro. 46 + loose_enum! { 47 + #[derive(Default)] 48 + Environment { 49 + #[doc(alias = "TheFirst")] 50 + #[default] 51 + DefaultEnvironment = 0, 52 + 53 + TriangleEnvironment = 1, 54 + NiceEnvironment = 2, 55 + BigMirrorEnvironment = 3, 56 + KDAEnvironment = 4, 57 + MonstercatEnvironment = 5, 58 + CrabRaveEnvironment = 6, 59 + DragonsEnvironment = 7, 60 + OriginsEnvironment = 8, 61 + PanicEnvironment = 9, 62 + RocketEnvironment = 10, 63 + GreenDayEnvironment = 11, 64 + GreenDayGrenadeEnvironment = 12, 65 + TimbalandEnvironment = 13, 66 + FitBeatEnvironment = 14, 67 + LinkinParkEnvironment = 15, 68 + BTSEnvironment = 16, 69 + KaleidoscopeEnvironment = 17, 70 + InterscopeEnvironment = 18, 71 + SkrillexEnvironment = 19, 72 + #[doc(alias = "BillieEilish")] 73 + BillieEnvironment = 20, 74 + #[doc(alias = "Spooky")] 75 + HalloweenEnvironment = 21, 76 + #[doc(alias = "LadyGaga")] 77 + GagaEnvironment = 22, 78 + // V3: 79 + WeaveEnvironment = 23, 80 + #[doc(alias = "FallOutBoy")] 81 + PyroEnvironment = 24, 82 + EDMEnvironment = 25, 83 + TheSecondEnvironment = 26, 84 + LizzoEnvironment = 27, 85 + TheWeekndEnvironment = 28, 86 + RockMixtapeEnvironment = 29, 87 + Dragons2Environment = 30, 88 + Panic2Environment = 31, 89 + QueenEnvironment = 32, 90 + // Todo Add more. 91 + } 92 + } 93 + 94 + loose_enum! { 95 + #[derive(Default)] 96 + AllDirectionEnvironment { 97 + #[default] 98 + GlassDesertEnvironment = 0, 99 + } 42 100 } 43 101 44 102 #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] 45 - pub struct DifficultyBeatmapSet { 103 + pub struct DifficultySet { 46 104 #[serde(rename = "_beatmapCharacteristicName")] 47 - pub beatmap_characteristic_name: String, 105 + pub characteristic: String, 48 106 #[serde(rename = "_difficultyBeatmaps")] 49 - pub difficulty_beatmaps: Vec<DifficultyBeatmap>, 107 + pub difficulties: Vec<DifficultyInfo>, 108 + } 109 + 110 + #[derive(Default, Debug, Clone, PartialEq)] 111 + pub enum Characteristic { 112 + #[default] 113 + Standard, 114 + NoArrows, 115 + OneSaber, 116 + Rotate360, 117 + Rotate90, 118 + Legacy, 119 + //Custom types. 120 + Lawless, 121 + Lightshow, 122 + Unknown(String), 123 + } 124 + 125 + // Todo Replace if macro gets expanded to support more types. 126 + impl<'de> serde::Deserialize<'de> for Characteristic { 127 + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> 128 + where 129 + D: serde::Deserializer<'de>, 130 + { 131 + let val = String::deserialize(deserializer)?; 132 + Ok(match val.as_str() { 133 + "Standard" => Characteristic::Standard, 134 + "NoArrows" => Characteristic::NoArrows, 135 + "OneSaber" => Characteristic::OneSaber, 136 + "360Degree" => Characteristic::Rotate360, 137 + "90Degree" => Characteristic::Rotate90, 138 + "Legacy" => Characteristic::Legacy, 139 + "Lawless" => Characteristic::Lawless, 140 + "Lightshow" => Characteristic::Lightshow, 141 + s => Characteristic::Unknown(s.to_string()), 142 + }) 143 + } 144 + } 145 + 146 + impl serde::Serialize for Characteristic { 147 + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 148 + where 149 + S: serde::Serializer, 150 + { 151 + match self { 152 + Characteristic::Standard => serializer.serialize_str("Standard"), 153 + Characteristic::NoArrows => serializer.serialize_str("NoArrows"), 154 + Characteristic::OneSaber => serializer.serialize_str("OneSaber"), 155 + Characteristic::Rotate360 => serializer.serialize_str("360Degree"), 156 + Characteristic::Rotate90 => serializer.serialize_str("90Degree"), 157 + Characteristic::Legacy => serializer.serialize_str("Legacy"), 158 + Characteristic::Lawless => serializer.serialize_str("Legacy"), 159 + Characteristic::Lightshow => serializer.serialize_str("Lawless"), 160 + Characteristic::Unknown(s) => serializer.serialize_str(s), 161 + } 162 + } 50 163 } 51 164 52 165 #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] 53 - pub struct DifficultyBeatmap { 166 + pub struct DifficultyInfo { 54 167 #[serde(rename = "_difficulty")] 55 - pub difficulty: String, 168 + pub name: String, 56 169 #[serde(rename = "_difficultyRank")] 57 - pub difficulty_rank: i32, 170 + pub rank: i32, 58 171 #[serde(rename = "_beatmapFilename")] 59 - pub beatmap_filename: String, 172 + pub file: String, 173 + #[doc(alias = "node_jump_speed")] 60 174 #[serde(rename = "_noteJumpMovementSpeed")] 61 - pub note_jump_movement_speed: i32, 175 + pub njs: i32, 176 + #[doc(alias = "node_jump_distance")] 62 177 #[serde(rename = "_noteJumpStartBeatOffset")] 63 - pub note_jump_start_beat_offset: f32, 178 + pub njd: f32, 64 179 }