Skip to main content

Exporter

Struct Exporter 

Source
pub struct Exporter { /* private fields */ }
Expand description

Main export handler responsible for orchestrating data export operations.

The Exporter struct encapsulates the export format, output destination, and provides methods for exporting different types of data. It handles the complete export pipeline from data gathering to file generation.

§Design Philosophy

The Exporter follows a builder pattern for configuration and uses method dispatch for different export operations. This design provides flexibility while maintaining type safety and clear separation of concerns.

Implementations§

Source§

impl Exporter

Source

pub fn new(format: ExportFormat, output_path: Option<PathBuf>) -> Self

Creates a new Exporter instance with specified format and optional output path.

This constructor sets up the export configuration and determines the output file path. If no custom path is provided, it generates a default filename based on the current timestamp and selected format.

§Default File Naming

When no output path is specified, the constructor generates a filename using:

  • Prefix: “kasl_export_”
  • Timestamp: YYYYMMDD_HHMMSS format
  • Extension: Format-appropriate extension (.csv, .json, .xlsx)

Example default names:

  • kasl_export_20250115_143022.csv
  • kasl_export_20250115_143022.json
  • kasl_export_20250115_143022.xlsx
§Path Validation

The constructor validates that:

  • Custom paths have appropriate file extensions
  • Parent directories exist or can be created
  • Write permissions are available
§Arguments
  • format - The desired export format (CSV, JSON, or Excel)
  • output_path - Optional custom output path; generates default if None
§Returns

Returns a configured Exporter instance ready for export operations.

§Examples
use kasl::libs::export::{Exporter, ExportFormat};
use std::path::PathBuf;

// Create exporter with default filename
let exporter = Exporter::new(ExportFormat::Csv, None);

// Create exporter with custom path
let custom_path = PathBuf::from("reports/daily_report.xlsx");
let exporter = Exporter::new(ExportFormat::Excel, Some(custom_path));
Source

pub fn hourly(self, hourly: bool) -> Self

Enables or disables the hourly (SiServer-style) daily report layout.

This builder-style method toggles the hourly breakdown rendering for daily reports. It only affects Excel report exports; other formats and data types ignore this flag.

§Arguments
  • hourly - Whether to render the report as an hourly grid
§Returns

Returns the modified Exporter for method chaining.

Source

pub async fn export(&self, data_type: ExportData, date: NaiveDate) -> Result<()>

Main export dispatcher that routes to appropriate export handlers based on data type.

This method serves as the primary interface for export operations, determining which specific export handler to invoke based on the requested data type. It provides a unified interface while delegating to specialized methods.

§Export Process Flow
  1. Data Type Analysis: Determine which export handler to invoke
  2. Data Gathering: Collect relevant information from the database
  3. Format Processing: Apply format-specific transformations
  4. File Generation: Write the formatted data to the output file
  5. Validation: Verify export completeness and file integrity
§Arguments
  • data_type - The category of data to export (Report, Tasks, Summary, All)
  • date - The target date for data collection and filtering
§Returns

Returns Ok(()) on successful export completion, or an error if any step in the export process fails.

§Examples
use kasl::libs::export::{Exporter, ExportFormat, ExportData};
use chrono::NaiveDate;

let exporter = Exporter::new(ExportFormat::Json, None);
let date = NaiveDate::from_ymd_opt(2025, 1, 15).unwrap();
exporter.export(ExportData::Report, date).await?;

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