use crate::recognizer::Language;
use crate::RequestId;
pub type RawMessage = String;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Event {
SessionStarted(RequestId),
SessionEnded(RequestId),
StartDetected(RequestId, Offset),
EndDetected(RequestId, Offset),
Recognizing(RequestId, Recognized, Offset, Duration, RawMessage),
Recognized(RequestId, Recognized, Offset, Duration, RawMessage),
UnMatch(RequestId, Offset, Duration, RawMessage),
}
pub type Offset = u64;
pub type Duration = u64;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Recognized {
pub text: String,
pub primary_language: Option<PrimaryLanguage>,
pub speaker_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum Confidence {
Low,
Normal,
High,
#[default]
Unknown,
}
impl From<&str> for Confidence {
fn from(value: &str) -> Self {
value.to_string().into()
}
}
impl From<String> for Confidence {
fn from(value: String) -> Self {
match value.to_lowercase().as_str() {
"low" => Confidence::Low,
"normal" => Confidence::Normal,
"high" => Confidence::High,
_ => Confidence::Unknown,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PrimaryLanguage {
pub language: Language,
pub confidence: Confidence,
}
impl PrimaryLanguage {
pub(crate) fn new(language: Language, confidence: Confidence) -> Self {
Self {
language,
confidence,
}
}
}