DataContainer

Struct DataContainer 

Source
pub struct DataContainer {
    pub df: Arc<DataFrame>,
    pub df_original: Arc<DataFrame>,
    pub extension: Arc<FileExtension>,
    pub filter: Arc<DataFilter>,
    pub format: Arc<DataFormat>,
    pub sort: Vec<SortBy>,
}
Expand description

Container for the Polars DataFrame and its associated display and filter state.

§State Management:

  • Holds the core data (df, df_original) and related settings.
  • df: The currently displayed DataFrame, potentially sorted based on self.sort.
  • df_original: The DataFrame state immediately after loading/querying, before UI sorts.
  • filter: Configuration used for loading the data (path, delimiter, SQL query, etc.). Does NOT contain sorting information.
  • format: Configuration for displaying the data (alignment, decimals, etc.).
  • sort: Vec<SortBy> defining the active sort order applied to df. An empty Vec means df reflects df_original.
  • All key components are wrapped in Arc for efficient cloning and sharing between UI and async tasks.
  • Updates (load, format, sort) typically create new DataContainer instances via async methods.

§Interaction with layout.rs:

  • PolarsViewApp holds the current state as Option<Arc<DataContainer>>.
  • UI actions trigger async methods here (load_data, update_format, apply_sort).
  • Async methods return PolarsViewResult<DataContainer> via a channel.
  • layout.rs updates the app state with the received new container.

Fields§

§df: Arc<DataFrame>

The currently displayed Polars DataFrame. May be sorted according to self.sort.

§df_original: Arc<DataFrame>

A reference to the DataFrame state before any UI-driven sort was applied. Allows resetting the view efficiently.

§extension: Arc<FileExtension>

Detected file extension of the originally loaded data.

§filter: Arc<DataFilter>

Filters and loading configurations (path, query, delimiter) that resulted in the initial df_original. This does NOT store the current sort state.

§format: Arc<DataFormat>

Applied data formatting settings (decimal places, alignment, column sizing, header style).

§sort: Vec<SortBy>

The active sort criteria (column name and direction) applied to df. An empty vector signifies that df should be the same as df_original. Order in the vector determines sort precedence.

Implementations§

Source§

impl DataContainer

Source

pub async fn load_data( self, filter: DataFilter, format: DataFormat, ) -> PolarsViewResult<Self>

Asynchronously loads data or applies transformations based on DataFilter. Returns a new DataContainer state (taken and returned by value). This function coordinates the sequence of transformations using the Strategy pattern.

§Flow:
  1. Get the initial DataFrame value (either by reading file or cloning df_original) via prepare_initial_dataframe. This also updates self.extension, self.df_original, and filter.schema_without_index if a file was read.
  2. Build the pipeline vector transformations by pushing concrete strategy instances based on flags in the filter.
  3. Reset filter.apply_sql flag if SQL transformation was included in the pipeline.
  4. Execute the pipeline: Iterate through the transformations vector, calling apply on each, chaining the output DataFrame.
  5. Update the final filter.schema based on the DataFrame’s state after all transformations.
  6. Update self.df, self.filter, self.format, and reset self.sort with the results of this operation.
  7. Return the modified self.
Source

pub async fn update_format(self, format: DataFormat) -> PolarsViewResult<Self>

Asynchronously creates a new DataContainer with updated format settings. Preserves the existing data (df, df_original) and sort criteria (sort).

Triggered by layout.rs when format UI elements change. This is a very fast operation.

Source

pub async fn apply_sort( self, new_sort_criteria: Vec<SortBy>, ) -> PolarsViewResult<Self>

Asynchronously creates a new DataContainer with the df sorted according to the provided new_sort_criteria.

Triggered by layout.rs after a user clicks a sortable header, resulting in new criteria. Handles multi-column sorting based on the order, direction, and nulls_last settings in new_sort_criteria. If new_sort_criteria is empty, it resets the view by setting df to df_original.

§Logic & State Update:
  1. Check if new_sort_criteria is empty.
  2. Handle Empty (Reset): If empty, create new container:
    • df: Cloned Arc of the input df_original.
    • df_original: Cloned Arc of the input df_original.
    • sort: The empty new_sort_criteria vector.
    • Other fields cloned from input container.
  3. Handle Non-Empty (Apply Sort): If not empty: a. Extract column names, descending flags, and nulls_last flags from new_sort_criteria. b. Configure Polars SortMultipleOptions. c. Call data_container.df.sort() using the currently displayed df as input. d. Create new container:
    • df: New Arc wrapping the sorted DataFrame.
    • df_original: Cloned Arc of the input df_original.
    • sort: The new_sort_criteria that caused this sort.
    • Other fields cloned from input container.
  4. Return Ok(new_container).
Source

pub fn render_table(&self, ui: &mut Ui) -> Option<Vec<SortBy>>

Renders the main data table using egui_extras::TableBuilder. Handles sort interactions via render_table_header.

Returns Some(new_sort_criteria) if a header click requires a sort state update.

Trait Implementations§

Source§

impl Clone for DataContainer

Source§

fn clone(&self) -> DataContainer

Returns a duplicate 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 DataContainer

Source§

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

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

impl Default for DataContainer

Source§

fn default() -> Self

Creates an empty DataContainer with default settings.

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<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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn align() -> usize

The alignment necessary for the key. Must return a power of two.
Source§

fn size(&self) -> usize

The size of the key in bytes.
Source§

unsafe fn init(&self, ptr: *mut u8)

Initialize the key in the given memory location. Read more
Source§

unsafe fn get<'a>(ptr: *const u8) -> &'a T

Get a reference to the key from the given memory location. Read more
Source§

unsafe fn drop_in_place(ptr: *mut u8)

Drop the key in place. Read more
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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: 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> 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
Source§

impl<T> PlanCallbackArgs for T

Source§

impl<T> PlanCallbackOut for T