style: extract error to src/error.rs

This commit is contained in:
2020-08-09 12:52:31 +08:00
parent 66b6ddda9c
commit 37a3df4392
2 changed files with 42 additions and 30 deletions

34
src/error.rs Normal file
View File

@@ -0,0 +1,34 @@
use std::fmt::{ self, Display, Formatter };
use std::error::Error;
#[derive(Debug)]
pub enum GetStreamError {
ReqwestError(reqwest::Error),
}
impl Display for GetStreamError {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
match self {
GetStreamError::ReqwestError(e) => write!(f, "{}", e),
}
}
}
impl Error for GetStreamError {
fn cause(&self) -> Option<&dyn Error> {
None
}
}
impl From<reqwest::Error> for GetStreamError {
fn from(reqwest_error: reqwest::Error) -> Self {
GetStreamError::ReqwestError(reqwest_error)
}
}
impl From<GetStreamError> for actix_http::error::Error {
fn from(get_stream_error: GetStreamError) -> Self {
failure!("Get stream error: {}", get_stream_error);
actix_http::error::Error::from(())
}
}

View File

@@ -1,42 +1,18 @@
#[macro_use]
extern crate rust_util;
mod error;
use std::pin::Pin;
use std::fmt::{ self, Display, Formatter };
use std::error::Error;
use std::task::{ Context, Poll };
use bytes::Bytes;
use clap::{ App, Arg };
use actix_web::{ web, HttpServer, HttpRequest, HttpResponse };
use error::*;
const DEFAULT_PORT: u16 = 8888;
#[derive(Debug)]
enum GetStreamError {
ReqwestError(reqwest::Error),
}
impl Display for GetStreamError {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "Unknown error!")
}
}
impl Error for GetStreamError {
fn cause(&self) -> Option<&dyn Error> {
None
}
}
impl From<reqwest::Error> for GetStreamError {
fn from(reqwest_error: reqwest::Error) -> Self {
GetStreamError::ReqwestError(reqwest_error)
}
}
impl From<GetStreamError> for actix_http::error::Error {
fn from(_: GetStreamError) -> Self { todo!() }
}
struct ProxyStream {
inner: Box<dyn futures_core::Stream<Item = reqwest::Result<Bytes>> + Unpin>,
@@ -60,6 +36,9 @@ impl futures_core::Stream for ProxyStream {
async fn get_file(req: HttpRequest) -> HttpResponse {
println!("{:?}", req);
let query_string = req.query_string();
println!("Q: {}", query_string);
// TODO parse url
let resp = reqwest::get("http://example.com/").await.unwrap();
HttpResponse::Ok()
.content_type("text/plain")
@@ -84,8 +63,7 @@ async fn main() -> std::io::Result<()> {
information!("Listen at: {}:{}", listen_addr, listen_port);
HttpServer::new(||
actix_web::App::new()
.service(web::resource("/get_file").to(get_file))
actix_web::App::new().service(web::resource("/get_file").to(get_file))
).bind(format!("{}:{}", listen_addr, listen_port))?
.run()
.await