use serde::{Serialize, Deserialize};
use percent_encoding::AsciiSet;
#[expect(unused_imports, reason = "Used in docs.")]
use crate::types::*;
use crate::util::*;
pub const FRAGMENT_PERCENT_ENCODE_SET : AsciiSet = percent_encoding::CONTROLS .add(b' ').add(b'"').add(b'<').add(b'>').add(b'`');
pub const QUERY_PERCENT_ENCODE_SET : AsciiSet = percent_encoding::CONTROLS .add(b' ').add(b'"').add(b'#').add(b'<').add(b'>');
pub const SPECIAL_QUERY_PERCENT_ENCODE_SET : AsciiSet = QUERY_PERCENT_ENCODE_SET .add(b'\'');
pub const PATH_PERCENT_ENCODE_SET : AsciiSet = QUERY_PERCENT_ENCODE_SET .add(b'?').add(b'^').add(b'`').add(b'{').add(b'}');
pub 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'|');
pub const COMPONENT_PERCENT_ENCODE_SET : AsciiSet = USERINFO_PERCENT_ENCODE_SET .add(b'$').add(b'%').add(b'&').add(b'+').add(b',');
pub const X_WWW_FORM_URLENCODED_PERCENT_ENCODE_SET: AsciiSet = COMPONENT_PERCENT_ENCODE_SET.add(b'!').add(b'\'').add(b'(').add(b')');
pub const JS_ENCODE_URI_COMPONENT_ASCII_SET: AsciiSet = percent_encoding::NON_ALPHANUMERIC
.remove(b'-' ).remove(b'_').remove(b'.').remove(b'!' ).remove(b'~').remove(b'*').remove(b'\'').remove(b'(').remove(b')');
pub const JS_ENCODE_URI_ASCII_SET: AsciiSet = JS_ENCODE_URI_COMPONENT_ASCII_SET
.remove(b';').remove(b'/').remove(b'?').remove(b':').remove(b'@').remove(b'&')
.remove(b'=').remove(b'+').remove(b'$').remove(b',').remove(b'#');
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, Suitability)]
pub enum PercentEncodeAlphabet {
JsEncodeUriComponent,
JsEncodeUri,
NonAlphanumeric,
Fragment,
Query,
Special,
Path,
Userinfo,
Component,
#[default]
XWWWFormUrlEncoded,
Controls
}
impl PercentEncodeAlphabet {
pub fn get(&self) -> &'static AsciiSet {
match self {
Self::JsEncodeUriComponent => &JS_ENCODE_URI_COMPONENT_ASCII_SET,
Self::JsEncodeUri => &JS_ENCODE_URI_ASCII_SET,
Self::NonAlphanumeric => percent_encoding::NON_ALPHANUMERIC,
Self::Fragment => &FRAGMENT_PERCENT_ENCODE_SET,
Self::Query => &QUERY_PERCENT_ENCODE_SET,
Self::Special => &SPECIAL_QUERY_PERCENT_ENCODE_SET,
Self::Path => &PATH_PERCENT_ENCODE_SET,
Self::Userinfo => &USERINFO_PERCENT_ENCODE_SET,
Self::Component => &COMPONENT_PERCENT_ENCODE_SET,
Self::XWWWFormUrlEncoded => &X_WWW_FORM_URLENCODED_PERCENT_ENCODE_SET,
Self::Controls => percent_encoding::CONTROLS
}
}
}