use crate::prelude::*;
use crate::util::fmt::typename;
use crate::wad::elements::GMElement;
use crate::wad::serialize::builder::DataBuilder;
use crate::wad::version::GMVersionReq;
#[allow(clippy::ref_option)]
impl DataBuilder<'_> {
pub fn write_if_ver<T: GMElement>(
&mut self,
element: &Option<T>,
field_name: &'static str,
ver_req: impl Into<GMVersionReq>,
) -> Result<()> {
let ver_req: GMVersionReq = ver_req.into();
if !self.is_version_at_least(ver_req.clone()) {
return Ok(()); }
let element: &T = element.as_ref().ok_or_else(|| {
format!(
"Field {:?} ({}) needs to be set since GameMaker version {} (data version is {})",
field_name,
typename::<T>(),
ver_req,
self.gm_data.general_info.version,
)
})?;
element.serialize(self)
}
pub fn write_if_wad_ver<T: GMElement>(
&mut self,
element: &Option<T>,
field_name: &'static str,
ver_req: u8,
) -> Result<()> {
if self.wad_version() < ver_req {
return Ok(()); }
let element: &T = element.as_ref().ok_or_else(|| {
format!(
"Field {:?} ({}) needs to be set since WAD version {} (data WAD version is {})",
field_name,
typename::<T>(),
ver_req,
self.gm_data.general_info.wad_version,
)
})?;
element.serialize(self)
}
}