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}