///|
/// Runnable end-to-end example for backup storage with two parity shards.
fn main raise {
  let codec = try! @lib.Codec::new(3, 2)
  let input = b"A backup object distributed across independent storage locations."
  let object = try! @lib.encode_object(
    codec,
    input,
    20261001,
    stripe_payload_limit=16,
  )
  let retained : Array[@lib.ShardEnvelope] = []
  for frame in object.frames() {
    if frame.shard_index() != 1 && frame.shard_index() != 4 {
      retained.push(frame)
    }
  }
  let recovered = try! @lib.recover_object(object.manifest(), retained)
  assert_eq(recovered.payload(), input)
  let repair = try! @lib.repair_object(object.manifest(), retained)
  println("original bytes: " + input.length().to_string())
  println("stripes: " + recovered.stripe_count().to_string())
  println("replacement frames: " + repair.replacement_count().to_string())
  println("backup recovery: ok")
}