summaryrefslogtreecommitdiffstats
path: root/vendor/base64ct/src/alphabet/url.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/base64ct/src/alphabet/url.rs')
-rw-r--r--vendor/base64ct/src/alphabet/url.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/base64ct/src/alphabet/url.rs b/vendor/base64ct/src/alphabet/url.rs
new file mode 100644
index 000000000..432edb852
--- /dev/null
+++ b/vendor/base64ct/src/alphabet/url.rs
@@ -0,0 +1,54 @@
+//! URL-safe Base64 encoding.
+
+use super::{Alphabet, DecodeStep, EncodeStep};
+
+/// URL-safe Base64 encoding with `=` padding.
+///
+/// ```text
+/// [A-Z] [a-z] [0-9] - _
+/// 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2d, 0x5f
+/// ```
+#[derive(Copy, Clone, Debug, Eq, PartialEq)]
+pub struct Base64Url;
+
+impl Alphabet for Base64Url {
+ const BASE: u8 = b'A';
+ const DECODER: &'static [DecodeStep] = DECODER;
+ const ENCODER: &'static [EncodeStep] = ENCODER;
+ const PADDED: bool = true;
+ type Unpadded = Base64UrlUnpadded;
+}
+
+/// URL-safe Base64 encoding *without* padding.
+///
+/// ```text
+/// [A-Z] [a-z] [0-9] - _
+/// 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2d, 0x5f
+/// ```
+#[derive(Copy, Clone, Debug, Eq, PartialEq)]
+pub struct Base64UrlUnpadded;
+
+impl Alphabet for Base64UrlUnpadded {
+ const BASE: u8 = b'A';
+ const DECODER: &'static [DecodeStep] = DECODER;
+ const ENCODER: &'static [EncodeStep] = ENCODER;
+ const PADDED: bool = false;
+ type Unpadded = Self;
+}
+
+/// URL-safe Base64 decoder
+const DECODER: &[DecodeStep] = &[
+ DecodeStep::Range(b'A'..=b'Z', -64),
+ DecodeStep::Range(b'a'..=b'z', -70),
+ DecodeStep::Range(b'0'..=b'9', 5),
+ DecodeStep::Eq(b'-', 63),
+ DecodeStep::Eq(b'_', 64),
+];
+
+/// URL-safe Base64 encoder
+const ENCODER: &[EncodeStep] = &[
+ EncodeStep::Diff(25, 6),
+ EncodeStep::Diff(51, -75),
+ EncodeStep::Diff(61, -(b'-' as i16 - 0x20)),
+ EncodeStep::Diff(62, b'_' as i16 - b'-' as i16 - 1),
+];