Skip to main content

ma_core/
service.rs

1//! Service trait for ma endpoint protocol handlers.
2//!
3//! A `Service` is analogous to an entry in `/etc/services`: a named protocol
4//! on a ma endpoint. Register services on an `MaEndpoint` to handle incoming
5//! connections on their protocol.
6
7/// Trait that all ma services must implement.
8///
9/// Each service declares its protocol identifier and provides a handler for
10/// incoming connections. Built-in services ship with ma-core; applications
11/// add custom services via this trait.
12///
13/// # Examples
14///
15/// ```
16/// use ma_core::Service;
17///
18/// struct MyService;
19///
20/// impl Service for MyService {
21///     fn protocol(&self) -> &[u8] { b"/ma/my-service/0.0.1" }
22/// }
23/// ```
24pub trait Service: Send + Sync {
25    /// The protocol identifier for this service.
26    fn protocol(&self) -> &[u8];
27}
28
29// ─── Well-known protocol constants (ma-core scope) ──────────────────────────
30
31pub const INBOX_PROTOCOL_ID: &str = "/ma/inbox/0.0.1";
32pub const INBOX_PROTOCOL: &[u8] = INBOX_PROTOCOL_ID.as_bytes();
33pub const BROADCAST_PROTOCOL: &[u8] = b"/ma/broadcast/0.0.1";
34pub const IPFS_PROTOCOL: &[u8] = b"/ma/ipfs/0.0.1";
35
36/// The well-known broadcast topic string (same path as [`BROADCAST_PROTOCOL`]).
37pub const BROADCAST_TOPIC: &str = "/ma/broadcast/0.0.1";
38
39// ─── Content types ──────────────────────────────────────────────────────────
40
41pub const CONTENT_TYPE_BROADCAST: &str = "application/x-ma-broadcast";
42pub const CONTENT_TYPE_MESSAGE: &str = "application/x-ma-message";
43pub const CONTENT_TYPE_IPFS_REQUEST: &str = "application/x-ma-ipfs-request";
44pub const CONTENT_TYPE_DOC: &str = "application/x-ma-doc";