rpfm_lib/files/bmd/common/building_reference/
mod.rs

1//---------------------------------------------------------------------------//
2// Copyright (c) 2017-2024 Ismael Gutiérrez González. All rights reserved.
3//
4// This file is part of the Rusted PackFile Manager (RPFM) project,
5// which can be found here: https://github.com/Frodo45127/rpfm.
6//
7// This file is licensed under the MIT license, which can be found here:
8// https://github.com/Frodo45127/rpfm/blob/master/LICENSE.
9//---------------------------------------------------------------------------//
10
11use getset::*;
12use serde_derive::{Serialize, Deserialize};
13
14use crate::binary::{ReadBytes, WriteBytes};
15use crate::error::{Result, RLibError};
16use crate::files::{Decodeable, EncodeableExtraData, Encodeable};
17
18use super::*;
19
20mod v1;
21
22//---------------------------------------------------------------------------//
23//                              Enum & Structs
24//---------------------------------------------------------------------------//
25
26#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
27#[getset(get = "pub", get_mut = "pub", set = "pub")]
28pub struct BuildingReference {
29    serialise_version: u16,
30    building_index: i32,
31}
32
33//---------------------------------------------------------------------------//
34//                           Implementation of Properties
35//---------------------------------------------------------------------------//
36
37impl Decodeable for BuildingReference {
38
39    fn decode<R: ReadBytes>(data: &mut R, extra_data: &Option<DecodeableExtraData>) -> Result<Self> {
40        let mut flags = Self::default();
41        flags.serialise_version = data.read_u16()?;
42
43        match flags.serialise_version {
44            1 => flags.read_v1(data, extra_data)?,
45            _ => return Err(RLibError::DecodingFastBinUnsupportedVersion(String::from("BuildingReference"), flags.serialise_version)),
46        }
47
48        Ok(flags)
49    }
50}
51
52impl Encodeable for BuildingReference {
53
54    fn encode<W: WriteBytes>(&mut self, buffer: &mut W, extra_data: &Option<EncodeableExtraData>) -> Result<()> {
55        buffer.write_u16(self.serialise_version)?;
56
57        match self.serialise_version {
58            1 => self.write_v1(buffer, extra_data)?,
59            _ => return Err(RLibError::EncodingFastBinUnsupportedVersion(String::from("BuildingReference"), self.serialise_version)),
60        }
61
62        Ok(())
63    }
64}