extern crate semver;
extern crate serde;
extern crate serde_repr;
use semver::Version;
use serde::{Deserialize, Serialize};
pub mod difficulty {
use super::{Deserialize, Serialize};
use serde_repr::*;
#[derive(Serialize, Deserialize, Debug)]
pub struct BPMChange {
#[serde(rename = "_BPM")]
pub bpm: f64,
#[serde(rename = "_time")]
pub time: f64,
#[serde(rename = "_beatsPerBar")]
pub beats_per_bar: u32,
#[serde(rename = "_metronomeOffset")]
pub metronome_offset: u32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Event {
#[serde(rename = "_time")]
pub time: f64,
#[serde(rename = "_type")]
pub event_type: u8,
#[serde(rename = "_value")]
pub value: u32,
}
#[derive(Serialize_repr, Deserialize_repr, PartialEq, PartialOrd, Eq, Ord, Debug)]
#[repr(u8)]
pub enum LineIndex {
FarLeft = 0,
MidLeft = 1,
MidRight = 2,
FarRight = 3,
}
pub mod note {
use serde_repr::*;
#[derive(Serialize_repr, Deserialize_repr, PartialEq, PartialOrd, Eq, Ord, Debug)]
#[repr(u8)]
pub enum LineLayer {
Bottom = 0,
Middle = 1,
Top = 2,
}
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Eq, Debug)]
#[repr(u8)]
pub enum NoteType {
Red = 0,
Blue = 1,
Bomb = 3,
}
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Eq, Debug)]
#[repr(u8)]
pub enum CutDirection {
Up = 0,
Down = 1,
Left = 2,
Right = 3,
UpLeft = 4,
UpRight = 5,
DownLeft = 6,
DownRight = 7,
Dot = 8,
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Note {
#[serde(rename = "_time")]
pub time: f64,
#[serde(rename = "_lineIndex")]
pub line_index: LineIndex,
#[serde(rename = "_lineLayer")]
pub line_layer: note::LineLayer,
#[serde(rename = "_type")]
pub note_type: note::NoteType,
#[serde(rename = "_cutDirection")]
pub cut_direction: note::CutDirection,
}
pub mod obstacle {
use serde_repr::*;
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Eq, Debug)]
#[repr(u8)]
pub enum ObstacleType {
Wall = 0,
Ceiling = 1,
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Obstacle {
#[serde(rename = "_time")]
pub time: f64,
#[serde(rename = "_lineIndex")]
pub line_index: LineIndex,
#[serde(rename = "_type")]
pub obstacle_type: obstacle::ObstacleType,
#[serde(rename = "_duration")]
pub duration: f64,
#[serde(rename = "_width")]
pub width: u8,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Bookmark {
#[serde(rename = "_time")]
time: f64,
#[serde(rename = "_name")]
name: String,
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Difficulty {
#[serde(rename = "_version")]
pub version: Version,
#[serde(rename = "_BPMChanges")]
pub bpm_changes: Vec<difficulty::BPMChange>,
#[serde(rename = "_events")]
pub events: Vec<difficulty::Event>,
#[serde(rename = "_notes")]
pub notes: Vec<difficulty::Note>,
#[serde(rename = "_obstacles")]
pub obstacles: Vec<difficulty::Obstacle>,
#[serde(rename = "_bookmarks")]
pub bookmarks: Vec<difficulty::Bookmark>,
}