import type {Observable} from 'rxjs';

export type CreateSliceOptions<T> = {
  initialValue: T;
};

export type CreateSliceType<T> = {
  /**
   * Return deltas on every update to slice
   */
  valueChanges: Observable<T>;
  /**
   * Returns the current value of slice
   */
  getValue: () => T;
  /**
   * Callback to update the value inside the slice.
   */
  update: (state: Partial<T>) => void;
  /**
   * Reset the data with initial value
   */
  reset: () => void;
  /**
   * Destroy the slice and closure data associated with it
   */
  destroy: () => void;
};