use std::sync::Arc;
use serde::{Deserialize, Serialize};
use serde_with::{serde_as, DefaultOnError, VecSkipError};
use crate::stela::{Hero, Sidebar, SocialData, VisualSection};
#[serde_as]
#[derive(Debug, Deserialize, Serialize)]
pub struct Page {
#[serde_as(as = "DefaultOnError")]
pub title: Option<Arc<str>>,
#[serde_as(as = "DefaultOnError")]
pub lang: Option<Arc<str>>,
#[serde_as(as = "DefaultOnError")]
pub social: Option<Arc<SocialData>>,
#[serde_as(as = "DefaultOnError")]
pub layout: Option<PageLayout>,
#[serde_as(as = "DefaultOnError")]
pub hero: Option<Arc<Hero>>,
#[serde_as(as = "DefaultOnError")]
pub sidebar: Option<Arc<Sidebar>>,
#[serde_as(as = "VecSkipError<_>")]
#[serde(default)]
pub sections: Vec<VisualSection>,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub enum PageLayout {
List,
Tabbed,
#[default]
#[serde(other)]
Unknown,
}