mod number;
mod vector;
mod box_type;
mod other;
mod transform;
mod composite;
use godot::builtin::*;
pub trait ConstSize {
const SIZE: usize;
}
pub trait Serialize {
fn serialize(&self, buffer: &mut PackedByteArray, offset: usize) -> Result<(), ()>;
}
pub trait Deserialize {
fn deserialize(buffer: &PackedByteArray, offset: usize) -> Result<Self, ()>
where
Self: Sized;
}
#[derive(Debug, Default, Clone, Copy, PartialEq, PartialOrd)]
pub struct Unit<T>(pub T);
#[derive(Debug, Default, Clone, Copy, PartialEq, PartialOrd)]
pub struct Half<T>(pub T);
const UNIT_SIZE: usize = 1;
const HALF_SIZE: usize = 2;
#[inline]
fn to_unit(num: real) -> i8 {
const FACTOR: real = 127.0;
(num * FACTOR) as i8
}
#[inline]
fn from_unit(byte: i8) -> real {
const FACTOR: real = 1.0 / 127.0;
byte as real * FACTOR
}
#[cfg(test)]
mod tests {
use super::{ConstSize, Deserialize, Serialize};
use godot::builtin::{PackedByteArray, Vector2i};
use godot_netpacket_macros::{ConstSize, Deserialize, Serialize};
extern crate self as godot_netpacket;
#[derive(Debug, Serialize, ConstSize, Deserialize, PartialEq, Eq)]
struct APacket {
pos: Vector2i,
}
#[derive(Debug, Serialize, ConstSize, Deserialize, PartialEq, Eq)]
enum BPacket {
A,
B,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
enum CPacket {
A { toto: i32 },
B { foo: i64, bar: bool },
}
#[doc(hidden)]
#[allow(dead_code)]
fn test_struct() {
let a = APacket {
pos: Vector2i::new(12, 34),
};
let mut buffer = PackedByteArray::new();
buffer.resize(APacket::SIZE);
a.serialize(&mut buffer, 0).unwrap();
let a2 = APacket::deserialize(&buffer, 0).unwrap();
assert_eq!(a, a2);
}
#[doc(hidden)]
#[allow(dead_code)]
fn test_simple_enum() {
let b = BPacket::B;
let mut buffer = PackedByteArray::new();
buffer.resize(BPacket::SIZE);
b.serialize(&mut buffer, 0).unwrap();
let b2 = BPacket::deserialize(&buffer, 0).unwrap();
assert_eq!(b, b2);
}
#[doc(hidden)]
#[allow(dead_code)]
fn test_complex_enum() {
let c = CPacket::B {
foo: 1234,
bar: true,
};
let mut buffer = PackedByteArray::new();
buffer.resize(i64::SIZE + bool::SIZE);
c.serialize(&mut buffer, 0).unwrap();
let c2 = CPacket::deserialize(&buffer, 0).unwrap();
assert_eq!(c, c2);
}
}