Trait hecs::serialize::DeserializeContext[][src]

pub trait DeserializeContext {
    fn deserialize_entity<'de, M>(
        &mut self,
        map: M,
        entity: &mut EntityBuilder
    ) -> Result<(), M::Error>
    where
        M: MapAccess<'de>
; }

Implements deserialization of entities from a serde MapAccess into an EntityBuilder

Data external to the World can be populated during deserialization by storing mutable references inside the struct implementing this trait.

Example

use hecs::{*, serialize::*};

// Could include references to external state for use by `deserialize_entity`
struct Context;
#[derive(Serialize, Deserialize)]
enum ComponentId { Position, Velocity }

impl DeserializeContext for Context {
    fn deserialize_entity<'de, M>(
        &mut self,
        mut map: M,
        entity: &mut EntityBuilder,
    ) -> Result<(), M::Error>
    where
        M: serde::de::MapAccess<'de>,
    {
        while let Some(key) = map.next_key()? {
            match key {
                ComponentId::Position => {
                    entity.add::<Position>(map.next_value()?);
                }
                ComponentId::Velocity => {
                    entity.add::<Velocity>(map.next_value()?);
                }
            }
        }
        Ok(())
    }
}

Required methods

fn deserialize_entity<'de, M>(
    &mut self,
    map: M,
    entity: &mut EntityBuilder
) -> Result<(), M::Error> where
    M: MapAccess<'de>, 
[src]

Deserialize a single entity

Loading content...

Implementors

Loading content...