bevy_octopus 0.8.0

ECS based networking library for Bevy
Documentation
use bevy::prelude::{Reflect, Resource};
use serde::{Deserialize, Serialize};

use crate::{error::NetworkError, transformer::Transformer};

#[derive(Resource, Default, Reflect)]
pub struct JsonTransformer;

impl Transformer for JsonTransformer {
    const NAME: &'static str = "Json";

    fn encode<T: Serialize>(&self, data: &T) -> Result<Vec<u8>, NetworkError> {
        match serde_json::to_vec(data) {
            Ok(value) => Ok(value),
            Err(e) => Err(NetworkError::SerializeError(e.to_string())),
        }
    }

    fn decode<T: for<'a> Deserialize<'a>>(&self, bytes: &[u8]) -> Result<T, NetworkError> {
        match serde_json::from_slice(bytes) {
            Ok(value) => Ok(value),
            Err(e) => Err(NetworkError::DeserializeError(e.to_string())),
        }
    }
}