1
2use std::io::{Write};
3use std::error::Error;
4pub trait Asn1Op {
7 fn equal_asn1(&self, other :&Self) -> bool {
8 let ores1 = self.encode_asn1();
9 let ores2 = other.encode_asn1();
10 if ores1.is_err() || ores2.is_err() {
11 return false;
12 }
13
14 let sdata = ores1.unwrap();
15 let odata = ores2.unwrap();
16 if sdata.len() != odata.len() {
17 return false;
18 }
19
20 for idx in 0..sdata.len() {
21 if sdata[idx] != odata[idx] {
22 return false;
23 }
24 }
25 return true;
26 }
27 fn decode_asn1(&mut self,code :&[u8]) -> Result<usize,Box<dyn Error>>;
28 fn encode_asn1(&self) -> Result<Vec<u8>, Box<dyn Error>>;
29 fn print_asn1<U :Write>(&self,name :&str,tab :i32, iowriter :&mut U) -> Result<(),Box<dyn Error>>;
30 fn init_asn1() -> Self;
31 }
34
35pub trait Asn1Selector {
36 fn equal_asn1(&self, other :&Self) -> bool {
37 let ores1 = self.encode_select();
38 let ores2 = other.encode_select();
39 if ores1.is_err() || ores2.is_err() {
40 return false;
41 }
42
43 let sdata = ores1.unwrap();
44 let odata = ores2.unwrap();
45 if sdata != odata {
46 return false;
47 }
48
49 let ores1 = self.decode_select();
50 let ores2 = other.decode_select();
51 if ores1.is_err() || ores2.is_err() {
52 return false;
53 }
54
55 let sdata = ores1.unwrap();
56 let odata = ores2.unwrap();
57 if sdata != odata {
58 return false;
59 }
60 return true;
61 }
62 fn decode_select(&self) -> Result<String,Box<dyn Error>>;
63 fn encode_select(&self) -> Result<String,Box<dyn Error>>;
64}