diff --git a/examples/make_tables.rs b/examples/make_tables.rs index 95980b6..4b2bddc 100644 --- a/examples/make_tables.rs +++ b/examples/make_tables.rs @@ -15,6 +15,7 @@ fn main() { // / .chain(0x2F..0x30) .collect(); + print_encode_table(&standard_alphabet, "STANDARD_ENCODE", 0); print_decode_table(&standard_alphabet, "STANDARD_DECODE", 0); // A-Z @@ -28,10 +29,22 @@ fn main() { // _s .chain(0x5F..0x60) .collect(); + print_encode_table(&url_alphabet, "URL_SAFE_ENCODE", 0); print_decode_table(&url_alphabet, "URL_SAFE_DECODE", 0); } +fn print_encode_table(alphabet: &[u8], const_name: &str, indent_depth: usize) { + println!("{:width$}pub const {}: &'static [u8; 64] = &[", "", const_name, width=indent_depth); + + for (i, b) in alphabet.iter().enumerate() { + println!("{:width$}{}, // input {} (0x{:X}) => '{}' (0x{:X})", "", + b, i, i, String::from_utf8(vec!(*b as u8)).unwrap(), b, width=indent_depth + 4); + } + + println!("{:width$}];", "", width=indent_depth); +} + fn print_decode_table(alphabet: &[u8], const_name: &str, indent_depth: usize) { // map of alphabet bytes to 6-bit morsels let mut input_to_morsel = HashMap::::new(); @@ -48,7 +61,7 @@ fn print_decode_table(alphabet: &[u8], const_name: &str, indent_depth: usize) { None => ("INVALID_VALUE".to_string(), format!("input {} (0x{:X})", ascii_byte, ascii_byte)), Some(v) => (format!("{}", *v), - format!("input {} (0x{:X} char '{}') = {} (0x{:X})", + format!("input {} (0x{:X} char '{}') => {} (0x{:X})", ascii_byte, ascii_byte, String::from_utf8(vec!(ascii_byte as u8)).unwrap(), *v, *v)) @@ -56,5 +69,5 @@ fn print_decode_table(alphabet: &[u8], const_name: &str, indent_depth: usize) { println!("{:width$}{}, // {}", "", value, comment, width=indent_depth + 4); } - println!("];") + println!("{:width$}];", "", width=indent_depth); } diff --git a/src/lib.rs b/src/lib.rs index 39e375a..a7d5172 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,28 +4,6 @@ use std::{fmt, error, str}; use byteorder::{BigEndian, ByteOrder}; -const STANDARD: [u8; 64] = [ - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, - 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, - 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, - 0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F -]; - -const URL_SAFE: [u8; 64] = [ - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, - 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, - 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, - 0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2D, 0x5F -]; - mod tables; pub enum Base64Mode { @@ -197,8 +175,8 @@ fn encoded_size(bytes_len: usize) -> usize { ///``` pub fn encode_mode_buf(bytes: &[u8], mode: Base64Mode, buf: &mut String) { let (ref charset, _) = match mode { - Base64Mode::Standard => (STANDARD, false), - Base64Mode::UrlSafe => (URL_SAFE, false), + Base64Mode::Standard => (tables::STANDARD_ENCODE, false), + Base64Mode::UrlSafe => (tables::URL_SAFE_ENCODE, false), //TODO Base64Mode::MIME => (STANDARD, true) }; diff --git a/src/tables.rs b/src/tables.rs index cdc5c89..3afe823 100644 --- a/src/tables.rs +++ b/src/tables.rs @@ -1,4 +1,70 @@ pub const INVALID_VALUE: u8 = 255; +pub const STANDARD_ENCODE: &'static [u8; 64] = &[ + 65, // input 0 (0x0) => 'A' (0x41) + 66, // input 1 (0x1) => 'B' (0x42) + 67, // input 2 (0x2) => 'C' (0x43) + 68, // input 3 (0x3) => 'D' (0x44) + 69, // input 4 (0x4) => 'E' (0x45) + 70, // input 5 (0x5) => 'F' (0x46) + 71, // input 6 (0x6) => 'G' (0x47) + 72, // input 7 (0x7) => 'H' (0x48) + 73, // input 8 (0x8) => 'I' (0x49) + 74, // input 9 (0x9) => 'J' (0x4A) + 75, // input 10 (0xA) => 'K' (0x4B) + 76, // input 11 (0xB) => 'L' (0x4C) + 77, // input 12 (0xC) => 'M' (0x4D) + 78, // input 13 (0xD) => 'N' (0x4E) + 79, // input 14 (0xE) => 'O' (0x4F) + 80, // input 15 (0xF) => 'P' (0x50) + 81, // input 16 (0x10) => 'Q' (0x51) + 82, // input 17 (0x11) => 'R' (0x52) + 83, // input 18 (0x12) => 'S' (0x53) + 84, // input 19 (0x13) => 'T' (0x54) + 85, // input 20 (0x14) => 'U' (0x55) + 86, // input 21 (0x15) => 'V' (0x56) + 87, // input 22 (0x16) => 'W' (0x57) + 88, // input 23 (0x17) => 'X' (0x58) + 89, // input 24 (0x18) => 'Y' (0x59) + 90, // input 25 (0x19) => 'Z' (0x5A) + 97, // input 26 (0x1A) => 'a' (0x61) + 98, // input 27 (0x1B) => 'b' (0x62) + 99, // input 28 (0x1C) => 'c' (0x63) + 100, // input 29 (0x1D) => 'd' (0x64) + 101, // input 30 (0x1E) => 'e' (0x65) + 102, // input 31 (0x1F) => 'f' (0x66) + 103, // input 32 (0x20) => 'g' (0x67) + 104, // input 33 (0x21) => 'h' (0x68) + 105, // input 34 (0x22) => 'i' (0x69) + 106, // input 35 (0x23) => 'j' (0x6A) + 107, // input 36 (0x24) => 'k' (0x6B) + 108, // input 37 (0x25) => 'l' (0x6C) + 109, // input 38 (0x26) => 'm' (0x6D) + 110, // input 39 (0x27) => 'n' (0x6E) + 111, // input 40 (0x28) => 'o' (0x6F) + 112, // input 41 (0x29) => 'p' (0x70) + 113, // input 42 (0x2A) => 'q' (0x71) + 114, // input 43 (0x2B) => 'r' (0x72) + 115, // input 44 (0x2C) => 's' (0x73) + 116, // input 45 (0x2D) => 't' (0x74) + 117, // input 46 (0x2E) => 'u' (0x75) + 118, // input 47 (0x2F) => 'v' (0x76) + 119, // input 48 (0x30) => 'w' (0x77) + 120, // input 49 (0x31) => 'x' (0x78) + 121, // input 50 (0x32) => 'y' (0x79) + 122, // input 51 (0x33) => 'z' (0x7A) + 48, // input 52 (0x34) => '0' (0x30) + 49, // input 53 (0x35) => '1' (0x31) + 50, // input 54 (0x36) => '2' (0x32) + 51, // input 55 (0x37) => '3' (0x33) + 52, // input 56 (0x38) => '4' (0x34) + 53, // input 57 (0x39) => '5' (0x35) + 54, // input 58 (0x3A) => '6' (0x36) + 55, // input 59 (0x3B) => '7' (0x37) + 56, // input 60 (0x3C) => '8' (0x38) + 57, // input 61 (0x3D) => '9' (0x39) + 43, // input 62 (0x3E) => '+' (0x2B) + 47, // input 63 (0x3F) => '/' (0x2F) +]; pub const STANDARD_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 0 (0x0) INVALID_VALUE, // input 1 (0x1) @@ -43,21 +109,21 @@ pub const STANDARD_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 40 (0x28) INVALID_VALUE, // input 41 (0x29) INVALID_VALUE, // input 42 (0x2A) - 62, // input 43 (0x2B char '+') = 62 (0x3E) + 62, // input 43 (0x2B char '+') => 62 (0x3E) INVALID_VALUE, // input 44 (0x2C) INVALID_VALUE, // input 45 (0x2D) INVALID_VALUE, // input 46 (0x2E) - 63, // input 47 (0x2F char '/') = 63 (0x3F) - 52, // input 48 (0x30 char '0') = 52 (0x34) - 53, // input 49 (0x31 char '1') = 53 (0x35) - 54, // input 50 (0x32 char '2') = 54 (0x36) - 55, // input 51 (0x33 char '3') = 55 (0x37) - 56, // input 52 (0x34 char '4') = 56 (0x38) - 57, // input 53 (0x35 char '5') = 57 (0x39) - 58, // input 54 (0x36 char '6') = 58 (0x3A) - 59, // input 55 (0x37 char '7') = 59 (0x3B) - 60, // input 56 (0x38 char '8') = 60 (0x3C) - 61, // input 57 (0x39 char '9') = 61 (0x3D) + 63, // input 47 (0x2F char '/') => 63 (0x3F) + 52, // input 48 (0x30 char '0') => 52 (0x34) + 53, // input 49 (0x31 char '1') => 53 (0x35) + 54, // input 50 (0x32 char '2') => 54 (0x36) + 55, // input 51 (0x33 char '3') => 55 (0x37) + 56, // input 52 (0x34 char '4') => 56 (0x38) + 57, // input 53 (0x35 char '5') => 57 (0x39) + 58, // input 54 (0x36 char '6') => 58 (0x3A) + 59, // input 55 (0x37 char '7') => 59 (0x3B) + 60, // input 56 (0x38 char '8') => 60 (0x3C) + 61, // input 57 (0x39 char '9') => 61 (0x3D) INVALID_VALUE, // input 58 (0x3A) INVALID_VALUE, // input 59 (0x3B) INVALID_VALUE, // input 60 (0x3C) @@ -65,64 +131,64 @@ pub const STANDARD_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 62 (0x3E) INVALID_VALUE, // input 63 (0x3F) INVALID_VALUE, // input 64 (0x40) - 0, // input 65 (0x41 char 'A') = 0 (0x0) - 1, // input 66 (0x42 char 'B') = 1 (0x1) - 2, // input 67 (0x43 char 'C') = 2 (0x2) - 3, // input 68 (0x44 char 'D') = 3 (0x3) - 4, // input 69 (0x45 char 'E') = 4 (0x4) - 5, // input 70 (0x46 char 'F') = 5 (0x5) - 6, // input 71 (0x47 char 'G') = 6 (0x6) - 7, // input 72 (0x48 char 'H') = 7 (0x7) - 8, // input 73 (0x49 char 'I') = 8 (0x8) - 9, // input 74 (0x4A char 'J') = 9 (0x9) - 10, // input 75 (0x4B char 'K') = 10 (0xA) - 11, // input 76 (0x4C char 'L') = 11 (0xB) - 12, // input 77 (0x4D char 'M') = 12 (0xC) - 13, // input 78 (0x4E char 'N') = 13 (0xD) - 14, // input 79 (0x4F char 'O') = 14 (0xE) - 15, // input 80 (0x50 char 'P') = 15 (0xF) - 16, // input 81 (0x51 char 'Q') = 16 (0x10) - 17, // input 82 (0x52 char 'R') = 17 (0x11) - 18, // input 83 (0x53 char 'S') = 18 (0x12) - 19, // input 84 (0x54 char 'T') = 19 (0x13) - 20, // input 85 (0x55 char 'U') = 20 (0x14) - 21, // input 86 (0x56 char 'V') = 21 (0x15) - 22, // input 87 (0x57 char 'W') = 22 (0x16) - 23, // input 88 (0x58 char 'X') = 23 (0x17) - 24, // input 89 (0x59 char 'Y') = 24 (0x18) - 25, // input 90 (0x5A char 'Z') = 25 (0x19) + 0, // input 65 (0x41 char 'A') => 0 (0x0) + 1, // input 66 (0x42 char 'B') => 1 (0x1) + 2, // input 67 (0x43 char 'C') => 2 (0x2) + 3, // input 68 (0x44 char 'D') => 3 (0x3) + 4, // input 69 (0x45 char 'E') => 4 (0x4) + 5, // input 70 (0x46 char 'F') => 5 (0x5) + 6, // input 71 (0x47 char 'G') => 6 (0x6) + 7, // input 72 (0x48 char 'H') => 7 (0x7) + 8, // input 73 (0x49 char 'I') => 8 (0x8) + 9, // input 74 (0x4A char 'J') => 9 (0x9) + 10, // input 75 (0x4B char 'K') => 10 (0xA) + 11, // input 76 (0x4C char 'L') => 11 (0xB) + 12, // input 77 (0x4D char 'M') => 12 (0xC) + 13, // input 78 (0x4E char 'N') => 13 (0xD) + 14, // input 79 (0x4F char 'O') => 14 (0xE) + 15, // input 80 (0x50 char 'P') => 15 (0xF) + 16, // input 81 (0x51 char 'Q') => 16 (0x10) + 17, // input 82 (0x52 char 'R') => 17 (0x11) + 18, // input 83 (0x53 char 'S') => 18 (0x12) + 19, // input 84 (0x54 char 'T') => 19 (0x13) + 20, // input 85 (0x55 char 'U') => 20 (0x14) + 21, // input 86 (0x56 char 'V') => 21 (0x15) + 22, // input 87 (0x57 char 'W') => 22 (0x16) + 23, // input 88 (0x58 char 'X') => 23 (0x17) + 24, // input 89 (0x59 char 'Y') => 24 (0x18) + 25, // input 90 (0x5A char 'Z') => 25 (0x19) INVALID_VALUE, // input 91 (0x5B) INVALID_VALUE, // input 92 (0x5C) INVALID_VALUE, // input 93 (0x5D) INVALID_VALUE, // input 94 (0x5E) INVALID_VALUE, // input 95 (0x5F) INVALID_VALUE, // input 96 (0x60) - 26, // input 97 (0x61 char 'a') = 26 (0x1A) - 27, // input 98 (0x62 char 'b') = 27 (0x1B) - 28, // input 99 (0x63 char 'c') = 28 (0x1C) - 29, // input 100 (0x64 char 'd') = 29 (0x1D) - 30, // input 101 (0x65 char 'e') = 30 (0x1E) - 31, // input 102 (0x66 char 'f') = 31 (0x1F) - 32, // input 103 (0x67 char 'g') = 32 (0x20) - 33, // input 104 (0x68 char 'h') = 33 (0x21) - 34, // input 105 (0x69 char 'i') = 34 (0x22) - 35, // input 106 (0x6A char 'j') = 35 (0x23) - 36, // input 107 (0x6B char 'k') = 36 (0x24) - 37, // input 108 (0x6C char 'l') = 37 (0x25) - 38, // input 109 (0x6D char 'm') = 38 (0x26) - 39, // input 110 (0x6E char 'n') = 39 (0x27) - 40, // input 111 (0x6F char 'o') = 40 (0x28) - 41, // input 112 (0x70 char 'p') = 41 (0x29) - 42, // input 113 (0x71 char 'q') = 42 (0x2A) - 43, // input 114 (0x72 char 'r') = 43 (0x2B) - 44, // input 115 (0x73 char 's') = 44 (0x2C) - 45, // input 116 (0x74 char 't') = 45 (0x2D) - 46, // input 117 (0x75 char 'u') = 46 (0x2E) - 47, // input 118 (0x76 char 'v') = 47 (0x2F) - 48, // input 119 (0x77 char 'w') = 48 (0x30) - 49, // input 120 (0x78 char 'x') = 49 (0x31) - 50, // input 121 (0x79 char 'y') = 50 (0x32) - 51, // input 122 (0x7A char 'z') = 51 (0x33) + 26, // input 97 (0x61 char 'a') => 26 (0x1A) + 27, // input 98 (0x62 char 'b') => 27 (0x1B) + 28, // input 99 (0x63 char 'c') => 28 (0x1C) + 29, // input 100 (0x64 char 'd') => 29 (0x1D) + 30, // input 101 (0x65 char 'e') => 30 (0x1E) + 31, // input 102 (0x66 char 'f') => 31 (0x1F) + 32, // input 103 (0x67 char 'g') => 32 (0x20) + 33, // input 104 (0x68 char 'h') => 33 (0x21) + 34, // input 105 (0x69 char 'i') => 34 (0x22) + 35, // input 106 (0x6A char 'j') => 35 (0x23) + 36, // input 107 (0x6B char 'k') => 36 (0x24) + 37, // input 108 (0x6C char 'l') => 37 (0x25) + 38, // input 109 (0x6D char 'm') => 38 (0x26) + 39, // input 110 (0x6E char 'n') => 39 (0x27) + 40, // input 111 (0x6F char 'o') => 40 (0x28) + 41, // input 112 (0x70 char 'p') => 41 (0x29) + 42, // input 113 (0x71 char 'q') => 42 (0x2A) + 43, // input 114 (0x72 char 'r') => 43 (0x2B) + 44, // input 115 (0x73 char 's') => 44 (0x2C) + 45, // input 116 (0x74 char 't') => 45 (0x2D) + 46, // input 117 (0x75 char 'u') => 46 (0x2E) + 47, // input 118 (0x76 char 'v') => 47 (0x2F) + 48, // input 119 (0x77 char 'w') => 48 (0x30) + 49, // input 120 (0x78 char 'x') => 49 (0x31) + 50, // input 121 (0x79 char 'y') => 50 (0x32) + 51, // input 122 (0x7A char 'z') => 51 (0x33) INVALID_VALUE, // input 123 (0x7B) INVALID_VALUE, // input 124 (0x7C) INVALID_VALUE, // input 125 (0x7D) @@ -257,6 +323,72 @@ pub const STANDARD_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 254 (0xFE) INVALID_VALUE, // input 255 (0xFF) ]; +pub const URL_SAFE_ENCODE: &'static [u8; 64] = &[ + 65, // input 0 (0x0) => 'A' (0x41) + 66, // input 1 (0x1) => 'B' (0x42) + 67, // input 2 (0x2) => 'C' (0x43) + 68, // input 3 (0x3) => 'D' (0x44) + 69, // input 4 (0x4) => 'E' (0x45) + 70, // input 5 (0x5) => 'F' (0x46) + 71, // input 6 (0x6) => 'G' (0x47) + 72, // input 7 (0x7) => 'H' (0x48) + 73, // input 8 (0x8) => 'I' (0x49) + 74, // input 9 (0x9) => 'J' (0x4A) + 75, // input 10 (0xA) => 'K' (0x4B) + 76, // input 11 (0xB) => 'L' (0x4C) + 77, // input 12 (0xC) => 'M' (0x4D) + 78, // input 13 (0xD) => 'N' (0x4E) + 79, // input 14 (0xE) => 'O' (0x4F) + 80, // input 15 (0xF) => 'P' (0x50) + 81, // input 16 (0x10) => 'Q' (0x51) + 82, // input 17 (0x11) => 'R' (0x52) + 83, // input 18 (0x12) => 'S' (0x53) + 84, // input 19 (0x13) => 'T' (0x54) + 85, // input 20 (0x14) => 'U' (0x55) + 86, // input 21 (0x15) => 'V' (0x56) + 87, // input 22 (0x16) => 'W' (0x57) + 88, // input 23 (0x17) => 'X' (0x58) + 89, // input 24 (0x18) => 'Y' (0x59) + 90, // input 25 (0x19) => 'Z' (0x5A) + 97, // input 26 (0x1A) => 'a' (0x61) + 98, // input 27 (0x1B) => 'b' (0x62) + 99, // input 28 (0x1C) => 'c' (0x63) + 100, // input 29 (0x1D) => 'd' (0x64) + 101, // input 30 (0x1E) => 'e' (0x65) + 102, // input 31 (0x1F) => 'f' (0x66) + 103, // input 32 (0x20) => 'g' (0x67) + 104, // input 33 (0x21) => 'h' (0x68) + 105, // input 34 (0x22) => 'i' (0x69) + 106, // input 35 (0x23) => 'j' (0x6A) + 107, // input 36 (0x24) => 'k' (0x6B) + 108, // input 37 (0x25) => 'l' (0x6C) + 109, // input 38 (0x26) => 'm' (0x6D) + 110, // input 39 (0x27) => 'n' (0x6E) + 111, // input 40 (0x28) => 'o' (0x6F) + 112, // input 41 (0x29) => 'p' (0x70) + 113, // input 42 (0x2A) => 'q' (0x71) + 114, // input 43 (0x2B) => 'r' (0x72) + 115, // input 44 (0x2C) => 's' (0x73) + 116, // input 45 (0x2D) => 't' (0x74) + 117, // input 46 (0x2E) => 'u' (0x75) + 118, // input 47 (0x2F) => 'v' (0x76) + 119, // input 48 (0x30) => 'w' (0x77) + 120, // input 49 (0x31) => 'x' (0x78) + 121, // input 50 (0x32) => 'y' (0x79) + 122, // input 51 (0x33) => 'z' (0x7A) + 48, // input 52 (0x34) => '0' (0x30) + 49, // input 53 (0x35) => '1' (0x31) + 50, // input 54 (0x36) => '2' (0x32) + 51, // input 55 (0x37) => '3' (0x33) + 52, // input 56 (0x38) => '4' (0x34) + 53, // input 57 (0x39) => '5' (0x35) + 54, // input 58 (0x3A) => '6' (0x36) + 55, // input 59 (0x3B) => '7' (0x37) + 56, // input 60 (0x3C) => '8' (0x38) + 57, // input 61 (0x3D) => '9' (0x39) + 45, // input 62 (0x3E) => '-' (0x2D) + 95, // input 63 (0x3F) => '_' (0x5F) +]; pub const URL_SAFE_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 0 (0x0) INVALID_VALUE, // input 1 (0x1) @@ -303,19 +435,19 @@ pub const URL_SAFE_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 42 (0x2A) INVALID_VALUE, // input 43 (0x2B) INVALID_VALUE, // input 44 (0x2C) - 62, // input 45 (0x2D char '-') = 62 (0x3E) + 62, // input 45 (0x2D char '-') => 62 (0x3E) INVALID_VALUE, // input 46 (0x2E) INVALID_VALUE, // input 47 (0x2F) - 52, // input 48 (0x30 char '0') = 52 (0x34) - 53, // input 49 (0x31 char '1') = 53 (0x35) - 54, // input 50 (0x32 char '2') = 54 (0x36) - 55, // input 51 (0x33 char '3') = 55 (0x37) - 56, // input 52 (0x34 char '4') = 56 (0x38) - 57, // input 53 (0x35 char '5') = 57 (0x39) - 58, // input 54 (0x36 char '6') = 58 (0x3A) - 59, // input 55 (0x37 char '7') = 59 (0x3B) - 60, // input 56 (0x38 char '8') = 60 (0x3C) - 61, // input 57 (0x39 char '9') = 61 (0x3D) + 52, // input 48 (0x30 char '0') => 52 (0x34) + 53, // input 49 (0x31 char '1') => 53 (0x35) + 54, // input 50 (0x32 char '2') => 54 (0x36) + 55, // input 51 (0x33 char '3') => 55 (0x37) + 56, // input 52 (0x34 char '4') => 56 (0x38) + 57, // input 53 (0x35 char '5') => 57 (0x39) + 58, // input 54 (0x36 char '6') => 58 (0x3A) + 59, // input 55 (0x37 char '7') => 59 (0x3B) + 60, // input 56 (0x38 char '8') => 60 (0x3C) + 61, // input 57 (0x39 char '9') => 61 (0x3D) INVALID_VALUE, // input 58 (0x3A) INVALID_VALUE, // input 59 (0x3B) INVALID_VALUE, // input 60 (0x3C) @@ -323,64 +455,64 @@ pub const URL_SAFE_DECODE: &'static [u8; 256] = &[ INVALID_VALUE, // input 62 (0x3E) INVALID_VALUE, // input 63 (0x3F) INVALID_VALUE, // input 64 (0x40) - 0, // input 65 (0x41 char 'A') = 0 (0x0) - 1, // input 66 (0x42 char 'B') = 1 (0x1) - 2, // input 67 (0x43 char 'C') = 2 (0x2) - 3, // input 68 (0x44 char 'D') = 3 (0x3) - 4, // input 69 (0x45 char 'E') = 4 (0x4) - 5, // input 70 (0x46 char 'F') = 5 (0x5) - 6, // input 71 (0x47 char 'G') = 6 (0x6) - 7, // input 72 (0x48 char 'H') = 7 (0x7) - 8, // input 73 (0x49 char 'I') = 8 (0x8) - 9, // input 74 (0x4A char 'J') = 9 (0x9) - 10, // input 75 (0x4B char 'K') = 10 (0xA) - 11, // input 76 (0x4C char 'L') = 11 (0xB) - 12, // input 77 (0x4D char 'M') = 12 (0xC) - 13, // input 78 (0x4E char 'N') = 13 (0xD) - 14, // input 79 (0x4F char 'O') = 14 (0xE) - 15, // input 80 (0x50 char 'P') = 15 (0xF) - 16, // input 81 (0x51 char 'Q') = 16 (0x10) - 17, // input 82 (0x52 char 'R') = 17 (0x11) - 18, // input 83 (0x53 char 'S') = 18 (0x12) - 19, // input 84 (0x54 char 'T') = 19 (0x13) - 20, // input 85 (0x55 char 'U') = 20 (0x14) - 21, // input 86 (0x56 char 'V') = 21 (0x15) - 22, // input 87 (0x57 char 'W') = 22 (0x16) - 23, // input 88 (0x58 char 'X') = 23 (0x17) - 24, // input 89 (0x59 char 'Y') = 24 (0x18) - 25, // input 90 (0x5A char 'Z') = 25 (0x19) + 0, // input 65 (0x41 char 'A') => 0 (0x0) + 1, // input 66 (0x42 char 'B') => 1 (0x1) + 2, // input 67 (0x43 char 'C') => 2 (0x2) + 3, // input 68 (0x44 char 'D') => 3 (0x3) + 4, // input 69 (0x45 char 'E') => 4 (0x4) + 5, // input 70 (0x46 char 'F') => 5 (0x5) + 6, // input 71 (0x47 char 'G') => 6 (0x6) + 7, // input 72 (0x48 char 'H') => 7 (0x7) + 8, // input 73 (0x49 char 'I') => 8 (0x8) + 9, // input 74 (0x4A char 'J') => 9 (0x9) + 10, // input 75 (0x4B char 'K') => 10 (0xA) + 11, // input 76 (0x4C char 'L') => 11 (0xB) + 12, // input 77 (0x4D char 'M') => 12 (0xC) + 13, // input 78 (0x4E char 'N') => 13 (0xD) + 14, // input 79 (0x4F char 'O') => 14 (0xE) + 15, // input 80 (0x50 char 'P') => 15 (0xF) + 16, // input 81 (0x51 char 'Q') => 16 (0x10) + 17, // input 82 (0x52 char 'R') => 17 (0x11) + 18, // input 83 (0x53 char 'S') => 18 (0x12) + 19, // input 84 (0x54 char 'T') => 19 (0x13) + 20, // input 85 (0x55 char 'U') => 20 (0x14) + 21, // input 86 (0x56 char 'V') => 21 (0x15) + 22, // input 87 (0x57 char 'W') => 22 (0x16) + 23, // input 88 (0x58 char 'X') => 23 (0x17) + 24, // input 89 (0x59 char 'Y') => 24 (0x18) + 25, // input 90 (0x5A char 'Z') => 25 (0x19) INVALID_VALUE, // input 91 (0x5B) INVALID_VALUE, // input 92 (0x5C) INVALID_VALUE, // input 93 (0x5D) INVALID_VALUE, // input 94 (0x5E) - 63, // input 95 (0x5F char '_') = 63 (0x3F) + 63, // input 95 (0x5F char '_') => 63 (0x3F) INVALID_VALUE, // input 96 (0x60) - 26, // input 97 (0x61 char 'a') = 26 (0x1A) - 27, // input 98 (0x62 char 'b') = 27 (0x1B) - 28, // input 99 (0x63 char 'c') = 28 (0x1C) - 29, // input 100 (0x64 char 'd') = 29 (0x1D) - 30, // input 101 (0x65 char 'e') = 30 (0x1E) - 31, // input 102 (0x66 char 'f') = 31 (0x1F) - 32, // input 103 (0x67 char 'g') = 32 (0x20) - 33, // input 104 (0x68 char 'h') = 33 (0x21) - 34, // input 105 (0x69 char 'i') = 34 (0x22) - 35, // input 106 (0x6A char 'j') = 35 (0x23) - 36, // input 107 (0x6B char 'k') = 36 (0x24) - 37, // input 108 (0x6C char 'l') = 37 (0x25) - 38, // input 109 (0x6D char 'm') = 38 (0x26) - 39, // input 110 (0x6E char 'n') = 39 (0x27) - 40, // input 111 (0x6F char 'o') = 40 (0x28) - 41, // input 112 (0x70 char 'p') = 41 (0x29) - 42, // input 113 (0x71 char 'q') = 42 (0x2A) - 43, // input 114 (0x72 char 'r') = 43 (0x2B) - 44, // input 115 (0x73 char 's') = 44 (0x2C) - 45, // input 116 (0x74 char 't') = 45 (0x2D) - 46, // input 117 (0x75 char 'u') = 46 (0x2E) - 47, // input 118 (0x76 char 'v') = 47 (0x2F) - 48, // input 119 (0x77 char 'w') = 48 (0x30) - 49, // input 120 (0x78 char 'x') = 49 (0x31) - 50, // input 121 (0x79 char 'y') = 50 (0x32) - 51, // input 122 (0x7A char 'z') = 51 (0x33) + 26, // input 97 (0x61 char 'a') => 26 (0x1A) + 27, // input 98 (0x62 char 'b') => 27 (0x1B) + 28, // input 99 (0x63 char 'c') => 28 (0x1C) + 29, // input 100 (0x64 char 'd') => 29 (0x1D) + 30, // input 101 (0x65 char 'e') => 30 (0x1E) + 31, // input 102 (0x66 char 'f') => 31 (0x1F) + 32, // input 103 (0x67 char 'g') => 32 (0x20) + 33, // input 104 (0x68 char 'h') => 33 (0x21) + 34, // input 105 (0x69 char 'i') => 34 (0x22) + 35, // input 106 (0x6A char 'j') => 35 (0x23) + 36, // input 107 (0x6B char 'k') => 36 (0x24) + 37, // input 108 (0x6C char 'l') => 37 (0x25) + 38, // input 109 (0x6D char 'm') => 38 (0x26) + 39, // input 110 (0x6E char 'n') => 39 (0x27) + 40, // input 111 (0x6F char 'o') => 40 (0x28) + 41, // input 112 (0x70 char 'p') => 41 (0x29) + 42, // input 113 (0x71 char 'q') => 42 (0x2A) + 43, // input 114 (0x72 char 'r') => 43 (0x2B) + 44, // input 115 (0x73 char 's') => 44 (0x2C) + 45, // input 116 (0x74 char 't') => 45 (0x2D) + 46, // input 117 (0x75 char 'u') => 46 (0x2E) + 47, // input 118 (0x76 char 'v') => 47 (0x2F) + 48, // input 119 (0x77 char 'w') => 48 (0x30) + 49, // input 120 (0x78 char 'x') => 49 (0x31) + 50, // input 121 (0x79 char 'y') => 50 (0x32) + 51, // input 122 (0x7A char 'z') => 51 (0x33) INVALID_VALUE, // input 123 (0x7B) INVALID_VALUE, // input 124 (0x7C) INVALID_VALUE, // input 125 (0x7D)