1use crate::{BmsTableData, BmsTableHeader, ChartItem};
4use serde::ser::{SerializeMap, SerializeSeq};
5
6impl serde::Serialize for BmsTableHeader {
7 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
8 where
9 S: serde::Serializer,
10 {
11 let mut map = serializer.serialize_map(None)?;
12
13 map.serialize_entry("name", &self.name)?;
14 map.serialize_entry("symbol", &self.symbol)?;
15 map.serialize_entry("data_url", &self.data_url)?;
16 map.serialize_entry("course", &self.course)?;
17 map.serialize_entry("level_order", &self.level_order)?;
18
19 if let Some(extra_obj) = self.extra.as_object() {
20 for (k, v) in extra_obj {
21 map.serialize_entry(k, v)?;
22 }
23 } else {
24 map.serialize_entry("extra", &self.extra)?;
26 }
27
28 map.end()
29 }
30}
31
32impl serde::Serialize for ChartItem {
33 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
34 where
35 S: serde::Serializer,
36 {
37 let mut map = serializer.serialize_map(None)?;
38
39 map.serialize_entry("level", &self.level)?;
41
42 if let Some(ref md5) = self.md5 {
44 map.serialize_entry("md5", md5)?;
45 }
46 if let Some(ref sha256) = self.sha256 {
47 map.serialize_entry("sha256", sha256)?;
48 }
49 if let Some(ref title) = self.title {
50 map.serialize_entry("title", title)?;
51 }
52 if let Some(ref subtitle) = self.subtitle {
53 map.serialize_entry("subtitle", subtitle)?;
54 }
55 if let Some(ref artist) = self.artist {
56 map.serialize_entry("artist", artist)?;
57 }
58 if let Some(ref subartist) = self.subartist {
59 map.serialize_entry("subartist", subartist)?;
60 }
61 if let Some(ref url) = self.url {
62 map.serialize_entry("url", url)?;
63 }
64 if let Some(ref url_diff) = self.url_diff {
65 map.serialize_entry("url_diff", url_diff)?;
66 }
67
68 if let Some(extra_obj) = self.extra.as_object() {
70 for (k, v) in extra_obj {
71 map.serialize_entry(k, v)?;
72 }
73 } else {
74 map.serialize_entry("extra", &self.extra)?;
76 }
77
78 map.end()
79 }
80}
81
82impl serde::Serialize for BmsTableData {
83 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
84 where
85 S: serde::Serializer,
86 {
87 let mut seq = serializer.serialize_seq(Some(self.charts.len()))?;
89 for chart in &self.charts {
90 seq.serialize_element(chart)?;
91 }
92 seq.end()
93 }
94}