Browse Source

Add final statuses

openbsd
Julien Blanchard 7 years ago
parent
commit
8b0cadf34d
  1. 37
      src/header.rs
  2. 8
      src/main.rs
  3. 84
      src/status.rs

37
src/header.rs

@ -1,37 +0,0 @@
extern crate regex;
use regex::Regex;
use std::str::FromStr;
#[derive(Debug)]
pub struct Header {
code: i16,
meta: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ParseError;
const HEADER_REGEX: &str = r"^(\d{1,3})[ \t](.*)$";
impl FromStr for Header {
type Err = ParseError;
// Parses a &str into an instance of 'Header'
fn from_str(line: &str) -> Result<Self, Self::Err> {
let header_regexp = Regex::new(HEADER_REGEX).unwrap();
match header_regexp.captures(&line) {
Some(caps) => {
let code_str = caps.get(1).map_or("", |m| m.as_str());
let meta_str = caps.get(2).map_or("", |m| m.as_str());
let code: i16 = code_str.parse().expect("2");
let meta = meta_str.to_string();
Ok(Header { code, meta })
}
None => Err(ParseError),
}
}
}

8
src/main.rs

@ -15,8 +15,8 @@ use cursive::Cursive;
use std::str::FromStr;
use url::Url;
mod header;
use header::Header;
mod status;
use status::Status;
mod link;
use link::Link;
@ -142,8 +142,8 @@ fn draw_content(s: &mut Cursive, url: Url, content: String) {
container.set_title(url.as_str());
main_view.clear();
match Header::from_str(content.lines().next().unwrap()) {
Ok(_header) => {}
match Status::from_str(content.lines().next().unwrap()) {
Ok(_status) => {}
Err(_) => {}
}

84
src/status.rs

@ -0,0 +1,84 @@
extern crate regex;
use regex::Regex;
use std::str::FromStr;
#[derive(Debug)]
pub enum Status {
Input(String),
Success(String),
SuccessEndOfClientCertificateSession(String),
RedirectTemporary(String),
RedirectPermanent(String),
TemporaryFailure(String),
ServerUnavailable(String),
CGIError(String),
ProxyError(String),
SlowDown(String),
PermanentFailure(String),
NotFound(String),
Gone(String),
ProxyRequestRefused(String),
BadRequest(String),
ClientCertificateRequired(String),
TransientCertificateRequired(String),
AuthorisedCertificatedRequired(String),
CertificateNotAccepted(String),
FutureCertificateRejected(String),
ExpiredCertificateRejected(String),
Unknown(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ParseError;
const STATUS_REGEX: &str = r"^(\d{1,3})[ \t](.*)$";
impl FromStr for Status {
type Err = ParseError;
// Parses a &str into an instance of 'Header'
fn from_str(line: &str) -> Result<Self, Self::Err> {
let status_regexp = Regex::new(STATUS_REGEX).unwrap();
match status_regexp.captures(&line) {
Some(caps) => {
let code_str = caps.get(1).map_or("", |m| m.as_str());
let meta_str = caps.get(2).map_or("", |m| m.as_str());
let code: i16 = code_str.parse().expect("2");
let meta = meta_str.to_string();
Ok(make_status(code, meta))
}
None => Err(ParseError),
}
}
}
fn make_status(code: i16, meta: String) -> Status {
match code {
10 => Status::Input(meta),
20 => Status::Success(meta),
21 => Status::SuccessEndOfClientCertificateSession(meta),
30 => Status::RedirectTemporary(meta),
31 => Status::RedirectPermanent(meta),
40 => Status::TemporaryFailure(meta),
41 => Status::ServerUnavailable(meta),
42 => Status::CGIError(meta),
43 => Status::ProxyError(meta),
44 => Status::SlowDown(meta),
50 => Status::PermanentFailure(meta),
51 => Status::NotFound(meta),
52 => Status::Gone(meta),
53 => Status::ProxyRequestRefused(meta),
59 => Status::BadRequest(meta),
60 => Status::ClientCertificateRequired(meta),
61 => Status::TransientCertificateRequired(meta),
62 => Status::AuthorisedCertificatedRequired(meta),
63 => Status::CertificateNotAccepted(meta),
64 => Status::FutureCertificateRejected(meta),
65 => Status::ExpiredCertificateRejected(meta),
_ => Status::Unknown(meta)
}
}
Loading…
Cancel
Save