wowlab_engine_domain/rotation/
ast.rs1use itertools::Itertools;
4use wowlab_types::sim::{ROTATION_FORMAT_VERSION, Rotation};
5
6use super::{
7 error::{Error, Result},
8 validate::validate_rotation,
9};
10
11pub fn parse_and_validate(json: &str) -> Result<Rotation> {
16 let rotation: Rotation = serde_json::from_str(json)?;
17
18 validate(&rotation)?;
19
20 Ok(rotation)
21}
22
23pub(super) fn validate(rotation: &Rotation) -> Result<()> {
24 if rotation.version != ROTATION_FORMAT_VERSION {
25 return Err(Error::validation(format!(
26 "unsupported rotation format version {} (this build understands version {})",
27 rotation.version, ROTATION_FORMAT_VERSION
28 )));
29 }
30
31 let validation = validate_rotation(rotation);
32
33 if !validation.valid {
34 let message = validation.errors.iter().map(ToString::to_string).join("; ");
35
36 return Err(Error::validation(message));
37 }
38
39 Ok(())
40}