Revision control
Copy as Markdown
Other Tools
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#[derive(Debug, Copy, Clone)]
pub struct HuffmanTableEntry {
pub len: u8,
pub val: u32,
}
macro_rules! huffman_table {
[$($v:expr => $l:expr),+ $(,)?] => {
&[
$(HuffmanTableEntry { len: $l, val: $v }),+
]
};
}
// Table contains the raw HPACK Huffman table
pub const HUFFMAN_TABLE: &[HuffmanTableEntry] = huffman_table![
0x1ff8 => 13,
0x007f_ffd8 => 23,
0x0fff_ffe2 => 28,
0x0fff_ffe3 => 28,
0x0fff_ffe4 => 28,
0x0fff_ffe5 => 28,
0x0fff_ffe6 => 28,
0x0fff_ffe7 => 28,
0x0fff_ffe8 => 28,
0x00ff_ffea => 24,
0x3fff_fffc => 30,
0x0fff_ffe9 => 28,
0x0fff_ffea => 28,
0x3fff_fffd => 30,
0x0fff_ffeb => 28,
0x0fff_ffec => 28,
0x0fff_ffed => 28,
0x0fff_ffee => 28,
0x0fff_ffef => 28,
0x0fff_fff0 => 28,
0x0fff_fff1 => 28,
0x0fff_fff2 => 28,
0x3fff_fffe => 30,
0x0fff_fff3 => 28,
0x0fff_fff4 => 28,
0x0fff_fff5 => 28,
0x0fff_fff6 => 28,
0x0fff_fff7 => 28,
0x0fff_fff8 => 28,
0x0fff_fff9 => 28,
0x0fff_fffa => 28,
0x0fff_fffb => 28,
0x14 => 6, // ' '
0x3f8 => 10, // '!'
0x3f9 => 10, // '"'
0xffa => 12, // '#'
0x1ff9 => 13, // '$'
0x15 => 6, // '%'
0xf8 => 8, // '&'
0x7fa => 11, // '''
0x3fa => 10, // '('
0x3fb => 10, // ')'
0xf9 => 8, // '*'
0x7fb => 11, // '+'
0xfa => 8, // ','
0x16 => 6, // '-'
0x17 => 6, // '.'
0x18 => 6, // '/'
0x0 => 5, // '0'
0x1 => 5, // '1'
0x2 => 5, // '2'
0x19 => 6, // '3'
0x1a => 6, // '4'
0x1b => 6, // '5'
0x1c => 6, // '6'
0x1d => 6, // '7'
0x1e => 6, // '8'
0x1f => 6, // '9'
0x5c => 7, // ':'
0xfb => 8, // ';'
0x7ffc => 15, // '<'
0x20 => 6, // '='
0xffb => 12, // '>'
0x3fc => 10, // '?'
0x1ffa => 13, // '@'
0x21 => 6, // 'A'
0x5d => 7, // 'B'
0x5e => 7, // 'C'
0x5f => 7, // 'D'
0x60 => 7, // 'E'
0x61 => 7, // 'F'
0x62 => 7, // 'G'
0x63 => 7, // 'H'
0x64 => 7, // 'I'
0x65 => 7, // 'J'
0x66 => 7, // 'K'
0x67 => 7, // 'L'
0x68 => 7, // 'M'
0x69 => 7, // 'N'
0x6a => 7, // 'O'
0x6b => 7, // 'P'
0x6c => 7, // 'Q'
0x6d => 7, // 'R'
0x6e => 7, // 'S'
0x6f => 7, // 'T'
0x70 => 7, // 'U'
0x71 => 7, // 'V'
0x72 => 7, // 'W'
0xfc => 8, // 'X'
0x73 => 7, // 'Y'
0xfd => 8, // 'Z'
0x1ffb => 13, // '['
0x0007_fff0 => 19, // '\'
0x1ffc => 13, // ']'
0x3ffc => 14, // '^'
0x22 => 6, // '_'
0x7ffd => 15, // '`'
0x3 => 5, // 'a'
0x23 => 6, // 'b'
0x4 => 5, // 'c'
0x24 => 6, // 'd'
0x5 => 5, // 'e'
0x25 => 6, // 'f'
0x26 => 6, // 'g'
0x27 => 6, // 'h'
0x6 => 5, // 'i'
0x74 => 7, // 'j'
0x75 => 7, // 'k'
0x28 => 6, // 'l'
0x29 => 6, // 'm'
0x2a => 6, // 'n'
0x7 => 5, // 'o'
0x2b => 6, // 'p'
0x76 => 7, // 'q'
0x2c => 6, // 'r'
0x8 => 5, // 's'
0x9 => 5, // 't'
0x2d => 6, // 'u'
0x77 => 7, // 'v'
0x78 => 7, // 'w'
0x79 => 7, // 'x'
0x7a => 7, // 'y'
0x7b => 7, // 'z'
0x7ffe => 15, // '{'
0x7fc => 11, // '|'
0x3ffd => 14, // '}'
0x1ffd => 13, // '~'
0x0fff_fffc => 28,
0x000f_ffe6 => 20,
0x003f_ffd2 => 22,
0x000f_ffe7 => 20,
0x000f_ffe8 => 20,
0x003f_ffd3 => 22,
0x003f_ffd4 => 22,
0x003f_ffd5 => 22,
0x007f_ffd9 => 23,
0x003f_ffd6 => 22,
0x007f_ffda => 23,
0x007f_ffdb => 23,
0x007f_ffdc => 23,
0x007f_ffdd => 23,
0x007f_ffde => 23,
0x00ff_ffeb => 24,
0x007f_ffdf => 23,
0x00ff_ffec => 24,
0x00ff_ffed => 24,
0x003f_ffd7 => 22,
0x007f_ffe0 => 23,
0x00ff_ffee => 24,
0x007f_ffe1 => 23,
0x007f_ffe2 => 23,
0x007f_ffe3 => 23,
0x007f_ffe4 => 23,
0x001f_ffdc => 21,
0x003f_ffd8 => 22,
0x007f_ffe5 => 23,
0x003f_ffd9 => 22,
0x007f_ffe6 => 23,
0x007f_ffe7 => 23,
0x00ff_ffef => 24,
0x003f_ffda => 22,
0x001f_ffdd => 21,
0x000f_ffe9 => 20,
0x003f_ffdb => 22,
0x003f_ffdc => 22,
0x007f_ffe8 => 23,
0x007f_ffe9 => 23,
0x001f_ffde => 21,
0x007f_ffea => 23,
0x003f_ffdd => 22,
0x003f_ffde => 22,
0x00ff_fff0 => 24,
0x001f_ffdf => 21,
0x003f_ffdf => 22,
0x007f_ffeb => 23,
0x007f_ffec => 23,
0x001f_ffe0 => 21,
0x001f_ffe1 => 21,
0x003f_ffe0 => 22,
0x001f_ffe2 => 21,
0x007f_ffed => 23,
0x003f_ffe1 => 22,
0x007f_ffee => 23,
0x007f_ffef => 23,
0x000f_ffea => 20,
0x003f_ffe2 => 22,
0x003f_ffe3 => 22,
0x003f_ffe4 => 22,
0x007f_fff0 => 23,
0x003f_ffe5 => 22,
0x003f_ffe6 => 22,
0x007f_fff1 => 23,
0x03ff_ffe0 => 26,
0x03ff_ffe1 => 26,
0x000f_ffeb => 20,
0x0007_fff1 => 19,
0x003f_ffe7 => 22,
0x007f_fff2 => 23,
0x003f_ffe8 => 22,
0x01ff_ffec => 25,
0x03ff_ffe2 => 26,
0x03ff_ffe3 => 26,
0x03ff_ffe4 => 26,
0x07ff_ffde => 27,
0x07ff_ffdf => 27,
0x03ff_ffe5 => 26,
0x00ff_fff1 => 24,
0x01ff_ffed => 25,
0x0007_fff2 => 19,
0x001f_ffe3 => 21,
0x03ff_ffe6 => 26,
0x07ff_ffe0 => 27,
0x07ff_ffe1 => 27,
0x03ff_ffe7 => 26,
0x07ff_ffe2 => 27,
0x00ff_fff2 => 24,
0x001f_ffe4 => 21,
0x001f_ffe5 => 21,
0x03ff_ffe8 => 26,
0x03ff_ffe9 => 26,
0x0fff_fffd => 28,
0x07ff_ffe3 => 27,
0x07ff_ffe4 => 27,
0x07ff_ffe5 => 27,
0x000f_ffec => 20,
0x00ff_fff3 => 24,
0x000f_ffed => 20,
0x001f_ffe6 => 21,
0x003f_ffe9 => 22,
0x001f_ffe7 => 21,
0x001f_ffe8 => 21,
0x007f_fff3 => 23,
0x003f_ffea => 22,
0x003f_ffeb => 22,
0x01ff_ffee => 25,
0x01ff_ffef => 25,
0x00ff_fff4 => 24,
0x00ff_fff5 => 24,
0x03ff_ffea => 26,
0x007f_fff4 => 23,
0x03ff_ffeb => 26,
0x07ff_ffe6 => 27,
0x03ff_ffec => 26,
0x03ff_ffed => 26,
0x07ff_ffe7 => 27,
0x07ff_ffe8 => 27,
0x07ff_ffe9 => 27,
0x07ff_ffea => 27,
0x07ff_ffeb => 27,
0x0fff_fffe => 28,
0x07ff_ffec => 27,
0x07ff_ffed => 27,
0x07ff_ffee => 27,
0x07ff_ffef => 27,
0x07ff_fff0 => 27,
0x03ff_ffee => 26,
0x3fff_ffff => 30,
];