elevenlabs_api/
elevenlabs.rs

1use serde::{Deserialize, Serialize};
2use ureq::{Agent, AgentBuilder};
3
4#[derive(Clone, Debug, Serialize, Deserialize)]
5pub struct Auth {
6    pub api_key: String,
7}
8
9impl Auth {
10    pub fn new(api_key: &str) -> Auth {
11        Auth {
12            api_key: api_key.to_string(),
13        }
14    }
15
16    pub fn from_env() -> Result<Self, String> {
17        let api_key = std::env::var("ELEVENLABS_API_KEY")
18            .map_err(|_| "Missing ELEVENLABS_API_KEY".to_string())?;
19        Ok(Self { api_key })
20    }
21}
22
23#[derive(Clone, Debug)]
24pub struct Elevenlabs {
25    pub auth: Auth,
26    pub api_url: String,
27    pub(crate) agent: Agent,
28}
29
30impl Elevenlabs {
31    pub fn new(auth: Auth, api_url: &str) -> Elevenlabs {
32        Elevenlabs {
33            auth,
34            api_url: api_url.to_string(),
35            agent: AgentBuilder::new().build(),
36        }
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn new_test_elevenlabs() {
46        let auth = Auth::from_env().unwrap();
47        let elevenlabs = Elevenlabs::new(auth, "https://api.elevenlabs.io/v1");
48
49        assert_eq!(elevenlabs.api_url, "https://api.elevenlabs.io/v1");
50    }
51}