From 8cd4b4b10f67d3860bd63676a48329a966409a2a Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 24 Apr 2024 11:23:36 -0400 Subject: [PATCH] feat(grpc): call walk_dir from grpc service --- proto/juno.proto | 9 +++++++++ src/grpc/client.rs | 10 ++++++---- src/grpc/server.rs | 26 +++++++++++++++++++++++++- src/main.rs | 5 +---- 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/proto/juno.proto b/proto/juno.proto index c4cc39e..aad85d6 100644 --- a/proto/juno.proto +++ b/proto/juno.proto @@ -4,6 +4,7 @@ package juno; service JunoRequest { rpc Ping (PingRequestMessage) returns (PingResponseMessage); + rpc GetFiles (GetFilesRequest) returns (GetFilesResponse); } message PingRequestMessage { @@ -12,3 +13,11 @@ message PingRequestMessage { message PingResponseMessage { string message = 1; } + +message GetFilesRequest { + string path = 1; +} + +message GetFilesResponse { + repeated string files = 1; +} diff --git a/src/grpc/client.rs b/src/grpc/client.rs index a4488f6..68f3d65 100644 --- a/src/grpc/client.rs +++ b/src/grpc/client.rs @@ -1,7 +1,7 @@ use super::grpc_juno; use grpc_juno::juno_request_client::JunoRequestClient; -use grpc_juno::PingRequestMessage; +use grpc_juno::GetFilesRequest; use tonic::async_trait; use tonic::Request; @@ -21,11 +21,13 @@ impl super::Connection for GRPCClient { async fn connect(&self) -> Result<(), Box> { let mut client = JunoRequestClient::connect(format!("http://{}", self.address)).await?; - let request = Request::new(PingRequestMessage {}); + let request = Request::new(GetFilesRequest { + path: "/home/aleidk/Music/".to_string(), + }); - let response = client.ping(request).await?; + let response = client.get_files(request).await?.into_inner(); - println!("RESPONSE={:?}", response); + println!("RESPONSE={:?}", response.files); Ok(()) } diff --git a/src/grpc/server.rs b/src/grpc/server.rs index 28afafb..b7cb6d4 100644 --- a/src/grpc/server.rs +++ b/src/grpc/server.rs @@ -1,8 +1,12 @@ +use crate::file_explorer; + use super::grpc_juno; use grpc_juno::juno_request_server::{JunoRequest, JunoRequestServer}; -use grpc_juno::{PingRequestMessage, PingResponseMessage}; +use grpc_juno::{GetFilesRequest, GetFilesResponse, PingRequestMessage, PingResponseMessage}; use std::error::Error; use std::net::SocketAddr; +use std::path::PathBuf; +use std::str::FromStr; use tonic::transport::Server; use tonic::{async_trait, Request, Response, Result, Status}; @@ -29,6 +33,26 @@ impl JunoRequest for GRPCServer { Ok(Response::new(reply)) } + + async fn get_files( + &self, + request: Request, + ) -> Result, Status> { + let path = PathBuf::from_str(request.into_inner().path.as_str()) + .expect("Failed to create pathbuf"); + + let files = match file_explorer::walk_dir(&path) { + Ok(files) => files, + Err(_err) => panic!("Error reading path: {:?}", path), + }; + eprintln!("DEBUGPRINT[2]: server.rs:44: files={:#?}", files); + + let reply = GetFilesResponse { + files: files.iter().map(|x| x.display().to_string()).collect(), + }; + + Ok(Response::new(reply)) + } } #[async_trait] diff --git a/src/main.rs b/src/main.rs index 167b791..0717a75 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use core::panic; use std::{env, path::PathBuf}; use clap::Parser; @@ -20,10 +21,6 @@ async fn main() -> Result<(), Box> { .path .unwrap_or(env::current_dir().expect("Current directory is not available.")); - let files = file_explorer::walk_dir(&path).expect("error"); - - eprintln!("DEBUGPRINT[4]: main.rs:20: files={:#?}", files.len()); - let server = grpc::run()?; server.connect().await?;