use crate::errors::{ErrorKind, Result};
use crate::one::property::PropertyType;
use crate::onestore::object::Object;
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct Color {
alpha: u8,
r: u8,
g: u8,
b: u8,
}
impl Color {
pub fn alpha(&self) -> u8 {
self.alpha
}
pub fn r(&self) -> u8 {
self.r
}
pub fn g(&self) -> u8 {
self.g
}
pub fn b(&self) -> u8 {
self.b
}
}
impl Color {
pub(crate) fn parse(prop_type: PropertyType, object: &Object) -> Result<Option<Color>> {
let value = match object.props().get(prop_type) {
Some(value) => value
.to_u32()
.ok_or_else(|| ErrorKind::MalformedOneNoteFileData("color is not a u32".into()))?,
None => return Ok(None),
};
let bytes = value.to_le_bytes();
Ok(Some(Color {
alpha: 255 - bytes[3],
r: bytes[0],
g: bytes[1],
b: bytes[2],
}))
}
}