Struct firefly_types::Stats

source ·
pub struct Stats {
    pub minutes: [u32; 4],
    pub longest_play: [u32; 4],
    pub launches: [u32; 4],
    pub installed_on: (u16, u8, u8),
    pub launched_on: (u16, u8, u8),
}
Expand description

Player-specific app stats, like playtime.

Fields§

§minutes: [u32; 4]

How many minutes the app was played for every player count from 1 to 4+.

Games with more than 4 players are recorded as 4 players. So, the last index (3) is “4+ players”.

The play time is calculated based on the number of the calls to the update callback. So, the number is an approximation and may drift a bit.

Plays shorter than 1 minute are not recorded.

§longest_play: [u32; 4]

How many minutes the app was played the longest for every player count from 1 to 4+.

Use this metric carefully. The runtime might or might not account for players pausing the app for days instead of exiting it. Which means, multiple play sessions may be counted as one.

§launches: [u32; 4]

How many times the app was launched for every player count from 1 to 4+.

§installed_on: (u16, u8, u8)

The date when the app was installed.

The date is a tuple of year, month, and day of month.

§launched_on: (u16, u8, u8)

The date when the app was launched last time.

The date is a tuple of year, month, and day of month.

Implementations§

source§

impl Stats

source

pub fn decode(s: &[u8]) -> Result<Self, Error>

Load stats from bytes generated by Stats::encode.

§Errors

May return an error if the buffer does not contain valid stats.

source

pub fn encode<'b>(&self, buf: &'b mut [u8]) -> Result<&'b mut [u8], Error>

Encode the stats using the buffer.

The buffer is required to avoid allocations on the crate side. Use Stats::size to calculate the required buffer size.

§Errors

May return an error if the buffer is not big enough.

source

pub fn size(&self) -> usize

Calculate the buffer size required to encode the stats.

Trait Implementations§

source§

impl Clone for Stats

source§

fn clone(&self) -> Stats

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Stats

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Stats

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl PartialEq for Stats

source§

fn eq(&self, other: &Stats) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Stats

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for Stats

Auto Trait Implementations§

§

impl Freeze for Stats

§

impl RefUnwindSafe for Stats

§

impl Send for Stats

§

impl Sync for Stats

§

impl Unpin for Stats

§

impl UnwindSafe for Stats

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,