use crate::config::Config;
use crate::error;
use crate::transport::HttpTransport;
#[derive(Debug, Clone)]
pub struct SearchcraftClient {
pub(crate) transport: HttpTransport,
}
impl SearchcraftClient {
pub fn new(
endpoint_url: &str,
read_key: Option<impl Into<String>>,
ingest_key: Option<impl Into<String>>,
) -> error::Result<Self> {
let config = Config::new(endpoint_url, read_key, ingest_key)?;
Self::from_config(config)
}
pub fn from_config(config: Config) -> error::Result<Self> {
let transport = HttpTransport::new(config)?;
Ok(Self { transport })
}
#[must_use]
pub fn config(&self) -> &Config {
self.transport.config()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn client_creation_succeeds() {
let client = SearchcraftClient::new("https://api.example.com", Some("rk"), None::<String>);
assert!(client.is_ok());
}
#[test]
fn client_creation_fails_without_keys() {
let client =
SearchcraftClient::new("https://api.example.com", None::<String>, None::<String>);
assert!(client.is_err());
}
#[test]
fn client_from_config() {
let config = Config::new("https://api.example.com", Some("rk"), None::<String>).unwrap();
let client = SearchcraftClient::from_config(config);
assert!(client.is_ok());
}
}