sapi_lite/tts/speech/
mod.rs1use std::borrow::{Borrow, Cow};
2
3use windows as Windows;
4use Windows::Win32::Media::Speech::{SPF_IS_NOT_XML, SPF_IS_XML, SPF_PARSE_SAPI};
5
6mod builder;
7mod types;
8
9pub use builder::SpeechBuilder;
10pub use types::{Pitch, Rate, SayAs, Volume};
11
12#[derive(Debug, PartialEq, Eq, Clone)]
14pub enum Speech<'s> {
15 Text(Cow<'s, str>),
17 Xml(Cow<'s, str>),
19}
20
21impl<'s> Speech<'s> {
22 pub(crate) fn flags(&self) -> u32 {
23 (match self {
24 Self::Text(_) => SPF_IS_NOT_XML.0,
25 Self::Xml(_) => (SPF_IS_XML.0 | SPF_PARSE_SAPI.0),
26 }) as u32
27 }
28
29 pub(crate) fn contents(&self) -> &str {
30 match self {
31 Self::Text(cow) => cow.borrow(),
32 Self::Xml(cow) => cow.borrow(),
33 }
34 }
35}
36
37impl<'s> From<&'s str> for Speech<'s> {
38 fn from(s: &'s str) -> Self {
39 Self::Text(s.into())
40 }
41}
42
43impl<'s> From<String> for Speech<'s> {
44 fn from(s: String) -> Self {
45 Self::Text(s.into())
46 }
47}
48
49impl<'s> From<&'s Speech<'s>> for Speech<'s> {
50 fn from(s: &'s Speech<'s>) -> Self {
51 match s {
52 Speech::Text(s) => Self::Text(Cow::Borrowed(s.borrow())),
53 Speech::Xml(s) => Self::Xml(Cow::Borrowed(s.borrow())),
54 }
55 }
56}