feagi_agent/command_and_control/
feagi_message.rs1use crate::command_and_control::agent_embodiment_configuration_message::AgentEmbodimentConfigurationMessage;
2use crate::command_and_control::agent_registration_message::AgentRegistrationMessage;
3use crate::command_and_control::health_check_message::HealthCheckMessage;
4use crate::command_and_control::messages::burst_engine::BurstEnginesMessage;
5use crate::FeagiAgentError;
6use feagi_io::AgentID;
7use feagi_serialization::FeagiByteContainer;
8use feagi_structures::FeagiJSON;
9use serde::{Deserialize, Serialize};
10
11#[allow(clippy::large_enum_variant)]
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
14#[serde(rename_all = "snake_case")]
15pub enum FeagiMessage {
16 HeartBeat,
17 AgentRegistration(AgentRegistrationMessage),
18 HealthCheck(HealthCheckMessage),
19 AgentConfiguration(AgentEmbodimentConfigurationMessage),
20 BurstEngine(BurstEnginesMessage),
21}
22
23impl FeagiMessage {
24 pub fn serialize_to_byte_container(
25 &self,
26 container: &mut FeagiByteContainer,
27 session_id: AgentID,
28 increment_value: u16,
29 ) -> Result<(), FeagiAgentError> {
30 let json: serde_json::Value = serde_json::to_value(self).unwrap();
31 let feagi_json: FeagiJSON = FeagiJSON::from_json_value(json);
32 container.overwrite_byte_data_with_single_struct_data(&feagi_json, increment_value)?;
33 container.set_agent_identifier(session_id)?;
34 Ok(())
35 }
36}
37
38impl TryFrom<&FeagiByteContainer> for FeagiMessage {
41 type Error = FeagiAgentError;
42 fn try_from(value: &FeagiByteContainer) -> Result<Self, Self::Error> {
43 let serialized_data = value.try_create_new_struct_from_index(0)?;
44 let feagi_json: FeagiJSON = serialized_data.try_into()?;
45 let json = feagi_json.borrow_json_value().clone();
46 serde_json::from_value(json)
47 .map_err(|err| FeagiAgentError::UnableToDecodeReceivedData(err.to_string()))
48 }
49}
50
51impl From<FeagiMessage> for FeagiByteContainer {
53 fn from(message: FeagiMessage) -> Self {
54 let json: serde_json::Value = serde_json::to_value(&message).unwrap();
55 let feagi_json: FeagiJSON = FeagiJSON::from_json_value(json);
56 let mut byte_container: FeagiByteContainer = FeagiByteContainer::new_empty();
57 byte_container
58 .overwrite_byte_data_with_single_struct_data(&feagi_json, 0)
59 .unwrap();
60 byte_container
61 }
62}