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
//! Rust access library to read/write iChen<sup>®</sup> 4 Open Protocol<sup>™</sup> messages. //! //! Details on the protocol can be found [here](https://github.com/chenhsong/OpenProtocol/blob/master/cs/doc/messages_reference.md). //! //! Notes on Usage //! ============== //! //! Beware that all data types defined in this crate use borrowed string slices (i.e. `&str`) extensively. //! This is because the most common usage pattern is to create a data variable, set fields, immediately //! serialize it into JSON, then dispose of the data variable. The deserialization story is similar. //! //! Error values also borrow heavily from the input fields as these errors are expected to be handled //! as soon as possible. //! //! The result is minimal allocations and copying, but at the cost of stricter lifetime management, //! especially when deserializing -- the message struct cannot out-live the original JSON text string as //! fields are borrowed extensively from the original JSON string. //! //! Another implication due to extensive usage of borrowed string slices is that string literals with //! escape sequences will cause parsing errors because the actual string cannot be simply borrowed from //! the original JSON string. Luckily this is extremely rare for most fields holding names, ID's etc. //! For this reason, only certain user-defined text fields (such as `job_card_id`) may contain //! escaped characters (especially the double-quote); those are therefore modeled using `Cow<&str>` instead. // Modules mod controller; mod error; mod filters; mod messages; mod types; mod utils; /// Result type. /// pub type Result<'a, T> = std::result::Result<T, OpenProtocolError<'a>>; // Re-exports pub use controller::{Controller, GeoLocation, Operator}; pub use error::OpenProtocolError; pub use filters::Filters; pub use messages::*; pub use types::{JobMode, Language, OpMode};