///|
let tagged_encoding_version = 42
///|
pub fn TaggedFuseFilter::encode_words(self : TaggedFuseFilter) -> Array[Int] {
let words : Array[Int] = [tagged_encoding_version, self.tags.length()]
for index in 0.. Result[TaggedFuseFilter, FuseError] {
if words.length() < 2 || words[0] != tagged_encoding_version || words[1] <= 0 {
return Err(InvalidEncoding)
}
let count = words[1]
let mut cursor = 2
let tags : Array[Int] = []
let filters : Array[BinaryFuseFilter] = []
let mut previous_tag : Int? = None
for _ in 0.. words.length() - cursor {
return Err(InvalidEncoding)
}
match previous_tag {
Some(previous) if previous >= tag => return Err(InvalidEncoding)
_ => ()
}
let encoded = Array::make(length, 0)
for index in 0.. {
tags.push(tag)
filters.push(filter)
previous_tag = Some(tag)
}
Err(_) => return Err(InvalidEncoding)
}
}
if cursor != words.length() {
return Err(InvalidEncoding)
}
Ok({ tags, filters })
}