Skip to main content

edge_tts_rust/
types.rs

1use std::collections::BTreeMap;
2
3use bytes::Bytes;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8pub enum Boundary {
9    Word,
10    Sentence,
11}
12
13impl Boundary {
14    pub(crate) fn metadata_flags(self) -> (&'static str, &'static str) {
15        match self {
16            Boundary::Word => ("true", "false"),
17            Boundary::Sentence => ("false", "true"),
18        }
19    }
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
23pub struct VoiceTag {
24    #[serde(rename = "ContentCategories", default)]
25    pub content_categories: Vec<String>,
26    #[serde(rename = "VoicePersonalities", default)]
27    pub voice_personalities: Vec<String>,
28}
29
30impl Default for VoiceTag {
31    fn default() -> Self {
32        Self {
33            content_categories: Vec::new(),
34            voice_personalities: Vec::new(),
35        }
36    }
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct Voice {
41    #[serde(rename = "Name")]
42    pub name: String,
43    #[serde(rename = "ShortName")]
44    pub short_name: String,
45    #[serde(rename = "Gender")]
46    pub gender: String,
47    #[serde(rename = "Locale")]
48    pub locale: String,
49    #[serde(rename = "SuggestedCodec", default)]
50    pub suggested_codec: Option<String>,
51    #[serde(rename = "FriendlyName", default)]
52    pub friendly_name: Option<String>,
53    #[serde(rename = "Status", default)]
54    pub status: Option<String>,
55    #[serde(rename = "VoiceTag", default)]
56    pub voice_tag: VoiceTag,
57    #[serde(flatten)]
58    pub extra: BTreeMap<String, Value>,
59}
60
61#[derive(Debug, Clone, PartialEq, Eq)]
62pub struct BoundaryEvent {
63    pub kind: Boundary,
64    pub offset_ticks: u64,
65    pub duration_ticks: u64,
66    pub text: String,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq)]
70pub enum SynthesisEvent {
71    Audio(Bytes),
72    Boundary(BoundaryEvent),
73}
74
75#[derive(Debug, Clone, PartialEq, Eq)]
76pub struct SynthesisResult {
77    pub audio: Vec<u8>,
78    pub boundaries: Vec<BoundaryEvent>,
79}