use std::marker::PhantomData;
#[allow(unused_imports)]
use log::{debug, error, info, warn};
use crate::message::Message;
pub mod client;
pub mod request_id;
pub mod server;
pub(super) mod wrappers;
pub use request_id::*;
use wrappers::*;
pub use server::*;
pub use client::*;
pub trait Service {
type Request: Message;
type Response: Message;
fn request_type_name(&self) -> &str;
fn response_type_name(&self) -> &str;
}
pub struct AService<Q, S>
where
Q: Message,
S: Message,
{
q: PhantomData<Q>,
s: PhantomData<S>,
req_type_name: String,
resp_type_name: String,
}
impl<Q, S> AService<Q, S>
where
Q: Message,
S: Message,
{
pub fn new(req_type_name: String, resp_type_name: String) -> Self {
Self {
req_type_name,
resp_type_name,
q: PhantomData,
s: PhantomData,
}
}
}
impl<Q, S> Service for AService<Q, S>
where
Q: Message,
S: Message,
{
type Request = Q;
type Response = S;
fn request_type_name(&self) -> &str {
&self.req_type_name
}
fn response_type_name(&self) -> &str {
&self.resp_type_name
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ServiceMapping {
Basic,
Enhanced,
Cyclone,
}