goosemusic 1.3.2

A music player with YouTube search, local playback, and OS media controls
//! Shared fetch-state wrapper: a slot is either loading, holding its
//! content, or carrying the error message from a failed fetch.

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum LoadState<T, E = String> {
    Ready(T),
    Failed(E),
    #[default]
    Loading,
}

impl<T, E> LoadState<T, E> {
    pub fn is_loading(&self) -> bool {
        matches!(self, Self::Loading)
    }
}