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;
    }
}