pi_rust 0.1.2

Pi Network SDK Rust implementation
Documentation
#[cfg(test)]
mod tests {
    use pi_rust::{types::*, PiNetwork};
    use serde_json::json;
    use std::env;

    fn setup() -> PiNetwork {
        dotenvy::dotenv().expect("Failed to load the env file");
        let pi_api_key: String = env::var("PI_API_KEY").expect("PI_API_KEY must be set");
        let wallet_private_seed: String =
            env::var("WALLET_PRIVATE_SEED").expect("WALLET_PRIVATE_SEED must be set");
        PiNetwork::new(pi_api_key, wallet_private_seed, None, None).unwrap()
    }

    #[tokio::test]
    async fn test_combined() {
        let mut pi = setup();

        let user_uid = env::var("USER_ID").expect("USER_ID must be set");

        println!("Complete payment test");
        let payment_data = PaymentArgs {
            amount: 0.1,
            memo: "Refund for apple pie".to_string(),
            metadata: json!({"productId": "apple-pie-1"}),
            uid: user_uid.clone(),
        };

        let payment_id = pi.create_payment(payment_data.clone()).await.unwrap();
        let submit_payment_txid = pi.submit_payment(payment_id.clone()).await.unwrap();
        let complete_payment = pi
            .complete_payment(payment_id.clone(), submit_payment_txid)
            .await
            .unwrap();

        assert_eq!(complete_payment.identifier, payment_id);

        println!("Cancel payment test");
        let payment_id2 = pi.create_payment(payment_data.clone()).await.unwrap();

        let get_payment2 = pi
            .get_payment(payment_id2.clone().to_string())
            .await
            .unwrap();

        let cancel_payment2 = pi.cancel_payment(payment_id2).await.unwrap();
        assert_eq!(get_payment2.identifier, cancel_payment2.identifier);

        println!("Looking for incomplete payment");
        let payment_data2 = PaymentArgs {
            amount: 2.1,
            memo: "Refund for apple pie".to_string(),
            metadata: json!({"productId": "apple-pie-1"}),
            uid: user_uid.clone(),
        };

        let payment_id3 = pi.create_payment(payment_data2.clone()).await.unwrap();

        let incomplete_payment = pi.get_incomplete_server_payments().await.unwrap();
        let have_incomplete_vec = incomplete_payment.is_empty();

        let _cancel_payment = pi.cancel_payment(payment_id3).await;

        let incomplete_payment2 = pi.get_incomplete_server_payments().await.unwrap();
        let no_incomplete_vec = incomplete_payment2.is_empty();
        assert_ne!(have_incomplete_vec, no_incomplete_vec);
    }

    #[test]
    fn test_validate_seed_format() {
        let seed_valid = "SAFPHSUDCR3UUQX36MMRXJZBVZNKFP5OFOZSOLUWTT76QQUPKUUFNRNW";
        let seed_not_s = "WAFPHSUDCR3UUQX36MMRXJZBVZNKFP5OFOZSOLUWTT76QQUPKUUFNRNS";
        let seed_too_long = "SAFPHSUDCR3UUQX36MMRXJZBVZNKFP5OFOZSOLUWTT76QQUPKUUFNRNWG";
        let seed_too_short = "SAFPHSUDCR3UUQX36MMRXJZBVZNKFP5OFOZSOLUWTT76QQUPKUUFNR";
        let result_ok = PiNetwork::validate_seed_format(seed_valid);
        let result_err_not_s = PiNetwork::validate_seed_format(seed_not_s);
        let result_err_too_long = PiNetwork::validate_seed_format(seed_too_long);
        let result_err_too_short = PiNetwork::validate_seed_format(seed_too_short);
        assert_eq!(true, result_ok.is_ok());
        assert_eq!(true, result_err_not_s.is_err());
        assert_eq!(true, result_err_too_long.is_err());
        assert_eq!(true, result_err_too_short.is_err());
    }
}