Struct Model

Source
pub struct Model {
    pub spinner: Spinner,
    pub style: Style,
    /* private fields */
}
Expand description

Model represents the state and configuration of a spinner component.

The Model struct contains all the state needed to render and animate a spinner, including the animation frames, styling, current position, and unique identifier for message routing. This matches the Go bubbles spinner.Model for full compatibility.

§Fields

  • spinner - The Spinner configuration (frames and timing)
  • style - Lipgloss Style for visual formatting
  • frame - Current animation frame index (private)
  • id - Unique instance identifier for message routing (private)
  • tag - Message sequence number to prevent flooding (private)

§Examples

use bubbletea_widgets::spinner::{new, with_spinner, DOT};
use lipgloss_extras::prelude::*;

let mut spinner = new(&[
    with_spinner(DOT.clone())
]);

// Use in a bubbletea-rs application
let view = spinner.view(); // Returns current frame as a styled string

Fields§

§spinner: Spinner

Spinner settings to use.

§style: Style

Style sets the styling for the spinner.

Implementations§

Source§

impl Model

Source

pub fn new() -> Self

Creates a new spinner model with default settings.

Creates a spinner using the LINE animation with default styling. Each spinner instance gets a unique ID for message routing.

§Examples
use bubbletea_widgets::spinner::Model;

let spinner = Model::new();
assert!(spinner.id() > 0);
Source

pub fn new_with_options(opts: &[SpinnerOption]) -> Self

Creates a new spinner model with custom configuration options.

This function implements the options pattern to create a customized spinner. It matches Go’s New function exactly for API compatibility.

§Arguments
  • opts - Slice of SpinnerOption values to configure the spinner
§Examples
use bubbletea_widgets::spinner::{Model, with_spinner, DOT};

let spinner = Model::new_with_options(&[with_spinner(DOT.clone())]);
assert_eq!(spinner.spinner.frames.len(), 8);
Source

pub fn with_spinner(self, spinner: Spinner) -> Self

Sets the spinner animation configuration using builder pattern.

§Arguments
  • spinner - The Spinner configuration to use
§Examples
use bubbletea_widgets::spinner::{Model, DOT};

let spinner = Model::new().with_spinner(DOT.clone());
assert_eq!(spinner.spinner.frames.len(), 8);
Source

pub fn with_style(self, style: Style) -> Self

Sets the visual styling using builder pattern.

§Arguments
  • style - The lipgloss Style to apply
§Examples
use bubbletea_widgets::spinner::Model;
use lipgloss_extras::prelude::*;

let spinner = Model::new()
    .with_style(Style::new().foreground(Color::from("blue")));
Source

pub fn id(&self) -> i64

Returns the spinner’s unique identifier.

Each spinner instance has a unique ID used for message routing to ensure tick messages are delivered to the correct spinner. Matches Go’s ID() method for API compatibility.

§Examples
use bubbletea_widgets::spinner::Model;

let spinner1 = Model::new();
let spinner2 = Model::new();
assert_ne!(spinner1.id(), spinner2.id());
Source

pub fn tick_msg(&self) -> TickMsg

Creates a tick message to advance the spinner animation.

This method creates a TickMsg that can be sent through the bubbletea-rs message system to trigger the next animation frame. The message includes the current time, spinner ID, and tag for proper routing. Matches Go’s Tick() method for API compatibility.

§Examples
use bubbletea_widgets::spinner::Model;

let spinner = Model::new();
let tick_msg = spinner.tick_msg();
assert_eq!(tick_msg.id, spinner.id());
Source§

impl Model

Source

pub fn update(&mut self, msg: Msg) -> Option<Cmd>

Processes messages and updates the spinner state.

This is the standard bubbletea-rs update function that processes incoming messages. It handles TickMsg messages to advance the animation and ignores other message types. The function includes ID and tag validation to ensure proper message routing and prevent animation rate issues. Matches Go’s Update method exactly.

§Arguments
  • msg - The message to process
§Returns

Returns Some(Cmd) to schedule the next tick, or None if the message was ignored.

§Examples
use bubbletea_widgets::spinner::Model;

let mut spinner = Model::new();
let tick_msg = spinner.tick_msg();
let cmd = spinner.update(Box::new(tick_msg));
assert!(cmd.is_some()); // Should return next tick command
Source

pub fn view(&self) -> String

Renders the current spinner frame as a styled string.

This method returns the current animation frame with styling applied. It’s the standard bubbletea-rs view function that produces the visual output. Matches Go’s View method exactly.

§Returns

Returns the styled string representation of the current frame. Returns “(error)” if the frame index is invalid.

§Examples
use bubbletea_widgets::spinner::{new, with_spinner, LINE};

let spinner = new(&[with_spinner(LINE.clone())]);
let output = spinner.view();
assert_eq!(output, "|"); // First frame of LINE spinner

Trait Implementations§

Source§

impl Debug for Model

Source§

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

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

impl Default for Model

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Model for Model

Source§

fn init() -> (Self, Option<Cmd>)

Initialize the model with its initial state and optional startup command. Read more
Source§

fn update(&mut self, msg: Msg) -> Option<Cmd>

Update the model in response to a received message. Read more
Source§

fn view(&self) -> String

Render the current model state as a string for terminal display. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
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, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
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> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. 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<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.