netscape_cookie_file_parser/
error.rs1use std::error::Error;
2use std::fmt;
3
4#[derive(Debug)]
9pub struct ParseError {
10 pub line: usize,
12 pub kind: ParseErrorKind,
14}
15
16#[derive(Debug)]
18pub enum ParseErrorKind {
19 Io(std::io::Error),
21 MissingFields { found: usize },
23 InvalidExpires,
25 InvalidOctets,
27}
28
29impl fmt::Display for ParseError {
30 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31 write!(f, "line {}: {}", self.line, self.kind)
32 }
33}
34
35impl fmt::Display for ParseErrorKind {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 match self {
38 Self::Io(error) => write!(f, "read error: {error}"),
39 Self::MissingFields { found } => {
40 write!(f, "expected 7 tab-separated fields, found {found}")
41 }
42 Self::InvalidExpires => f.write_str("invalid expires timestamp"),
43 Self::InvalidOctets => f.write_str("cookie name or value contains control octets"),
44 }
45 }
46}
47
48impl Error for ParseError {
49 fn source(&self) -> Option<&(dyn Error + 'static)> {
50 match &self.kind {
51 ParseErrorKind::Io(error) => Some(error),
52 _ => None,
53 }
54 }
55}