feat: change how key works

This commit is contained in:
Ladislav Hano 2024-10-06 12:59:27 +02:00
parent 5c9033a502
commit ddf5b39fe8

View file

@ -1,9 +1,10 @@
use std::collections::HashSet;
use std::env;
use dotenv::dotenv;
use json::JsonValue; use json::JsonValue;
use std::collections::HashSet;
use crate::tenor_types::TenorError; use crate::tenor_types::TenorError;
use crate::tenor_types::{ContentFilter, ArRange, MediaFilter}; use crate::tenor_types::{ContentFilter, ArRange, MediaFilter};
pub struct Tenor { pub struct Tenor {
@ -34,11 +35,18 @@ pub struct Tenor {
/// Use a non-zero, non-empty value from next, returned by the API response, to get the next set of results /// Use a non-zero, non-empty value from next, returned by the API response, to get the next set of results
pos: Option<String>, pos: Option<String>,
/// Tenor api key to be used in queries /// Tenor api key to be used in queries
key: Option<String> key: String
} }
impl Tenor { impl Tenor {
pub fn new() -> Self { pub fn new() -> Result<Self, TenorError> {
dotenv().ok();
let key = match env::var("TENORV2_TOKEN") {
Ok(key) => key,
Err(_) => return Err(TenorError::KeyError("Could not find TENORV2_TOKEN".to_string()))
};
Ok(
Tenor { Tenor {
country: None, country: None,
locale: None, locale: None,
@ -48,8 +56,9 @@ impl Tenor {
random: None, random: None,
limit: None, limit: None,
pos: None, pos: None,
key: None key
} }
)
} }
/// Replaces current country with the passed one /// Replaces current country with the passed one
@ -117,20 +126,15 @@ impl Tenor {
} }
pub fn key(mut self, key: String) -> Self { pub fn key(mut self, key: String) -> Self {
self.key = Some(key); self.key = key;
self self
} }
pub async fn search(self, query: &str) -> Result<JsonValue, TenorError> { pub async fn search(self, query: &str) -> Result<JsonValue, TenorError> {
let q: String = form_urlencoded::byte_serialize(query.as_bytes()).collect(); let q: String = form_urlencoded::byte_serialize(query.as_bytes()).collect();
let base_url = "https://tenor.googleapis.com/v2/search?"; let base_url = "https://tenor.googleapis.com/v2/search?";
let api_key = match self.key {
Some(key) => key,
None => return Err(TenorError::KeyError("API key undefined".into()))
};
let mut request = format!("{base_url}q={q}&key={api_key}"); let mut request = format!("{}q={}&key={}", base_url, q, self.key);
if self.country.is_some() { if self.country.is_some() {
request.push_str(&format!("&country={}", self.country.unwrap())); request.push_str(&format!("&country={}", self.country.unwrap()));