use std::sync::Arc;
use serde::{Deserialize, Serialize};
use crate::stela::Modal;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct VisualMotion {
pub title: Option<String>,
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 {
ChatCircle,
GlobeHemisphereWest,
Heart,
Plus,
PushPin,
ShareFat,
Shield,
SignIn,
SignOut,
Toggle,
Flag,
UserCircle,
#[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(Arc<MotionApiCall>),
Href(Arc<MotionHref>),
Share(Arc<MotionShare>),
Submit(Arc<MotionSubmit>),
#[default]
#[serde(other)]
Unknown,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionApiCall {
pub data: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionApiCallResponse {
pub new_toggle: Option<bool>,
pub modal: Option<Arc<Modal>>,
pub redirect: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionHref {
pub uri: String,
pub new_tab: Option<bool>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionShare {
pub title: Option<String>,
pub text: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MotionSubmit {}