bh1750_embedded/error.rs
1//! Error types for the BH1750 driver.
2//!
3//! This module defines the [`Error`] type that can occur when interacting
4//! with the BH1750 sensor. The error type is generic over the underlying
5//! I2C error type, allowing it to work with any `embedded-hal` I2C
6//! implementation.
7//!
8//! # Example: Error Handling
9//!
10//! ```
11//! use bh1750_embedded::{Address, Bh1750, Error, MeasurementTime, Resolution};
12//!
13//! # fn example<I2C, D, E>(i2c: I2C, delay: D) -> Result<(), Error<E>>
14//! # where
15//! # I2C: embedded_hal::i2c::I2c<Error = E>,
16//! # D: embedded_hal::delay::DelayNs,
17//! # E: embedded_hal::i2c::Error,
18//! # {
19//! let mut sensor = Bh1750::new(i2c, delay, Address::Low);
20//!
21//! match sensor.one_time_measurement(Resolution::High) {
22//! Ok(lux) => {
23//! // Use the lux value
24//! # let _ = lux;
25//! }
26//! Err(Error::I2c(_e)) => {
27//! // Handle I2C communication error
28//! }
29//! Err(Error::MeasurementTimeOutOfRange) => {
30//! // Handle invalid measurement time
31//! }
32//! }
33//! # Ok(())
34//! # }
35//! ```
36//!
37//! # Example: Validating Measurement Time
38//!
39//! ```
40//! use bh1750_embedded::{Error, MeasurementTime};
41//!
42//! // This will succeed (value in range 31..=254)
43//! let valid_mt = MeasurementTime::new(100);
44//! assert!(valid_mt.is_some());
45//!
46//! // This will fail (value out of range)
47//! let invalid_mt = MeasurementTime::new(10);
48//! assert!(invalid_mt.is_none());
49//! ```
50
51use embedded_hal::i2c as ehal;
52
53/// Driver error.
54#[derive(Debug, Clone, Copy, PartialEq, Eq)]
55pub enum Error<E> {
56 /// Underlying I2C bus error.
57 I2c(E),
58 /// Measurement time register was outside the allowed range.
59 MeasurementTimeOutOfRange,
60}
61
62impl<E> From<E> for Error<E> {
63 fn from(e: E) -> Self {
64 Self::I2c(e)
65 }
66}
67
68impl<E> ehal::Error for Error<E>
69where
70 E: ehal::Error,
71{
72 fn kind(&self) -> ehal::ErrorKind {
73 match self {
74 Self::I2c(e) => e.kind(),
75 Self::MeasurementTimeOutOfRange => ehal::ErrorKind::Other,
76 }
77 }
78}