use std::rc::Rc;
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<Rc<str>>,
pub bordered: Option<Rc<str>>,
#[serde_as(as = "DefaultOnError")]
pub section: Section,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub enum Section {
Form(Rc<SectionForm>),
Hero(Rc<SectionHero>),
Post(Rc<SectionPost>),
Sponsor(Rc<SectionSponsor>),
Tiles(Rc<SectionTiles>),
#[default]
#[serde(other)]
Unknown,
}