1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//! `FlatBuffers` serialization support for high-performance scenarios
//!
//! This module provides `FlatBuffers` serialization and deserialization for all
//! task-related types, enabling efficient data transfer and persistence in
//! performance-critical applications.
//!
//! `FlatBuffers` offers several advantages over JSON and other serialization formats:
//! - Zero-copy deserialization for optimal performance
//! - Compact binary format reducing storage and bandwidth requirements
//! - Schema evolution support for backwards/forwards compatibility
//! - Cross-platform compatibility with consistent byte ordering
//!
//! # Feature Requirements
//!
//! This module is only available when the `flatbuffers` feature is enabled:
//!
//! ```toml
//! [dependencies]
//! tcrm-task = { version = "0.3", features = ["flatbuffers"] }
//! ```
//!
//! # Examples
//!
//! ## Basic Config Serialization
//! ```rust
//! # #[cfg(feature = "flatbuffers")]
//! # {
//! use tcrm_task::tasks::config::TaskConfig;
//! use tcrm_task::flatbuffers::conversion::ToFlatbuffers;
//! use flatbuffers::FlatBufferBuilder;
//!
//! let config = TaskConfig::new("cmd").args(["/C", "echo", "hello"]);
//!
//! // Convert to FlatBuffer
//! let mut builder = FlatBufferBuilder::new();
//! let fb_config = config.to_flatbuffers(&mut builder);
//! builder.finish(fb_config, None);
//! let bytes = builder.finished_data();
//! println!("Serialized {} bytes", bytes.len());
//! # }
//! ```
//!
//! ## State Serialization
//! ```rust
//! # #[cfg(feature = "flatbuffers")]
//! # {
//! use tcrm_task::tasks::event::TaskTerminateReason;
//! use tcrm_task::flatbuffers::conversion::ToFlatbuffersUnion;
//! use flatbuffers::FlatBufferBuilder;
//!
//! let reason = TaskTerminateReason::Timeout;
//!
//! // Serialize terminate reason for logging
//! let mut builder = FlatBufferBuilder::new();
//! let (fb_reason, _offset) = reason.to_flatbuffers_union(&mut builder);
//! println!("Reason serialized: {:?}", fb_reason);
//! # }
//! ```