···11-//! Events that animations unique to each environment.
11+//! Events that control animations unique to each environment.
22//!
33//! Unlike the other V3 group event types, FX events use a template-like JSON syntax.
44//! In order to have standardized structure across all V3 events, custom serialization has been written in [`FxEventContainer`].
55-//! Because of this, neither [`FxEventBox`] nor [`FxEventGroup`] implement [`Serialize`] nor [`Deserialize`].
55+//! Because of this, neither [`FxEventBox`] nor [`FxEventGroup`] implement [`Serialize`] nor [`Deserialize`] directly.
6677use crate::difficulty::lightshow::DistributionType;
88use crate::difficulty::lightshow::easing::Easing;
···1313use ordered_float::OrderedFloat;
1414use serde::ser::SerializeStruct;
1515use serde::{Deserialize, Deserializer, Serialize, Serializer};
1616+use std::ops::{Deref, DerefMut};
16171718/// Contains a list of [`FxEventBox`] as well as the [`Serialize`] and [`Deserialize`] implementations for FX events.
1819#[derive(Debug, Clone, PartialEq, Default)]
···2324)]
2425pub struct FxEventContainer {
2526 pub event_boxes: Vec<FxEventBox>,
2727+}
2828+2929+impl Deref for FxEventContainer {
3030+ type Target = Vec<FxEventBox>;
3131+3232+ fn deref(&self) -> &Self::Target {
3333+ &self.event_boxes
3434+ }
3535+}
3636+3737+impl DerefMut for FxEventContainer {
3838+ fn deref_mut(&mut self) -> &mut Self::Target {
3939+ &mut self.event_boxes
4040+ }
2641}
27422843/// The format that is actually stored in JSON.
···176191 pub groups: Vec<FxEventGroup>,
177192}
178193179179-/// The raw JSON structure that uses [data IDs](self::data_ids) rather than actual [event data](FxEventData).
194194+/// The raw JSON structure that uses [data IDs](FxEventGroupRaw::data_ids) rather than actual [event data](FxEventData).
180195#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
181196struct FxEventBoxRaw {
182197 #[serde(rename = "b")]
···461476462477 #[test]
463478 fn test_deserialize() {
464464- let container: FxEventContainer =
465465- serde_json::from_value(get_test_json()).expect("Failed to deserialize");
479479+ let container: FxEventContainer = serde_json::from_value(get_test_json()).unwrap();
466480467481 assert_eq!(container, get_test_container());
468482 }
469483470484 #[test]
471485 fn test_serialize() {
472472- let out_json = serde_json::to_value(&get_test_container()).expect("Failed to serialize");
486486+ let out_json = serde_json::to_value(&get_test_container()).unwrap();
473487474488 assert_eq!(out_json, get_test_json());
475489 }
476490477491 #[test]
478478- fn test_roundtrip() {
479479- let container: FxEventContainer =
480480- serde_json::from_value(get_test_json()).expect("Failed to deserialize");
492492+ fn test_round_trip() {
493493+ let container: FxEventContainer = serde_json::from_value(get_test_json()).unwrap();
481494482482- let out_json = serde_json::to_string_pretty(&container).expect("Failed to serialize");
495495+ let out_json = serde_json::to_string_pretty(&container).unwrap();
483496484484- let roundtrip: FxEventContainer =
485485- serde_json::from_str(&out_json).expect("Re-deserialization failed");
497497+ let round_trip: FxEventContainer = serde_json::from_str(&out_json).unwrap();
486498487487- assert_eq!(container, roundtrip, "Round-trip did not match");
488488-489489- println!("Round-trip serialization succeeded.");
499499+ assert_eq!(container, round_trip);
490500 }
491501}