Refactor Backend into trait, broke direct TCP paste
This commit is contained in:
parent
2b62a7e1da
commit
ff1c687008
83
src/main.rs
83
src/main.rs
@ -131,51 +131,34 @@ impl<'a> PasteInfo<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
trait Backend {
|
|
||||||
fn new_paste(&self) -> (String, String);
|
|
||||||
|
|
||||||
fn upload(&self, paste: Data, _key: Option<PasteID>) -> io::Result<String>;
|
trait Backend: Sync + Send {
|
||||||
|
fn new_paste(&self) -> (String, String, String);
|
||||||
|
|
||||||
fn upload_string(&self, paste: &str, _key: Option<PasteID>) -> io::Result<String>;
|
fn file_paths(&self, id: PasteID) -> (String, String, String);
|
||||||
|
|
||||||
|
fn upload(&self, paste: Data, _key: Option<PasteID>) -> Result<String>;
|
||||||
|
|
||||||
|
fn upload_multipart(&self, paste: MultipartUpload) -> Result<String>;
|
||||||
|
|
||||||
|
fn upload_string(&self, paste: &PasteForm) -> Result<String>;
|
||||||
|
|
||||||
|
fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()>;
|
||||||
|
|
||||||
|
fn get(&self, id: PasteID) -> Result<content::Plain<File>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct DefaultBackend{}
|
struct DefaultBackend{}
|
||||||
|
|
||||||
impl Backend for DefaultBackend {
|
|
||||||
fn new_paste(&self) -> (String, String) {
|
|
||||||
loop {
|
|
||||||
let id = PasteID::new();
|
|
||||||
let filename = format!("upload/{id}", id = id);
|
|
||||||
if !Path::new(&filename).exists() {
|
|
||||||
let url = format!("{host}/{id}\n", host = HOST, id = id);
|
|
||||||
return (filename, url)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn upload(&self, paste: Data, _key: Option<PasteID>) -> io::Result<String> {
|
|
||||||
let (filename, url) = self.new_paste();
|
|
||||||
|
|
||||||
paste.stream_to_file(Path::new(&filename))?;
|
|
||||||
Ok(url)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn upload_string(&self, paste: &str, _key: Option<PasteID>) -> io::Result<String> {
|
|
||||||
let (filename, url) = self.new_paste();
|
|
||||||
|
|
||||||
fs::write(filename, paste)?;
|
|
||||||
Ok(url)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/*
|
||||||
enum Backend {
|
enum Backend {
|
||||||
PlainFile
|
PlainFile
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
impl Backend {
|
impl Backend for DefaultBackend {
|
||||||
|
//impl Backend {
|
||||||
fn new_paste(&self) -> (String, String, String) {
|
fn new_paste(&self) -> (String, String, String) {
|
||||||
loop {
|
loop {
|
||||||
let id = PasteID::new();
|
let id = PasteID::new();
|
||||||
@ -212,8 +195,7 @@ impl Backend {
|
|||||||
Ok(url)
|
Ok(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()>
|
fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()> {
|
||||||
{
|
|
||||||
let (filename, info_filename, url) = self.new_paste();
|
let (filename, info_filename, url) = self.new_paste();
|
||||||
|
|
||||||
PasteInfo::default().write(info_filename)?;
|
PasteInfo::default().write(info_filename)?;
|
||||||
@ -247,12 +229,13 @@ impl Backend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'r> FromRequest<'a, 'r> for &'a Backend {
|
impl<'a, 'r> FromRequest<'a, 'r> for &'a dyn Backend {
|
||||||
type Error = ();
|
type Error = ();
|
||||||
|
|
||||||
fn from_request(req: &'a Request<'r>) -> request::Outcome<Self, ()> {
|
fn from_request(req: &'a Request<'r>) -> request::Outcome<Self, ()> {
|
||||||
let backend = req.guard::<State<Backend>>()?;
|
let backend = req.guard::<State<Box<Backend>>>()?;
|
||||||
Success(backend.inner())
|
let backend = backend.inner();
|
||||||
|
Success(backend.as_ref())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,10 +359,17 @@ fn copy<R: ?Sized, W: ?Sized>(reader: &mut R, writer: &mut W, upload_max_size: u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_tcp(){
|
/*
|
||||||
|
//fn run_tcp() {
|
||||||
|
fn run_tcp<T: Send + Sync + 'static>(backend: T)
|
||||||
|
where T: Backend
|
||||||
|
{
|
||||||
// Bind the server's socket
|
// Bind the server's socket
|
||||||
thread::spawn(|| {
|
thread::spawn(move || {
|
||||||
let backend = &Backend::PlainFile;
|
//let backendbla = DefaultBackend::default();
|
||||||
|
//let backend = &backendbla;
|
||||||
|
//let backend = backend.as_ref();
|
||||||
|
let backend = &backend as &'static Backend;
|
||||||
let listener = TcpListener::bind("127.0.0.1:12345").unwrap();
|
let listener = TcpListener::bind("127.0.0.1:12345").unwrap();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
@ -397,9 +387,12 @@ fn run_tcp(){
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let backend = Backend::PlainFile;
|
let backend = Box::new(DefaultBackend::default());
|
||||||
run_tcp();
|
//let tcp_backend = DefaultBackend::default();
|
||||||
rocket().manage(backend).launch();
|
//run_tcp(tcp_backend);
|
||||||
|
//run_tcp();
|
||||||
|
rocket().manage(backend as Box<Backend + 'static>).launch();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user