sdmmc_core/response.rs
1//! Response types for SD/MMC bus protocols.
2
3use crate::response_enum;
4
5pub mod sd;
6pub mod sdio;
7pub mod spi;
8
9mod end;
10mod start;
11mod types;
12
13pub use end::*;
14pub use start::*;
15pub use types::*;
16
17response_enum! {
18 /// Represents the top-level SD/MMC response types.
19 ///
20 /// # Example
21 ///
22 /// ```rust
23 /// use sdmmc_core::response::{sd, Response, ResponseMode, ResponseType};
24 ///
25 /// let r1 = sd::r1::R1::new();
26 /// let sd_r1 = sd::Response::from(r1);
27 /// let res = Response::from(sd_r1);
28 ///
29 /// assert_eq!(sd_r1, sd::Response::R1(r1));
30 /// assert_eq!(res, Response::Sd(sd_r1));
31 ///
32 /// assert_eq!(sd_r1.into_r1(), Ok(r1));
33 /// assert_eq!(res.into_sd(), Ok(sd_r1));
34 ///
35 /// assert_eq!(r1.response_type(), ResponseType::R1);
36 /// assert_eq!(r1.response_mode(), ResponseMode::Sd);
37 ///
38 /// assert_eq!(r1.response_type(), sd_r1.response_type());
39 /// assert_eq!(r1.response_mode(), sd_r1.response_mode());
40 ///
41 /// assert_eq!(r1.response_type(), res.response_type());
42 /// assert_eq!(r1.response_mode(), res.response_mode());
43 /// ```
44 Response {
45 default: Sd(sd::Response),
46 Sd(sd::Response),
47 Sdio(sdio::Response),
48 Spi(spi::Response),
49 }
50}