Skip to main content

imsg_map/
lib.rs

1//! MAP protocol logic — commands, folder navigation, MNS server, and iOS quirks.
2
3pub mod client;
4pub mod folders;
5pub mod messages;
6pub mod mns_event;
7pub mod mns_server;
8pub mod params;
9pub mod quirks;
10pub mod xml;
11
12pub use formats::bmessage::{BMessage, BMessageError, MessageStatus, MessageType};
13pub use formats::xml::{FolderEntry, FolderListing, XmlError};
14
15pub use obex_core::client::ObexError;
16pub use obex_core::TransportError;
17use thiserror::Error;
18
19/// MAP client/MNS errors — OBEX, transport, server response, parse, input validation, and encoding.
20#[derive(Debug, Error)]
21pub enum MapError {
22    /// Wraps [`ObexError`]; packet decode, invalid OBEX state, or PUT missing handle.
23    #[error("OBEX: {0}")]
24    Obex(#[from] ObexError),
25    /// Wraps [`TransportError`]; stream closed, framing error, or Bluetooth I/O fault.
26    #[error("transport: {0}")]
27    Transport(#[from] TransportError),
28    /// Remote device returned a non-OK response opcode.
29    #[error("server returned error opcode {0:#04x}")]
30    ServerError(u8),
31    /// Transport stream ended before a complete packet was received.
32    #[error("unexpected end of stream")]
33    UnexpectedEof,
34    /// Message listing XML response could not be parsed.
35    #[error("message listing parse error: {0}")]
36    MessageListing(#[from] xml::MessageListingError),
37    /// Response body exceeded the 4 MiB safety ceiling.
38    #[error("response body too large")]
39    ResponseTooLarge,
40    /// Response body is not valid UTF-8.
41    #[error("response body is not UTF-8")]
42    InvalidEncoding,
43    /// bMessage body could not be parsed.
44    #[error("invalid bMessage: {0}")]
45    InvalidMessage(#[from] BMessageError),
46    /// PUT response was OK but contained no Name header; remote did not assign a handle.
47    #[error("push message response missing handle")]
48    MissingHandle,
49    /// Caller-supplied input violated a MAP protocol constraint.
50    #[error("invalid input: {0}")]
51    InvalidInput(&'static str),
52    /// Folder listing XML response could not be parsed.
53    #[error("folder listing parse error: {0}")]
54    FolderListing(#[from] XmlError),
55}