Compare commits
No commits in common. "b22b5f81c79309b8115c049421c0f8eba1ac6a7a" and "1427f37b1cac144ae40061878e792c9c42dad2d2" have entirely different histories.
b22b5f81c7
...
1427f37b1c
|
@ -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"]}
|
||||||
|
|
75
src/main.rs
75
src/main.rs
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue