1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
impl B64Encode<i32,String> for B64<String>{ fn encode(data:i32)->String{ let mut s=String::with_capacity(8); s.push(ALPHABET64[((data>>26)&0b111111) as usize]); s.push(ALPHABET64[((data>>20)&0b111111) as usize]); s.push(ALPHABET64[((data>>14)&0b111111) as usize]); s.push(ALPHABET64[((data>>08)&0b111111) as usize]); s.push(ALPHABET64[((data>>02)&0b111111) as usize]); s.push(ALPHABET64[((data<<04)&0b111111) as usize]); s.push('='); s.push('='); return s; } } impl B64Decode<String,i32> for B64<i32>{ fn decode(data:String)->i32{ let mut n=0u32; let b=data.into_bytes(); n|=(if b[00]>64 {if b[00]>96 {b[00]-71} else {b[0]-65}} else {if b[0]>47 {b[0]+4}else{if b[0]==43 {b[0]+19}else{b[0]+16}}} as u32)<<26; n|=(if b[01]>64 {if b[01]>96 {b[01]-71} else {b[1]-65}} else {if b[1]>47 {b[1]+4}else{if b[1]==43 {b[1]+19}else{b[1]+16}}} as u32)<<20; n|=(if b[02]>64 {if b[02]>96 {b[02]-71} else {b[2]-65}} else {if b[2]>47 {b[2]+4}else{if b[2]==43 {b[2]+19}else{b[2]+16}}} as u32)<<14; n|=(if b[03]>64 {if b[03]>96 {b[03]-71} else {b[3]-65}} else {if b[3]>47 {b[3]+4}else{if b[3]==43 {b[3]+19}else{b[3]+16}}} as u32)<<08; n|=(if b[04]>64 {if b[04]>96 {b[04]-71} else {b[4]-65}} else {if b[4]>47 {b[4]+4}else{if b[4]==43 {b[4]+19}else{b[4]+16}}} as u32)<<02; n|=(if b[05]>64 {if b[05]>96 {b[05]-71} else {b[5]-65}} else {if b[5]>47 {b[5]+4}else{if b[5]==43 {b[5]+19}else{b[5]+16}}} as u32)>>04; return n as i32; } }