Compare commits

..

No commits in common. "b22b5f81c79309b8115c049421c0f8eba1ac6a7a" and "1427f37b1cac144ae40061878e792c9c42dad2d2" have entirely different histories.

2 changed files with 27 additions and 50 deletions

View File

@ -17,4 +17,4 @@ askama_actix = "0.11.1"
env_logger = "0.8.4" env_logger = "0.8.4"
serde = "1.0.126" serde = "1.0.126"
futures = "0.3.15" futures = "0.3.15"
tokio = {version = "0.2.25", features = ["time", "process", "io-util"]} tokio = {version = "0.2.25", features = ["time", "process"]}

View File

@ -25,10 +25,9 @@ use actix_web::http::{header, StatusCode};
use std::io; use std::io;
use std::collections::HashMap; use std::collections::HashMap;
use std::io::{Read, BufRead, Write, ErrorKind}; use std::io::{Read, BufRead, Write, ErrorKind};
use futures::{Stream, StreamExt, TryStreamExt, future, stream, TryFutureExt, pin_mut}; use futures::{Stream, StreamExt, TryStreamExt, future, stream, TryFutureExt};
use actix_web::web::{Buf, Bytes}; use actix_web::web::{Buf, Bytes};
use actix_web::http::header::IntoHeaderValue; use actix_web::http::header::IntoHeaderValue;
use actix_web::client::PayloadError;
#[derive(Template)] #[derive(Template)]
#[template(path = "hello.html")] #[template(path = "hello.html")]
@ -173,9 +172,7 @@ async fn git_proto(payload : web::Payload, web::Path((owner, reponame)): web::Pa
let mut input = p.stdin.take().unwrap(); let mut input = p.stdin.take().unwrap();
payload.try_for_each(|bytes| { payload.try_for_each(|bytes| {
// println!("{:?}", bytes); // println!("{:?}", bytes);
let write_all = input.write_all(bytes.bytes()); input.write_all(bytes.bytes()).map_err(|e| actix_web::client::PayloadError::Io(e))
let res = write_all.map_err(|e| actix_web::client::PayloadError::Io(e));
return res;
// future::ready(Ok(())) // future::ready(Ok(()))
}).await; }).await;
println!("input sent"); println!("input sent");
@ -246,51 +243,31 @@ async fn git_proto(payload : web::Payload, web::Path((owner, reponame)): web::Pa
//let mut body = Vec::new(); //let mut body = Vec::new();
//rdr.bytes() //rdr.bytes()
// let stream = stream::try_unfold(0, |state| async move { let response = builder.streaming(stream::try_unfold(0, |_useless| async move {
// let mut buff : [u8; 1024] = [0; 1024];
// if state <= 2 { rdr.read(&mut buff[..]).await.map(|l| {
// let next_state = state + 1; print!("{}", String::from_utf8_lossy(&buff[0..l]));
// let yielded = state * 2; Some(Bytes::copy_from_slice(&buff[0..l]))
// Ok(Some((yielded, next_state))) });
// } else { })
// Ok(None) );
// }
// });
let unfold = stream::try_unfold(0, |_useless| { let response = builder.streaming(stream::repeat_with(move || {
let mut buff: [u8; 1024] = [0; 1024]; let mut buff : [u8; 1024] = [0; 1024];
let read = rdr.read(&mut buff[..]); match rdr.read(&mut buff[..]) {
let result = read.map_ok(|l| Some((Bytes::copy_from_slice(&buff[0..l]), 0))); Ok(l) => {
return result; print!("{}", String::from_utf8_lossy(&buff[0..l]));
// match result { Ok(Bytes::copy_from_slice(&buff[0..l])) }
// Ok(l) => {Ok(Some((Bytes::copy_from_slice(&buff[0..l]), 0)))} Err(e) => {Err(e)}
// Err(e) => {Err(e)} }
// } })
.take_while(|bytes| {
// result.map(|l| { match bytes {
// print!("{}", String::from_utf8_lossy(&buff[0..l])); Ok(bytes) => {future::ready(bytes.len() != 0)}
// Some((Bytes::copy_from_slice(&buff[0..l]), 0)) Err(_) => {future::ready(false)}
// }); }
}); })
// pin_mut!(unfold); );
let response = builder.streaming(unfold);
// let response = builder.streaming(stream::repeat_with(move || {
// let mut buff : [u8; 1024] = [0; 1024];
// match rdr.read(&mut buff[..]) {
// Ok(l) => {
// print!("{}", String::from_utf8_lossy(&buff[0..l]));
// Ok(Bytes::copy_from_slice(&buff[0..l])) }
// Err(e) => {Err(e)}
// }
// })
// .take_while(|bytes| {
// match bytes {
// Ok(bytes) => {future::ready(bytes.len() != 0)}
// Err(_) => {future::ready(false)}
// }
// })
// );
return Ok(response); return Ok(response);
} }