use std::rc::Rc;
use serde::{Deserialize, Serialize};
use crate::stela::Modal;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct VisualMotion {
pub title: Option<Rc<str>>,
pub icon: Option<MotionIcon>,
pub initial_toggle: Option<bool>,
pub variant: MotionVariant,
pub color: MotionColor,
pub motion: Motion,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub enum MotionIcon {
Comment,
Like,
Moderation,
Pin,
Share,
Toggle,
#[default]
#[serde(other)]
Unknown,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub enum MotionVariant {
Button,
ButtonBorder,
Link,
LinkHoverButton,
LinkHoverButtonBorder,
#[default]
#[serde(other)]
Unknown,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub enum MotionColor {
Primary,
Secondary,
Text,
#[default]
#[serde(other)]
Unknown,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub enum Motion {
ApiCall(Rc<MotionApiCall>),
Href(Rc<MotionHref>),
Share(Rc<MotionShare>),
Submit(Rc<MotionSubmit>),
#[default]
#[serde(other)]
Unknown,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionApiCall {
pub new_toggle: Option<bool>,
pub modal: Option<Rc<Modal>>,
pub redirect: Option<Rc<str>>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionHref {
pub uri: Rc<str>,
pub new_tab: Option<bool>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionShare {
pub title: Option<Rc<str>>,
pub text: Option<Rc<str>>,
pub url: Option<Rc<str>>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionSubmit {}