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>;