use secrecy::SecretString;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum HeyGenQuality {
Low,
Medium,
High,
}
pub struct HeyGenConfig {
pub api_key: SecretString,
pub api_base_url: String,
pub quality: HeyGenQuality,
pub push_to_talk: bool,
pub idle_timeout_secs: Option<u32>,
}
impl HeyGenConfig {
pub fn new(api_key: impl Into<String>) -> Self {
Self {
api_key: SecretString::from(api_key.into()),
api_base_url: "https://api.heygen.com".to_string(),
quality: HeyGenQuality::High,
push_to_talk: false,
idle_timeout_secs: None,
}
}
pub fn with_quality(mut self, quality: HeyGenQuality) -> Self {
self.quality = quality;
self
}
pub fn with_push_to_talk(mut self, enabled: bool) -> Self {
self.push_to_talk = enabled;
self
}
pub fn with_idle_timeout(mut self, secs: u32) -> Self {
self.idle_timeout_secs = Some(secs);
self
}
pub fn with_base_url(mut self, url: impl Into<String>) -> Self {
self.api_base_url = url.into();
self
}
}
impl std::fmt::Debug for HeyGenConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("HeyGenConfig")
.field("api_key", &"[REDACTED]")
.field("api_base_url", &self.api_base_url)
.field("quality", &self.quality)
.field("push_to_talk", &self.push_to_talk)
.field("idle_timeout_secs", &self.idle_timeout_secs)
.finish()
}
}