use std::rc::Rc;
use communication::{event::Event, sync::SyncRequest};
use transport::{kafka::KafkaTransport, Transport};
pub mod communication;
pub mod transport;
pub struct KafkaConfig {
brokers: String,
group_id: String,
}
pub enum TransportType {
Kafka(KafkaConfig),
}
pub struct Config {
transport: TransportType,
}
pub struct Client {
syncSender: SyncRequest,
eventSender: Event,
}
impl Client {
pub fn new(config: Config) -> Self {
let transport = Rc::new(match config.transport {
TransportType::Kafka(config) => KafkaTransport::new(&config.brokers, &config.group_id),
});
Client {
syncSender: SyncRequest::new(Rc::clone(&transport) as Rc<dyn Transport>),
eventSender: Event::new(Rc::clone(&transport) as Rc<dyn Transport>, false),
}
}
}
pub fn add(left: usize, right: usize) -> usize {
left + right
}
#[cfg(test)]
mod tests {
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use super::*;
#[derive(Serialize)]
struct TestRequest {
request_id: Option<String>,
field: String,
}
#[derive(Deserialize)]
struct TestResponse {
field: String,
}
#[tokio::test]
async fn it_works<'a>() {
let client = Client::new(Config {
transport: TransportType::Kafka(KafkaConfig {
brokers: "".to_string(),
group_id: "base".to_string(),
}),
});
client
.eventSender
.send::<TestRequest>(
"test",
HashMap::new(),
TestRequest {
request_id: None,
field: "".to_string(),
},
)
.await;
}
}