我有一個序列基本鏽類型BERT格式下面的代碼:結構功能,可以讓任何類型的
pub struct Serializer;
pub trait Serialize<T> {
fn to_bert(&self, data: T) -> Vec<u8>;
}
impl Serializer {
pub fn new() -> Serializer {
Serializer{}
}
pub fn term_to_binary<T: Any + Debug>(&self, data: T) -> Vec<u8> {
self.to_bert(data)
}
pub fn generate_term(&self, tag: BertTag, data: Vec<u8>) -> Vec<u8> {
let mut binary = vec![tag as u8];
binary.extend(data.iter().clone());
binary
}
pub fn convert_string_to_binary(&self, data: &str) -> Vec<u8> {
let binary_string = data.as_bytes();
let binary_length = binary_string.len() as u8;
let mut binary = vec![0u8, binary_length];
binary.extend(binary_string.iter().clone());
binary
}
pub fn merge_atoms(&self, atom_1: Vec<u8>, atom_2: Vec<u8>) -> Vec<u8> {
let mut binary: Vec<u8> = atom_1.clone();
binary.extend(atom_2.iter().clone());
binary
}
pub fn get_bert_atom(&self) -> Vec<u8> {
let binary_string = self.convert_string_to_binary(BERT_LABEL);
self.generate_term(BertTag::Atom, binary_string)
}
}
impl Serialize<u8> for Serializer {
fn to_bert(&self, data: u8) -> Vec<u8> {
self.generate_term(BertTag::SmallInteger, vec![data])
}
}
impl Serialize<bool> for Serializer {
fn to_bert(&self, data: bool) -> Vec<u8> {
let boolean_string = data.to_string();
let binary_boolean = self.convert_string_to_binary(&boolean_string);
let bert_atom = self.get_bert_atom();
let boolean_atom = self.generate_term(BertTag::Atom, binary_boolean);
self.merge_atoms(bert_atom, boolean_atom)
}
}
有如何正確地實施在防鏽語言方面term_to_binary
功能在其中的主要問題,我們可以通過一些基本類型(如整數,布爾值等)。我能不知何故在term_to_binary
獲取某些數據時,能夠「隨時」獲取某種類型的功能並撥打特定功能的電話號碼?
之後,我想寫幾個測試,這讓我確信所有工作正常。例如,它可以是這樣的:
#[cfg(test)]
mod test {
use super::{Serializer};
#[test]
fn test_serialize_bool() {
let serializer = Serializer::new();
println!(serializer.term_to_binary(true), [100, 0, 4, 116, 114, 117, 101])
}
}
對於整數,映射,元組測試用例將看起來非常相似。
請考慮更改您的示例,以便編譯它。我會建議刪除不必要的方法。對於'term_to_binary',你可以寫'self.to_bert(data)'作爲註釋並調用'未實現!()'。 – malbarbo