///|
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 })
}