Skip to main content

WorkInterval

Struct WorkInterval 

Source
pub struct WorkInterval {
    pub start: NaiveDateTime,
    pub end: NaiveDateTime,
    pub duration: Duration,
    pub pause_after: Option<usize>,
}
Expand description

Represents a single continuous work interval between breaks.

This structure captures a period of uninterrupted work time, providing the foundation for productivity analysis and reporting. Each interval represents a focused work session bounded by either the workday start/end or pause periods.

§Interval Boundaries

Work intervals are defined by:

  • Start Time: When focused work began (workday start or end of previous pause)
  • End Time: When focused work ended (start of next pause or workday end)
  • Duration: Total time spent in focused work during this period

§Pause Association

Each interval can be associated with the pause that follows it:

  • Some(index): Index of the pause that ended this work interval
  • None: This interval extends to the end of the workday

This association enables:

  • Analysis of work-break patterns
  • Identification of interruption causes
  • Optimization recommendations for pause timing

§Usage Context

Work intervals are used for:

  • Productivity calculation and analysis
  • Generating detailed work reports
  • Identifying optimization opportunities
  • Visualizing work patterns in charts and graphs

Fields§

§start: NaiveDateTime

The timestamp when this work interval began.

This is either the workday start time (for the first interval) or the end time of the previous pause (for subsequent intervals). Represents the moment when focused work activity resumed.

§end: NaiveDateTime

The timestamp when this work interval ended.

This is either the start time of the next pause (for most intervals) or the workday end time (for the final interval). Represents the moment when focused work was interrupted or completed.

§duration: Duration

The total duration of focused work during this interval.

Calculated as end - start, this represents the net productive time during this period. Used for productivity calculations, efficiency analysis, and time accounting in reports.

§pause_after: Option<usize>

Optional reference to the pause that follows this interval.

Contains the index of the pause in the original pause collection that ended this work interval. None indicates this interval extends to the end of the workday without interruption.

§Usage Notes

  • Used for analyzing work-break patterns
  • Enables identification of frequent interruption points
  • Supports optimization recommendations for pause timing
  • Links intervals to specific causes of work interruption

Implementations§

Source§

impl WorkInterval

Source

pub fn is_short(&self, min_minutes: u64) -> bool

Determines if this interval is shorter than the specified minimum duration.

This method is used to identify “short intervals” that may indicate excessive interruptions or poor work habits. Short intervals often represent brief periods of work between frequent breaks, which can significantly impact overall productivity.

§Usage in Analysis

Short intervals are identified for:

  • Productivity Analysis: Understanding interruption patterns
  • Optimization Recommendations: Suggesting pause consolidation
  • Work Habit Assessment: Identifying areas for improvement
  • Focus Period Analysis: Measuring sustained work capability
§Threshold Considerations

Common minimum duration thresholds:

  • 15 minutes: Very strict, identifies micro-interruptions
  • 30 minutes: Moderate, focuses on meaningful work blocks
  • 60 minutes: Lenient, identifies only major fragmentation
§Arguments
  • min_minutes - Minimum duration threshold in minutes
§Returns

Returns true if the interval duration is less than the threshold.

§Examples
use kasl::libs::report::WorkInterval;
use chrono::{Duration, Local};

let start_time = Local::now().naive_local();
let interval = WorkInterval {
    start: start_time,
    end: start_time + Duration::minutes(20),
    duration: Duration::minutes(20),
    pause_after: Some(1),
};

assert_eq!(interval.is_short(30), true);  // 20 < 30
assert_eq!(interval.is_short(15), false); // 20 >= 15

Trait Implementations§

Source§

impl Clone for WorkInterval

Source§

fn clone(&self) -> WorkInterval

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for WorkInterval

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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>,

Source§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more