use compact_str::CompactString;
use rkyv::{Archive, Deserialize, Serialize};
use serde::{Deserialize as SerdeDeserialize, Serialize as SerdeSerialize};
#[derive(
Debug, Clone, PartialEq, Archive, Serialize, Deserialize, SerdeSerialize, SerdeDeserialize,
)]
pub struct Metadata {
pub chart_id: Option<u64>,
pub chartset_id: Option<u64>,
pub key_count: u8,
pub title: CompactString,
pub artist: CompactString,
pub creator: CompactString,
pub difficulty_name: CompactString,
pub difficulty_value: Option<f32>,
pub audio_file: CompactString,
pub background_file: Option<CompactString>,
pub audio_offset_us: i64,
pub preview_time_us: i64,
pub preview_duration_us: i64,
pub source: Option<CompactString>,
pub genre: Option<CompactString>,
pub language: Option<CompactString>,
pub tags: Vec<CompactString>,
pub is_coop: bool,
}
impl Default for Metadata {
fn default() -> Self {
Self {
chart_id: None,
chartset_id: None,
key_count: 4,
title: CompactString::new(""),
artist: CompactString::new(""),
creator: CompactString::new(""),
difficulty_name: CompactString::from("Normal"),
difficulty_value: None,
audio_file: CompactString::new(""),
background_file: None,
audio_offset_us: 0,
preview_time_us: 0,
preview_duration_us: 15_000_000, source: None,
genre: None,
language: None,
tags: Vec::new(),
is_coop: false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_metadata_default() {
let meta = Metadata::default();
assert!(meta.title.is_empty());
assert!(meta.artist.is_empty());
assert!(meta.creator.is_empty());
assert_eq!(meta.difficulty_name, "Normal");
assert!(meta.difficulty_value.is_none());
assert!(meta.audio_file.is_empty());
assert!(meta.background_file.is_none());
assert_eq!(meta.audio_offset_us, 0);
assert_eq!(meta.preview_time_us, 0);
assert_eq!(meta.preview_duration_us, 15_000_000); assert!(meta.source.is_none());
assert!(meta.genre.is_none());
assert!(meta.language.is_none());
assert!(meta.tags.is_empty());
}
}