emote_psb\types/
reference.rs

1/*
2 * Created on Sat Dec 26 2020
3 *
4 * Copyright (c) storycraft. Licensed under the MIT Licence.
5 */
6
7use std::io::{Read, Write};
8
9use crate::PsbError;
10
11use super::number::PsbNumber;
12
13#[cfg(feature = "serde")]
14use serde::{Serialize, Deserialize};
15
16#[derive(Debug, Clone, PartialEq, Eq, Hash)]
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18pub struct PsbResourceRef {
19
20    pub resource_ref: u64
21
22}
23
24impl PsbResourceRef {
25
26    pub fn get_n(&self) -> u8 {
27        PsbNumber::get_uint_n(self.resource_ref)
28    }
29
30    pub fn from_bytes(n: u8, stream: &mut impl Read) -> Result<(u64, Self), PsbError> {
31        let (ref_read, refernece) = PsbNumber::read_uint(n, stream)?;
32
33        Ok((ref_read, Self { resource_ref: refernece as u64 }))
34    }
35
36    pub fn write_bytes(&self, stream: &mut impl Write) -> Result<u64, PsbError> {
37        Ok(PsbNumber::write_uint(self.get_n(), self.resource_ref, stream)? as u64)
38    }
39
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Hash)]
43#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
44pub struct PsbExtraRef {
45
46    pub extra_resource_ref: u64
47
48}
49
50impl PsbExtraRef {
51
52    pub fn get_n(&self) -> u8 {
53        PsbNumber::get_uint_n(self.extra_resource_ref)
54    }
55
56    pub fn from_bytes(n: u8, stream: &mut impl Read) -> Result<(u64, Self), PsbError> {
57        let (ref_read, refernece) = PsbNumber::read_uint(n, stream)?;
58
59        Ok((ref_read, Self { extra_resource_ref : refernece as u64 }))
60    }
61
62    pub fn write_bytes(&self, stream: &mut impl Write) -> Result<u64, PsbError> {
63        Ok(PsbNumber::write_uint(self.get_n(), self.extra_resource_ref, stream)? as u64)
64    }
65
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Hash)]
69pub struct PsbStringRef {
70
71    pub string_ref: u64
72
73}
74
75impl PsbStringRef {
76
77    pub fn get_n(&self) -> u8 {
78        PsbNumber::get_uint_n(self.string_ref)
79    }
80
81    pub fn from_bytes(n: u8, stream: &mut impl Read) -> Result<(u64, Self), PsbError> {
82        let (ref_read, refernece) = PsbNumber::read_uint(n, stream)?;
83
84        Ok((ref_read, Self { string_ref : refernece as u64 }))
85    }
86
87    pub fn write_bytes(&self, stream: &mut impl Write) -> Result<u64, PsbError> {
88        Ok(PsbNumber::write_uint(self.get_n(), self.string_ref, stream)? as u64)
89    }
90
91}