use tonic::{Request, Response, Status};
use actix_web::web::Data;
use crate::service::resolver_service::ResolverService;
pub mod resolver_proto {
tonic::include_proto!("resolver");
}
use resolver_proto::resolver_service_server::ResolverService as ResolverServiceTrait;
pub use resolver_proto::resolver_service_server::ResolverServiceServer;
use resolver_proto::{ResolverRequest, ResolverResponse};
pub struct ResolverHandler {
resolver_service: Data<ResolverService>,
}
impl ResolverHandler {
pub fn new(resolver_service: Data<ResolverService>) -> Self {
Self { resolver_service }
}
}
#[tonic::async_trait]
impl ResolverServiceTrait for ResolverHandler {
async fn resolve(
&self,
request: Request<ResolverRequest>,
) -> Result<Response<ResolverResponse>, Status> {
let req = request.into_inner();
let result = self.resolver_service.resolve_name(&req.address).await;
match result {
Some(resolved_address) => {
Ok(Response::new(ResolverResponse {
address: req.address,
content: resolved_address,
}))
}
None => Err(Status::not_found("Address not found")),
}
}
}
#[cfg(test)]
mod tests {
#[test]
fn test_handler_creation() {
assert!(true);
}
}