forked from cadey/maj
haha it works
This commit is contained in:
parent
b7f2f8bf4a
commit
5cce5a618c
13
src/lib.rs
13
src/lib.rs
|
@ -1,16 +1,5 @@
|
||||||
#[macro_use]
|
|
||||||
extern crate num_derive;
|
|
||||||
|
|
||||||
mod status_code;
|
mod status_code;
|
||||||
mod response;
|
mod response;
|
||||||
|
|
||||||
pub use status_code::StatusCode;
|
pub use status_code::StatusCode;
|
||||||
pub use response::Response;
|
pub use response::{Response, Error as ResponseError};
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
#[test]
|
|
||||||
fn it_works() {
|
|
||||||
assert_eq!(2 + 2, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ enum State {
|
||||||
ReadBody { data: Vec<u8> },
|
ReadBody { data: Vec<u8> },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Response parsing error.
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
#[error("unexpected end of file found while parsing response")]
|
#[error("unexpected end of file found while parsing response")]
|
||||||
|
@ -60,7 +61,7 @@ impl Response {
|
||||||
Err(why) => return Err(Error::IO(why)),
|
Err(why) => return Err(Error::IO(why)),
|
||||||
}
|
}
|
||||||
|
|
||||||
log::trace!("state: {:?}", state);
|
// log::trace!("state: {:?}", state);
|
||||||
|
|
||||||
match &mut state {
|
match &mut state {
|
||||||
State::ReadStatusCode { data } => match buf[0] as char {
|
State::ReadStatusCode { data } => match buf[0] as char {
|
||||||
|
@ -105,11 +106,35 @@ mod tests {
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse() -> Result<(), Error> {
|
fn success() -> Result<(), Error> {
|
||||||
pretty_env_logger::init();
|
let _ = pretty_env_logger::try_init();
|
||||||
let mut fin = std::fs::File::open("./testdata/simple_response.txt")?;
|
let mut fin = std::fs::File::open("./testdata/simple_response.txt")?;
|
||||||
|
|
||||||
Response::parse(&mut fin)?;
|
let resp = Response::parse(&mut fin)?;
|
||||||
|
assert_eq!(resp.meta, "text/gemini".to_string());
|
||||||
|
assert_eq!(resp.status, StatusCode::Success);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn error() -> Result<(), Error> {
|
||||||
|
let _ = pretty_env_logger::try_init();
|
||||||
|
let mut fin = std::fs::File::open("./testdata/error_response.txt")?;
|
||||||
|
|
||||||
|
let resp = Response::parse(&mut fin)?;
|
||||||
|
assert_eq!(resp.status, StatusCode::PermanentFailure);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn not_found() -> Result<(), Error> {
|
||||||
|
let _ = pretty_env_logger::try_init();
|
||||||
|
let mut fin = std::fs::File::open("./testdata/notfound_response.txt")?;
|
||||||
|
|
||||||
|
let resp = Response::parse(&mut fin)?;
|
||||||
|
assert_eq!(resp.status, StatusCode::NotFound);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// Status codes as specified in [the spec](https://gemini.circumlunar.space/docs/specification.html).
|
/// Status codes as specified in [the spec](https://gemini.circumlunar.space/docs/specification.html).
|
||||||
#[derive(Copy, Clone, num_derive::FromPrimitive)]
|
#[derive(Copy, Clone, num_derive::FromPrimitive, PartialEq, Debug)]
|
||||||
pub enum StatusCode {
|
pub enum StatusCode {
|
||||||
/// The requested resource accepts a line of textual user input.
|
/// The requested resource accepts a line of textual user input.
|
||||||
/// The <META> line is a prompt which should be displayed to the
|
/// The <META> line is a prompt which should be displayed to the
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
50 oh god everything is on fire
|
|
@ -0,0 +1 @@
|
||||||
|
51 Not found!
|
Loading…
Reference in New Issue