charming 0.6.0

A visualization library for Rust
Documentation
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)]
#[serde(untagged)]
#[serde(rename_all = "camelCase")]
pub enum CellSize {
    Single(InnerCellType),
    Double((InnerCellType, InnerCellType)),
}

#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)]
pub enum InnerCellType {
    Num(f64),
    String(String),
}

impl From<&str> for InnerCellType {
    fn from(value: &str) -> Self {
        Self::String(value.to_string())
    }
}

impl From<String> for InnerCellType {
    fn from(value: String) -> Self {
        Self::String(value)
    }
}

impl From<i32> for InnerCellType {
    fn from(value: i32) -> Self {
        Self::Num(value.into())
    }
}

impl From<f64> for InnerCellType {
    fn from(value: f64) -> Self {
        Self::Num(value)
    }
}

impl<V> From<V> for CellSize
where
    V: Into<InnerCellType>,
{
    fn from(value: V) -> Self {
        Self::Single(value.into())
    }
}

impl<V, W> From<(V, W)> for CellSize
where
    V: Into<InnerCellType>,
    W: Into<InnerCellType>,
{
    fn from(value: (V, W)) -> Self {
        Self::Double((value.0.into(), value.1.into()))
    }
}