mirror of
https://github.com/fossasia/badgemagic-rs
synced 2025-07-27 13:53:58 +00:00
Compare commits
1 commit
4efb6895de
...
eea9315514
Author | SHA1 | Date | |
---|---|---|---|
|
eea9315514 |
1 changed files with 5 additions and 39 deletions
|
@ -1,5 +1,7 @@
|
||||||
//! Protocol used to update the badge
|
//! Protocol used to update the badge
|
||||||
|
|
||||||
|
use std::num::TryFromIntError;
|
||||||
|
|
||||||
#[cfg(feature = "embedded-graphics")]
|
#[cfg(feature = "embedded-graphics")]
|
||||||
use embedded_graphics::{
|
use embedded_graphics::{
|
||||||
draw_target::DrawTarget,
|
draw_target::DrawTarget,
|
||||||
|
@ -9,7 +11,6 @@ use embedded_graphics::{
|
||||||
primitives::Rectangle,
|
primitives::Rectangle,
|
||||||
Drawable,
|
Drawable,
|
||||||
};
|
};
|
||||||
use std::{convert::Infallible, num::TryFromIntError};
|
|
||||||
use time::OffsetDateTime;
|
use time::OffsetDateTime;
|
||||||
use zerocopy::{BigEndian, FromBytes, Immutable, IntoBytes, KnownLayout, U16};
|
use zerocopy::{BigEndian, FromBytes, Immutable, IntoBytes, KnownLayout, U16};
|
||||||
|
|
||||||
|
@ -195,7 +196,7 @@ pub enum Mode {
|
||||||
/// Display Brightness
|
/// Display Brightness
|
||||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(try_from = "f32", into = "u8"))]
|
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
|
||||||
pub enum Brightness {
|
pub enum Brightness {
|
||||||
#[default]
|
#[default]
|
||||||
Full = 0x00,
|
Full = 0x00,
|
||||||
|
@ -212,6 +213,7 @@ impl From<Brightness> for u8 {
|
||||||
|
|
||||||
impl TryFrom<u8> for Brightness {
|
impl TryFrom<u8> for Brightness {
|
||||||
type Error = TryFromIntError;
|
type Error = TryFromIntError;
|
||||||
|
|
||||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||||
Ok(match value {
|
Ok(match value {
|
||||||
0x00 => Self::Full,
|
0x00 => Self::Full,
|
||||||
|
@ -223,32 +225,6 @@ impl TryFrom<u8> for Brightness {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Brightness> for f32 {
|
|
||||||
fn from(value: Brightness) -> Self {
|
|
||||||
match value {
|
|
||||||
Brightness::Full => 1.0,
|
|
||||||
Brightness::ThreeQuarters => 0.75,
|
|
||||||
Brightness::Half => 0.5,
|
|
||||||
Brightness::OneQuarter => 0.5,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TryFrom<f32> for Brightness {
|
|
||||||
type Error = Infallible;
|
|
||||||
fn try_from(value: f32) -> Result<Self, Self::Error> {
|
|
||||||
if value < 0.375 {
|
|
||||||
Ok(Self::OneQuarter)
|
|
||||||
} else if value < 0.625 {
|
|
||||||
Ok(Self::Half)
|
|
||||||
} else if value < 0.875 {
|
|
||||||
Ok(Self::ThreeQuarters)
|
|
||||||
} else {
|
|
||||||
Ok(Self::Full)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const MSG_PADDING_ALIGN: usize = 64;
|
const MSG_PADDING_ALIGN: usize = 64;
|
||||||
|
|
||||||
const MAGIC: [u8; 5] = *b"wang\0";
|
const MAGIC: [u8; 5] = *b"wang\0";
|
||||||
|
@ -563,7 +539,7 @@ mod test {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn u8_to_brightness_and_back() {
|
fn brightness_to_u8_and_back() {
|
||||||
const VALID_BRIGHTNESS_VALUES: [u8; 4] = [0x00, 0x10, 0x20, 0x30];
|
const VALID_BRIGHTNESS_VALUES: [u8; 4] = [0x00, 0x10, 0x20, 0x30];
|
||||||
for i in u8::MIN..u8::MAX {
|
for i in u8::MIN..u8::MAX {
|
||||||
if let Ok(brightness) = Brightness::try_from(i) {
|
if let Ok(brightness) = Brightness::try_from(i) {
|
||||||
|
@ -573,14 +549,4 @@ mod test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn f32_to_brightness_and_back() {
|
|
||||||
const VALID_BRIGHTNESS_VALUES: [f32; 4] = [0.25, 0.5, 0.75, 1.0];
|
|
||||||
for i in i8::MIN..i8::MAX {
|
|
||||||
let i = i as f32 / 4f32;
|
|
||||||
let Ok(brightness) = Brightness::try_from(i);
|
|
||||||
assert!(VALID_BRIGHTNESS_VALUES.contains(&(f32::from(brightness))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue