mb-solana 0.0.10

my solana lib helpers and cli tools
Documentation
use crate::account::keypair_bytes_to_string;
use colored_json::ToColoredJson;
use itertools::{Either, Itertools};
use serde_yaml::Value;
use solana_sdk::signature::{Keypair, Signer};
use std::process;

pub fn print_colored_json(data: &str) {
    println!("{}", data.to_colored_json_auto().unwrap());
}

pub fn print_keypair(keypair: Keypair) {
    println!("public: {}", keypair.pubkey());
    println!("private base58: {}", keypair.to_base58_string());
    println!("private arr: {}", keypair_bytes_to_string(keypair.to_bytes()));
}

pub fn print_fatal(message: impl AsRef<str>) -> ! {
    eprintln!("fatal error: {}", message.as_ref());
    process::exit(1);
}

pub fn str_to_vec(data: &str, lower: bool, remove_comments: bool, unique: bool) -> Vec<String> {
    let data = if lower { data.to_lowercase() } else { data.into() };
    let result = data.split('\n').into_iter().map(|x| x.trim().to_string()).filter(|x| !x.is_empty());
    let result = if unique { Either::Right(result.unique()) } else { Either::Left(result) };
    let result = if remove_comments {
        Either::Right(result.map(|x| x.split('#').next().unwrap().trim().to_string()))
    } else {
        Either::Left(result)
    };

    result.collect()
}

pub fn replace_str_with_vec(data: &mut Value, field: &str, lower: bool, remove_comments: bool, unique: bool) -> Option<()> {
    let field_value = data.get(field)?.as_str()?;
    let new_data: Vec<Value> =
        str_to_vec(field_value, lower, remove_comments, unique).iter().map(|x| Value::String(x.to_string())).collect_vec();
    data.as_mapping_mut()?.insert(serde_yaml::Value::String(field.to_string()), serde_yaml::Value::Sequence(new_data));
    None
}

#[cfg(test)]
mod tests {
    use std::vec;

    use super::str_to_vec;

    #[test]
    fn f1() {
        let data = "\
        A # 1
        b

        c
        b
        ";
        assert_eq!(str_to_vec(&data, false, false, false), vec!["A # 1", "b", "c", "b"]);
        assert_eq!(str_to_vec(&data, true, true, true), vec!["a", "b", "c"]);
    }
}