use crate::Map;
use alloc::{string::String, vec::Vec};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum PrimitiveShape {
        String,
        U64,
        I64,
        F32,
        F64,
        Bool,
        #[default]
    Null,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
pub enum PrimitiveShapeType {
        Primitive(PrimitiveShape),
        NestedPrimitive(ShapePrimitive),
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
pub enum ShapeType {
        Primitive(PrimitiveShape),
        Array(Vec<PrimitiveShapeType>),
        Nested(Shape),
}
pub type ShapePrimitive = Map<String, PrimitiveShape>;
pub type Shape = Map<String, ShapeType>;