cookie_rs/cookie/parse/
error.rs1use std::error::Error;
2use std::fmt;
3use std::num::ParseIntError;
4
5#[non_exhaustive]
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum ParseError {
8 EmptyName,
9 MissingPair(MissingPair),
10 UnknownAttribute(String),
11 ParseMaxAgeError(ParseIntError),
12 ParseSameSiteError(ParseSameSiteError),
13}
14
15#[derive(Debug, Clone, PartialEq, Eq)]
16pub enum ParseSameSiteError {
17 UnknownValue(String),
18}
19
20#[derive(Debug, Clone, PartialEq, Eq)]
21pub enum MissingPair {
22 NameValue,
23 Domain,
24 Expires,
25 MaxAge,
26 Path,
27 SameSite,
28}
29
30impl Error for ParseError {}
31
32impl Error for ParseSameSiteError {}
33
34impl From<MissingPair> for ParseError {
35 fn from(value: MissingPair) -> Self {
36 Self::MissingPair(value)
37 }
38}
39
40impl From<ParseIntError> for ParseError {
41 fn from(value: ParseIntError) -> Self {
42 Self::ParseMaxAgeError(value)
43 }
44}
45
46impl From<ParseSameSiteError> for ParseError {
47 fn from(value: ParseSameSiteError) -> Self {
48 Self::ParseSameSiteError(value)
49 }
50}
51
52impl fmt::Display for ParseError {
53 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
54 match self {
55 ParseError::EmptyName => write!(f, "the provided name is empty."),
56 ParseError::MissingPair(pair) => write!(f, "missed pair: {pair}"),
57 ParseError::UnknownAttribute(attr) => write!(f, "unknown attribute: {attr}"),
58 ParseError::ParseMaxAgeError(err) => write!(f, "failed to parse Max-Age: {err}"),
59 ParseError::ParseSameSiteError(err) => write!(f, "failed to parse SameSite: {err}"),
60 }
61 }
62}
63
64impl fmt::Display for ParseSameSiteError {
65 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
66 match self {
67 ParseSameSiteError::UnknownValue(value) => {
68 write!(f, "unknown SameSite value: {value}")
69 }
70 }
71 }
72}
73
74impl fmt::Display for MissingPair {
75 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
76 let pair_name = match self {
77 MissingPair::NameValue => "Name-Value",
78 MissingPair::Domain => "Domain",
79 MissingPair::Expires => "Expires",
80 MissingPair::MaxAge => "Max-Age",
81 MissingPair::Path => "Path",
82 MissingPair::SameSite => "SameSite",
83 };
84 write!(f, "{pair_name}")
85 }
86}