concrete_core/specification/engines/
entity_serialization.rs

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