use std::sync::Arc;
use serde::{Deserialize, Serialize};
use serde_with::{serde_as, DefaultOnError};
pub use section_form::*;
pub use section_hero::*;
pub use section_post::*;
pub use section_sponsor::*;
pub use section_tiles::*;
mod section_form;
mod section_hero;
mod section_post;
mod section_sponsor;
mod section_tiles;
#[serde_as]
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct VisualSection {
pub title: Option<String>,
pub bordered: Option<bool>,
#[serde_as(as = "DefaultOnError")]
pub section: Section,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub enum Section {
Form(Arc<SectionForm>),
Hero(Arc<SectionHero>),
Post(Arc<SectionPost>),
Sponsor(Arc<SectionSponsor>),
Tiles(Arc<SectionTiles>),
#[default]
#[serde(other)]
Unknown,
}