add way to send Texture and Texture Arrays
This commit is contained in:
parent
aa55b5948e
commit
ca4fde0b50
|
@ -7,6 +7,8 @@ pub enum Package {
|
||||||
JsonNull,
|
JsonNull,
|
||||||
JsonFalse,
|
JsonFalse,
|
||||||
JsonTrue,
|
JsonTrue,
|
||||||
|
JsonTexture(Texture),
|
||||||
|
JsonTextureArray(Vec<Texture>),
|
||||||
Json(Command),
|
Json(Command),
|
||||||
Binary(Vec<u8>),
|
Binary(Vec<u8>),
|
||||||
Error(u16, String),
|
Error(u16, String),
|
||||||
|
@ -156,7 +158,22 @@ impl<R: Read + Sized, W: Write + Sized> Connection<R, W> {
|
||||||
Ok(None) => {
|
Ok(None) => {
|
||||||
return Ok(Package::JsonNull);
|
return Ok(Package::JsonNull);
|
||||||
}
|
}
|
||||||
|
_ => (), // else try other
|
||||||
|
}
|
||||||
|
|
||||||
|
// try single texture
|
||||||
|
match serde_json::from_slice::<Texture>(&payload[..]) {
|
||||||
|
Ok(texture) => {
|
||||||
|
return Ok(Package::JsonTexture(texture));
|
||||||
|
}
|
||||||
|
_ => (), // else try other
|
||||||
|
}
|
||||||
|
|
||||||
|
// try texture vec
|
||||||
|
match serde_json::from_slice::<Vec<Texture>>(&payload[..]) {
|
||||||
|
Ok(textures) => {
|
||||||
|
return Ok(Package::JsonTextureArray(textures));
|
||||||
|
}
|
||||||
_ => (), // else try other
|
_ => (), // else try other
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,6 +199,10 @@ impl<R: Read + Sized, W: Write + Sized> Connection<R, W> {
|
||||||
Package::JsonNull => self.send_json(&Option::<bool>::None),
|
Package::JsonNull => self.send_json(&Option::<bool>::None),
|
||||||
Package::JsonTrue => self.send_json(&true),
|
Package::JsonTrue => self.send_json(&true),
|
||||||
Package::JsonFalse => self.send_json(&false),
|
Package::JsonFalse => self.send_json(&false),
|
||||||
|
|
||||||
|
Package::JsonTexture(texture) => self.send_json(texture),
|
||||||
|
Package::JsonTextureArray(textures) => self.send_json(textures),
|
||||||
|
|
||||||
Package::Json(cmd) => self.send_json(cmd),
|
Package::Json(cmd) => self.send_json(cmd),
|
||||||
|
|
||||||
Package::Binary(bin) => self.send_binary(bin),
|
Package::Binary(bin) => self.send_binary(bin),
|
||||||
|
@ -189,7 +210,7 @@ impl<R: Read + Sized, W: Write + Sized> Connection<R, W> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_json<J: 'static + Serialize + Sized>(&mut self, msg: &J) -> Result<()> {
|
fn send_json<J: 'static + Serialize>(&mut self, msg: &J) -> Result<()> {
|
||||||
let w = &mut self.writer;
|
let w = &mut self.writer;
|
||||||
|
|
||||||
let payload = serde_json::to_vec(msg).unwrap();
|
let payload = serde_json::to_vec(msg).unwrap();
|
||||||
|
@ -234,6 +255,21 @@ mod test {
|
||||||
use crate::model::*;
|
use crate::model::*;
|
||||||
|
|
||||||
// Utility fn
|
// Utility fn
|
||||||
|
fn demo_texture() -> Texture {
|
||||||
|
const HASH_BYTES: [u8; 32] = [
|
||||||
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
||||||
|
24, 25, 26, 27, 28, 29, 30, 31,
|
||||||
|
];
|
||||||
|
|
||||||
|
Texture {
|
||||||
|
id: "d32e1f80-a17a-4dd7-8ed7-c3a2de1de1c9".to_string(),
|
||||||
|
name: "texture.png".to_string(),
|
||||||
|
tags: vec!["Wood".to_string(), "Hair".to_string()],
|
||||||
|
format: TextureFormat::PNG,
|
||||||
|
resolution: (512, 512),
|
||||||
|
texture_hash: Sha256(HASH_BYTES),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn test_read_back(pkg: &Package) {
|
fn test_read_back(pkg: &Package) {
|
||||||
let dummy_read_data = [255u8];
|
let dummy_read_data = [255u8];
|
||||||
|
@ -377,6 +413,12 @@ mod test {
|
||||||
test_read_back(&Package::JsonFalse);
|
test_read_back(&Package::JsonFalse);
|
||||||
test_read_back(&Package::JsonTrue);
|
test_read_back(&Package::JsonTrue);
|
||||||
|
|
||||||
|
test_read_back(&Package::JsonTexture(demo_texture()));
|
||||||
|
test_read_back(&Package::JsonTextureArray(vec![
|
||||||
|
demo_texture(),
|
||||||
|
demo_texture(),
|
||||||
|
]));
|
||||||
|
|
||||||
test_read_back(&Package::Json(Command::Pong {}));
|
test_read_back(&Package::Json(Command::Pong {}));
|
||||||
|
|
||||||
test_read_back(&Package::Error(500, "I bims 1 Error".to_string()));
|
test_read_back(&Package::Error(500, "I bims 1 Error".to_string()));
|
||||||
|
|
Loading…
Reference in New Issue