asn1obj/
asn1impl.rs

1
2use std::io::{Write};
3use std::error::Error;
4//use serde_json;
5
6pub 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	//fn encode_json(&self, key :&str,val :&mut serde_json::value::Value) -> Result<i32,Box<dyn Error>>;
32	//fn decode_json(&mut self, key :&str, val :&serde_json::value::Value) -> Result<i32,Box<dyn Error>>;
33}
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}