Documentation
use bankid::config::{API_URL_TEST, CA_TEST};
use bankid::{
    client::BankID,
    config::{ConfigBuilder, Pkcs12},
    model::{AuthenticatePayloadBuilder, CancelPayload, CollectPayload},
};

#[tokio::main]
async fn main() {
    let bank_id = client();

    let payload = AuthenticatePayloadBuilder::default()
        .end_user_ip("123.123.123.123".to_string())
        .build()
        .unwrap();

    let authenticate = &bank_id.authenticate(payload).await.unwrap();
    let collect = bank_id
        .collect(CollectPayload {
            order_ref: authenticate.clone().order_ref,
        })
        .await
        .unwrap();

    let cancel = bank_id
        .cancel(CancelPayload {
            order_ref: authenticate.clone().order_ref,
        })
        .await
        .unwrap();

    println!("{:#?}", authenticate);
    println!("{:#?}", collect);
    println!("{:#?}", cancel);
}

fn client() -> BankID {
    let pkcs12 = Pkcs12::Der {
        der: P12_TEST.to_vec(),
        password: "qwerty123".to_string(),
    };

    let config = ConfigBuilder::default()
        .pkcs12(pkcs12)
        .url(API_URL_TEST.to_string())
        .ca(CA_TEST.to_string())
        .build()
        .unwrap();

    BankID::new(config)
}

const P12_TEST: &[u8] = include_bytes!("../resources/testcert.p12");