znap 0.1.37

Performance-first Framework to build APIs compatible with the Solana Actions Spec.
Documentation
use std::env::var;

use solana_sdk::signature::Keypair;

#[derive(Debug)]
pub struct Env {
    pub identity: Vec<u8>,
    pub keypair: Keypair,
    pub rpc_url: String,
}

impl Default for Env {
    fn default() -> Self {
        let keypair = var("IDENTITY_KEYPAIR")
            .or(var("IDENTITY_KEYPAIR_PATH").map(|path| std::fs::read_to_string(path).unwrap()))
            .map(|i| {
                if i.starts_with('[') {
                    let i = i.trim_start_matches('[').trim_end_matches(']');
                    let b = i
                        .split(',')
                        .map(|b| b.trim().parse::<u8>().unwrap())
                        .collect::<Vec<_>>();
                    Keypair::from_bytes(&b).unwrap()
                } else {
                    Keypair::from_base58_string(&i)
                }
            })
            .expect("Cannot found `IDENTITY_KEYPAIR_PATH` or `IDENTITY_KEYPAIR` env var");

        let identity = keypair.to_bytes().to_vec();

        let rpc_url = var("RPC_URL").expect("Cannot found `RPC_URL` env var");

        Self {
            identity,
            keypair,
            rpc_url,
        }
    }
}