serde_network_message.rs

Overview

This file provides custom serialization and deserialization implementations for the NetworkMessage enum using the serde framework. It defines how instances of NetworkMessage are converted to and from a serialized form, such as JSON or binary formats, ensuring that the variant type and associated data are properly encoded and decoded.

The primary purpose of this file is to enable interoperability of NetworkMessage instances across network boundaries or storage, where messages must be serialized before transmission or persistence and deserialized upon reception or retrieval.

Detailed Explanation

Serialization of NetworkMessage

Serialize trait implementation

impl Serialize for NetworkMessage {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    { ... }
}

Deserialization of NetworkMessage

Deserialize trait implementation

impl<'de> Deserialize<'de> for NetworkMessage {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: de::Deserializer<'de>,
    { ... }
}

NetworkMessageVisitor Struct and Implementation

NetworkMessageVisitor struct

struct NetworkMessageVisitor;

impl NetworkMessageVisitor {
    pub fn new() -> Self {
        Self {}
    }
}

Visitor trait implementation

impl<'de> de::Visitor<'de> for NetworkMessageVisitor {
    type Value = NetworkMessage;

    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { ... }

    fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
    where
        A: de::EnumAccess<'de>,
    { ... }
}

Implementation Details and Algorithms

Interactions with Other Parts of the System

Visual Diagram

classDiagram
class NetworkMessage {
<<enum>>
+Candidate
+Ack
+Nack
+ExternalMessage
+NodeJoining
+BlockAttestation
+BlockRequest
+SyncFrom
+SyncFinalized
+ResentCandidate
+AuthoritySwitchProtocol
+InnerCommand
}
class Serialize {
+serialize()
}
class Deserialize {
+deserialize()
}
class NetworkMessageVisitor {
+new()
+expecting()
+visit_enum()
}
NetworkMessage <|.. Serialize
NetworkMessage <|.. Deserialize
Deserialize --> NetworkMessageVisitor : uses

The diagram illustrates the central NetworkMessage enum and its serialization (Serialize) and deserialization (Deserialize) implementations, highlighting the role of NetworkMessageVisitor in deserialization.