| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| use std::pin::Pin; |
| |
| use futures::Stream; |
| use tonic::transport::Server; |
| use tonic::{Request, Response, Status, Streaming}; |
| |
| use arrow_flight::{ |
| flight_service_server::FlightService, flight_service_server::FlightServiceServer, |
| Action, ActionType, Criteria, Empty, FlightData, FlightDescriptor, FlightInfo, |
| HandshakeRequest, HandshakeResponse, PutResult, SchemaResult, Ticket, |
| }; |
| |
| #[derive(Clone)] |
| pub struct FlightServiceImpl {} |
| |
| #[tonic::async_trait] |
| impl FlightService for FlightServiceImpl { |
| type HandshakeStream = Pin< |
| Box<dyn Stream<Item = Result<HandshakeResponse, Status>> + Send + Sync + 'static>, |
| >; |
| type ListFlightsStream = |
| Pin<Box<dyn Stream<Item = Result<FlightInfo, Status>> + Send + Sync + 'static>>; |
| type DoGetStream = |
| Pin<Box<dyn Stream<Item = Result<FlightData, Status>> + Send + Sync + 'static>>; |
| type DoPutStream = |
| Pin<Box<dyn Stream<Item = Result<PutResult, Status>> + Send + Sync + 'static>>; |
| type DoActionStream = Pin< |
| Box< |
| dyn Stream<Item = Result<arrow_flight::Result, Status>> |
| + Send |
| + Sync |
| + 'static, |
| >, |
| >; |
| type ListActionsStream = |
| Pin<Box<dyn Stream<Item = Result<ActionType, Status>> + Send + Sync + 'static>>; |
| type DoExchangeStream = |
| Pin<Box<dyn Stream<Item = Result<FlightData, Status>> + Send + Sync + 'static>>; |
| |
| async fn handshake( |
| &self, |
| _request: Request<Streaming<HandshakeRequest>>, |
| ) -> Result<Response<Self::HandshakeStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn list_flights( |
| &self, |
| _request: Request<Criteria>, |
| ) -> Result<Response<Self::ListFlightsStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn get_flight_info( |
| &self, |
| _request: Request<FlightDescriptor>, |
| ) -> Result<Response<FlightInfo>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn get_schema( |
| &self, |
| _request: Request<FlightDescriptor>, |
| ) -> Result<Response<SchemaResult>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn do_get( |
| &self, |
| _request: Request<Ticket>, |
| ) -> Result<Response<Self::DoGetStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn do_put( |
| &self, |
| _request: Request<Streaming<FlightData>>, |
| ) -> Result<Response<Self::DoPutStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn do_action( |
| &self, |
| _request: Request<Action>, |
| ) -> Result<Response<Self::DoActionStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn list_actions( |
| &self, |
| _request: Request<Empty>, |
| ) -> Result<Response<Self::ListActionsStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| |
| async fn do_exchange( |
| &self, |
| _request: Request<Streaming<FlightData>>, |
| ) -> Result<Response<Self::DoExchangeStream>, Status> { |
| Err(Status::unimplemented("Not yet implemented")) |
| } |
| } |
| |
| #[tokio::main] |
| async fn main() -> Result<(), Box<dyn std::error::Error>> { |
| let addr = "[::1]:50051".parse()?; |
| let service = FlightServiceImpl {}; |
| |
| let svc = FlightServiceServer::new(service); |
| |
| Server::builder().add_service(svc).serve(addr).await?; |
| |
| Ok(()) |
| } |