Skip to main content

memlink_protocol/
lib.rs

1//! MemLink Protocol - Binary protocol definitions for high-performance IPC.
2
3#![no_std]
4#![allow(missing_docs)]
5#![allow(clippy::missing_safety_doc)]
6#![warn(missing_debug_implementations)]
7#![deny(unused_qualifications)]
8
9extern crate alloc;
10
11pub mod error;
12pub mod header;
13pub mod magic;
14pub mod types;
15pub mod request;
16pub mod response;
17pub mod emsg;
18pub mod serializer;
19pub mod msgpack;
20pub mod config;
21pub mod shm;
22pub mod zero;
23pub mod arena;
24pub mod shandle;
25pub mod sproto;
26pub mod chunk;
27pub mod version;
28pub mod features;
29pub mod negotiation;
30
31pub use error::{ProtocolError, Result};
32pub use header::MessageHeader;
33pub use magic::*;
34pub use types::*;
35pub use emsg::ErrorMessage;
36pub use request::Request;
37pub use response::Response;
38pub use msgpack::{default_serializer, MessagePackSerializer, MSGPACK};
39pub use serializer::Serializer;
40pub use config::SerializerConfig;
41pub use shm::ShmView;
42pub use zero::{ZeroCopyRequest, ZeroCopyResponse};
43pub use arena::ArenaSlice;
44pub use shandle::{StreamHandle, StreamError};
45pub use sproto::*;
46pub use version::{ProtocolVersion, CURRENT_VERSION, MAX_VERSION, MIN_VERSION, SUPPORTED_VERSIONS, V1_0, V1_1, V1_2};
47pub use features::{has_feature, FEATURE_NONE};
48pub use negotiation::{negotiate_version, validate_version};
49
50pub mod prelude {
51    pub use crate::arena::{ArenaConfig, ArenaRef, ArenaSlice};
52    pub use crate::chunk::{Chunk, ChunkFlags, ChunkedStream};
53    pub use crate::config::SerializerConfig;
54    pub use crate::error::{ProtocolError, Result};
55    pub use crate::features::{has_feature, feature_flags, FEATURE_NONE, BATCHING, STREAMING};
56    pub use crate::header::MessageHeader;
57    pub use crate::magic::{
58        CONTROL_REGION_SIZE, HEADER_SIZE, MAX_PAYLOAD_SIZE, MEMLINK_MAGIC, MIN_PROTOCOL_VERSION,
59        PROTOCOL_VERSION,
60    };
61    pub use crate::msgpack::{default_serializer, MessagePackSerializer, MSGPACK};
62    pub use crate::negotiation::{negotiate_version, validate_version};
63    pub use crate::serializer::Serializer;
64    #[cfg(feature = "shm")]
65    pub use crate::shm::{
66        RingBuffer, ShmPriority, Platform, MmapSegment, ControlRegion,
67        Futex, PriorityRingBuffer, ShmTransport,
68    };
69    pub use crate::shm::{is_aligned, ShmView, SHM_ALIGNMENT};
70    pub use crate::shandle::{StreamHandle, StreamError};
71    pub use crate::sproto::{
72        StreamState, StreamMode, STREAM_HANDLE_SIZE, STREAM_HEADER_SIZE,
73        DEFAULT_STREAM_TIMEOUT_NS, MAX_STREAM_TIMEOUT_NS,
74    };
75    pub use crate::types::{
76        MethodHash, MessageType, ModuleId, Priority, RequestId, SpanId, StatusCode, TraceId,
77    };
78    pub use crate::version::{
79        ProtocolVersion, CURRENT_VERSION, MAX_VERSION, MIN_VERSION, SUPPORTED_VERSIONS, V1_0, V1_1,
80        V1_2,
81    };
82    pub use crate::zero::{ZeroCopyRequest, ZeroCopyResponse};
83    pub use crate::{ErrorMessage, Request, Response};
84}