use std::rc::Rc;
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<Rc<str>>,
#[serde_as(as = "DefaultOnError")]
pub lang: Option<Rc<str>>,
#[serde_as(as = "DefaultOnError")]
pub social: Option<Rc<SocialData>>,
#[serde_as(as = "DefaultOnError")]
pub layout: Option<PageLayout>,
#[serde_as(as = "DefaultOnError")]
pub hero: Option<Rc<Hero>>,
#[serde_as(as = "DefaultOnError")]
pub sidebar: Option<Rc<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,
}