chromakitx 1.0.2

A comprehensive color manipulation library for Rust
Documentation
// SPDX-FileCopyrightText: 2023 CELESTIFYX Team
// SPDX-License-Identifier: GPL-3.0-or-later

use super::{
    AnsiColor,
    CssColor,
    TextStyle,
    XtermColor,
    CustomColor,
    NamedColor
};

use crate::ColorFormattable;

#[derive(Debug, Clone, PartialEq)]
pub enum AnyColor {
    Ansi(AnsiColor),
    Css(CssColor),
    Style(TextStyle),
    Xterm(XtermColor),
    Custom(CustomColor),
    Named(NamedColor)
}

impl ColorFormattable for AnyColor {
    fn format(&self, is_background: bool) -> String {
        match self {
            AnyColor::Ansi(c)   => c.format(is_background),
            AnyColor::Css(c)    => c.format(is_background),
            AnyColor::Style(c)  => c.format(is_background),
            AnyColor::Xterm(c)  => c.format(is_background),
            AnyColor::Custom(c) => c.format(is_background),
            AnyColor::Named(c)  => c.format(is_background)
        }
    }
}

impl From<AnsiColor> for AnyColor {
    fn from(c: AnsiColor) -> Self {
        AnyColor::Ansi(c)
    }
}

impl From<CssColor> for AnyColor {
    fn from(c: CssColor) -> Self {
        AnyColor::Css(c)
    }
}

impl From<TextStyle> for AnyColor {
    fn from(c: TextStyle) -> Self {
        AnyColor::Style(c)
    }
}

impl From<XtermColor> for AnyColor {
    fn from(c: XtermColor) -> Self {
        AnyColor::Xterm(c)
    }
}

impl From<CustomColor> for AnyColor {
    fn from(c: CustomColor) -> Self {
        AnyColor::Custom(c)
    }
}

impl From<NamedColor> for AnyColor {
    fn from(c: NamedColor) -> Self {
        AnyColor::Named(c)
    }
}