use crate::device::device::Connector;
use crate::{ConnectState, FlowState};
use serde::{Deserialize, Serialize};
use std::fmt::{Debug, Formatter};
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Queue {
#[serde(default = "crate::device::shared::build_connect_to")]
pub connect_to: String,
}
impl Connector for Queue {
fn get_connect_to(&mut self, _state: &mut FlowState) -> ConnectState {
ConnectState::default(&self.connect_to, None)
}
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct QueueItem {
pub text: String,
#[serde(rename = "type")]
pub item_type: QueueItemType,
}
impl Debug for QueueItem {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_struct("QueueItem")
.field("text", &self.text)
.field("item_type", &self.item_type)
.finish()
}
}
impl Debug for Queue {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Queue")
.field("connect_to", &self.connect_to)
.finish()
}
}
#[derive(Serialize, Deserialize, Clone)]
pub enum QueueItemType {
#[serde(rename = "play")]
Play,
#[serde(rename = "say")]
Say,
#[serde(rename = "pause")]
Pause,
}
impl Debug for QueueItemType {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
QueueItemType::Play => write!(f, "QueueItemType::Play"),
QueueItemType::Say => write!(f, "QueueItemType::Say"),
QueueItemType::Pause => write!(f, "QueueItemType::Pause"),
}
}
}