url_cleaner_engine/glue/
percent_encoding.rs1use serde::{Serialize, Deserialize};
4use percent_encoding::AsciiSet;
5
6#[expect(unused_imports, reason = "Used in docs.")]
7use crate::types::*;
8use crate::util::*;
9
10pub const FRAGMENT_PERCENT_ENCODE_SET : AsciiSet = percent_encoding::CONTROLS .add(b' ').add(b'"').add(b'<').add(b'>').add(b'`');
12pub const QUERY_PERCENT_ENCODE_SET : AsciiSet = percent_encoding::CONTROLS .add(b' ').add(b'"').add(b'#').add(b'<').add(b'>');
14pub const SPECIAL_QUERY_PERCENT_ENCODE_SET : AsciiSet = QUERY_PERCENT_ENCODE_SET .add(b'\'');
16pub const PATH_PERCENT_ENCODE_SET : AsciiSet = QUERY_PERCENT_ENCODE_SET .add(b'?').add(b'^').add(b'`').add(b'{').add(b'}');
18pub const USERINFO_PERCENT_ENCODE_SET : AsciiSet = PATH_PERCENT_ENCODE_SET .add(b'/').add(b':').add(b';').add(b'=').add(b'@').add(b'[').add(b'\\').add(b']').add(b'|');
20pub const COMPONENT_PERCENT_ENCODE_SET : AsciiSet = USERINFO_PERCENT_ENCODE_SET .add(b'$').add(b'%').add(b'&').add(b'+').add(b',');
22pub const X_WWW_FORM_URLENCODED_PERCENT_ENCODE_SET: AsciiSet = COMPONENT_PERCENT_ENCODE_SET.add(b'!').add(b'\'').add(b'(').add(b')');
24
25pub const JS_ENCODE_URI_COMPONENT_ASCII_SET: AsciiSet = percent_encoding::NON_ALPHANUMERIC
27 .remove(b'-' ).remove(b'_').remove(b'.').remove(b'!' ).remove(b'~').remove(b'*').remove(b'\'').remove(b'(').remove(b')');
28
29pub const JS_ENCODE_URI_ASCII_SET: AsciiSet = JS_ENCODE_URI_COMPONENT_ASCII_SET
31 .remove(b';').remove(b'/').remove(b'?').remove(b':').remove(b'@').remove(b'&')
32 .remove(b'=').remove(b'+').remove(b'$').remove(b',').remove(b'#');
33
34#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, Suitability)]
40pub enum PercentEncodeAlphabet {
41 JsEncodeUriComponent,
43 JsEncodeUri,
45 NonAlphanumeric,
47 Fragment,
49 Query,
51 Special,
53 Path,
55 Userinfo,
57 Component,
59 #[default]
61 XWWWFormUrlEncoded,
62 Controls
64}
65
66impl PercentEncodeAlphabet {
67 pub fn get(&self) -> &'static AsciiSet {
69 match self {
70 Self::JsEncodeUriComponent => &JS_ENCODE_URI_COMPONENT_ASCII_SET,
71 Self::JsEncodeUri => &JS_ENCODE_URI_ASCII_SET,
72 Self::NonAlphanumeric => percent_encoding::NON_ALPHANUMERIC,
73 Self::Fragment => &FRAGMENT_PERCENT_ENCODE_SET,
74 Self::Query => &QUERY_PERCENT_ENCODE_SET,
75 Self::Special => &SPECIAL_QUERY_PERCENT_ENCODE_SET,
76 Self::Path => &PATH_PERCENT_ENCODE_SET,
77 Self::Userinfo => &USERINFO_PERCENT_ENCODE_SET,
78 Self::Component => &COMPONENT_PERCENT_ENCODE_SET,
79 Self::XWWWFormUrlEncoded => &X_WWW_FORM_URLENCODED_PERCENT_ENCODE_SET,
80 Self::Controls => percent_encoding::CONTROLS
81 }
82 }
83}