sbpf 0.1.1

A complete toolchain for building and deploying Solana BPF programs
use std::fs::File;
use std::io::Read;

use anyhow::{Error, Result};
use sbpf_disassembler::program::Program;

pub fn disassemble(filename: String, asm: bool) -> Result<(), Error> {
    let mut file = File::open(filename)?;
    let mut b = vec![];
    file.read_to_end(&mut b)?;
    let program = Program::from_bytes(b.as_ref())?;

    if asm {
        println!(
            "{}",
            program
                .section_header_entries
                .iter()
                .map(|h| h.ixs.clone())
                .filter(|ixs| !ixs.is_empty())
                .map(|ixs| ixs
                    .iter()
                    .map(|i| i.to_asm().unwrap())
                    .collect::<Vec<String>>()
                    .join("\n"))
                .collect::<Vec<String>>()
                .join("\n")
        );
    } else {
        println!("{}", serde_json::to_string_pretty(&program)?);
    }

    Ok(())
}