concrete_core/specification/engines/
entity_deserialization.rs

1use super::engine_error;
2use crate::prelude::AbstractEntity;
3use crate::specification::engines::AbstractEngine;
4
5engine_error! {
6    EntityDeserializationError for EntityDeserializationEngine @
7}
8
9/// A trait for engines deserializing entities.
10///
11/// # Semantics
12///
13/// This [pure](super#operation-semantics) operation generates an entity containing the
14/// deserialization of the `serialized` type.
15pub trait EntityDeserializationEngine<Serialized, Entity>: AbstractEngine
16where
17    Entity: AbstractEntity,
18{
19    /// Deserializes an entity.
20    fn deserialize(
21        &mut self,
22        serialized: Serialized,
23    ) -> Result<Entity, EntityDeserializationError<Self::EngineError>>;
24
25    /// Unsafely deserializes an entity.
26    ///
27    /// # Safety
28    /// For the _general_ safety concerns regarding this operation, refer to the different variants
29    /// of [`EntityDeserializationError`]. For safety concerns _specific_ to an engine, refer to
30    /// the implementer safety section.
31    unsafe fn deserialize_unchecked(&mut self, serialized: Serialized) -> Entity;
32}