///|
fn main raise {
let args = @env.args()
let command = if args.length() > 1 {
@bencode.parse_command(@utf8.encode(args[1]))
} else {
@bencode.Help
}
let value = @bencode.fixture_linux_iso()
match command {
@bencode.Help => {
println("MoonBencode torrent toolkit")
println("commands: inspect validate files pieces magnet profile")
}
@bencode.Inspect => {
let meta = @bencode.TorrentMeta::from_bvalue(value)
println("inspect: validated Linux distribution fixture")
println(
"files=\{meta.files.length()} pieces=\{meta.piece_count()} bytes=\{meta.total_length}",
)
}
@bencode.Validate => {
let meta = @bencode.TorrentMeta::from_bvalue(value)
let report = @bencode.TorrentPolicy::strict().assess(meta)
println("validate: \{report.risk_level()}")
}
@bencode.Files => {
let meta = @bencode.TorrentMeta::from_bvalue(value)
println("files: \{meta.files.length()} file(s)")
}
@bencode.Pieces => {
let meta = @bencode.TorrentMeta::from_bvalue(value)
println("pieces: \{meta.piece_count()} x \{meta.piece_length} bytes")
}
@bencode.Magnet => {
let meta = @bencode.TorrentMeta::from_bvalue(value)
let magnet = @bencode.MagnetLink::new(meta.info_hash).with_name(meta.name)
println("magnet generated (\{magnet.to_uri().length()} bytes)")
}
@bencode.Profile => {
let statistics = @bencode.profile(value)
println(
"profile: values=\{statistics.value_count()} depth=\{statistics.max_depth}",
)
}
}
}