use core::ffi::CStr;
use flipperzero_sys::{self as sys, furi::UnsafeRecord};
pub use sys::DolphinStats as Stats;
mod deed;
pub use deed::{App, Deed};
#[derive(Clone)]
pub struct Dolphin {
record: UnsafeRecord<sys::Dolphin>,
}
impl Dolphin {
pub const NAME: &CStr = c"dolphin";
pub fn open() -> Self {
Self {
record: unsafe { UnsafeRecord::open(Self::NAME) },
}
}
#[inline]
pub fn as_ptr(&self) -> *mut sys::Dolphin {
self.record.as_ptr()
}
pub fn deed(&mut self, deed: Deed) {
unsafe { sys::dolphin_deed(deed.to_raw()) };
}
pub fn stats(&mut self) -> Stats {
unsafe { sys::dolphin_stats(self.as_ptr()) }
}
pub fn upgrade_level(&mut self) -> bool {
let ready = self.stats().level_up_is_pending;
if ready {
unsafe { sys::dolphin_upgrade_level(self.as_ptr()) };
}
ready
}
pub fn flush(&mut self) {
unsafe { sys::dolphin_flush(self.as_ptr()) };
}
}