Implementing a tonic Service
use tonic::{Request, Response, Status};
use myapp::v1::task_service_server::TaskService;
use myapp::v1::{GetTaskRequest, Task, WatchTaskRequest, TaskEvent};
#[derive(Debug, Default)]
pub struct TaskServiceImpl {
tasks: Arc<RwLock<HashMap<String, Task>>>,
}
#[tonic::async_trait]
impl TaskService for TaskServiceImpl {
async fn get_task(
&self,
request: Request<GetTaskRequest>,
) -> Result<Response<Task>, Status> {
let tasks = self.tasks.read().await;
let task = tasks.get(&request.into_inner().id)
.ok_or_else(|| Status::not_found("task not found"))?;
Ok(Response::new(task.clone()))
}
}