use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Agent {
pub id: String,
pub role: String,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Cue {
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub byte_start: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub byte_end: Option<i32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CueLine {
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub cue: Vec<Cue>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Line {
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<f64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StructuredLyrics {
pub lang: String,
pub synced: bool,
pub line: Vec<Line>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_artist: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub agents: Option<Vec<Agent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cue_line: Option<Vec<CueLine>>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LyricsList {
#[serde(default)]
pub structured_lyrics: Vec<StructuredLyrics>,
}