embedded_interfaces/
lib.rs1#![doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/README.md"))]
4#![cfg_attr(not(feature = "std"), no_std)]
5#[cfg(not(any(feature = "sync", feature = "async")))]
6compile_error!("You must enable at least one of the create features `sync` or `async`");
7
8pub use bitvec;
10pub use bytemuck;
11pub use const_format;
12
13pub mod bitdump;
14pub mod commands;
15pub mod i2c;
16pub mod packable;
17pub mod registers;
18pub mod spi;
19
20#[derive(Debug, thiserror::Error)]
22pub enum TransportError<CodecError, BusError> {
23    #[error("codec error")]
25    Codec(CodecError),
26    #[error("unexpected: {0}")]
28    Unexpected(&'static str),
29    #[error("bus error")]
31    Bus(#[from] BusError),
32}
33
34#[cfg(feature = "std")]
37pub trait BitdumpFormattable {
38    fn bitdump(&self) -> bitdump::BitdumpFormatter;
40}
41
42#[cfg(feature = "std")]
43impl BitdumpFormattable for () {
44    fn bitdump(&self) -> bitdump::BitdumpFormatter {
45        bitdump::BitdumpFormatter::new("()".to_string(), vec![], vec![])
46    }
47}
48
49#[cfg(feature = "std")]
50pub trait MaybeBitdumpFormattable: crate::BitdumpFormattable {}
53
54#[cfg(feature = "std")]
55impl<T: crate::BitdumpFormattable> MaybeBitdumpFormattable for T {}
57
58#[cfg(not(feature = "std"))]
59pub trait MaybeBitdumpFormattable {}
62
63#[cfg(not(feature = "std"))]
64impl<T> MaybeBitdumpFormattable for T {}
66
67pub mod codegen {
68    pub use embedded_interfaces_codegen::*;
70}