msvc-demangler 0.11.0

A rust library that demangles / undecorates C++ symbols mangled by MSVC
Documentation
extern crate msvc_demangler;

use std::env;
use std::io;
use std::io::BufRead;

fn main() {
    let mut args: Vec<_> = env::args().collect();
    args.remove(0);

    let verbose = if args.first().map(|x| x.as_str()) == Some("-v") {
        args.remove(0);
        true
    } else {
        false
    };

    let print_demangled = |sym: &str| {
        let parsed = match msvc_demangler::parse(sym) {
            Ok(parsed) => parsed,
            Err(err) => {
                eprintln!("error: {}", err);
                println!("{}", sym);
                return;
            }
        };
        if verbose {
            eprintln!("{:#?}", &parsed);
        }
        let flags = msvc_demangler::DemangleFlags::llvm();
        let demangled = msvc_demangler::serialize(&parsed, flags);
        println!("{}", demangled);
    };

    if args.is_empty() {
        let stdin = io::stdin();
        let handle = stdin.lock();

        for line in handle.lines() {
            match line {
                Ok(line) => print_demangled(&line),
                _ => continue,
            }
        }
    } else {
        for arg in args {
            print_demangled(&arg);
        }
    }
}