piecework_cli 0.2.0

Client to interact with a piecework application running on holochain
Documentation
use crate::{ham::Ham, CommonOpts};
use anyhow::Result;
use holochain_types::dna::ActionHashB64;
use holochain_types::prelude::AgentPubKeyB64;
use rave_engine::types::entries::parked_link::ParkedLinkExt;
use rave_engine::types::entries::InvoiceInput;
use rave_engine::types::return_type::Transaction;
use std::str::FromStr;
use zfuel::fuel::ZFuel;

pub async fn create_spend(
    value: CommonOpts,
    receiver: String,
    amount: String,
    note: Option<String>,
    auto_credit_check: Option<bool>,
) -> Result<()> {
    let agent = Ham::connect(value).await?;

    let input = serde_json::json!({
        "receiver": receiver,
        "amount": amount,
        "note": note,
        "auto_credit_check": auto_credit_check.unwrap_or(true)
    });

    let result: (Transaction, ActionHashB64) = agent
        .zome_call("alliance", "transactor", "create_spend", input)
        .await?;

    println!("===================");
    println!("Spend Created:");
    println!("{:#?}", result);
    println!("===================");

    Ok(())
}

pub async fn create_invoice(
    value: CommonOpts,
    spender: String,
    amount: String,
    note: Option<String>,
) -> Result<()> {
    let agent = Ham::connect(value).await?;

    let input: InvoiceInput = InvoiceInput {
        spender: AgentPubKeyB64::from_str(&spender)?,
        amount: vec![ZFuel::from_str(&amount)?],
        note: note,
    };

    let result: Transaction = agent
        .zome_call("alliance", "transactor", "create_invoice", input)
        .await?;

    println!("===================");
    println!("Invoice Created:");
    println!("{:#?}", result);
    println!("===================");

    Ok(())
}

pub async fn accept_transaction(
    value: CommonOpts,
    address: String,
    auto_credit_check: Option<bool>,
) -> Result<()> {
    let agent = Ham::connect(value).await?;

    let input = serde_json::json!({
        "address": address,
        "auto_credit_check": auto_credit_check.unwrap_or(true)
    });

    let result: Transaction = agent
        .zome_call("alliance", "transactor", "accept_transaction", input)
        .await?;

    println!("===================");
    println!("Transaction Accepted:");
    println!("{:#?}", result);
    println!("===================");

    Ok(())
}

pub async fn get_parked_spend(value: CommonOpts) -> Result<()> {
    let agent = Ham::connect(value).await?;

    let parked: Vec<ParkedLinkExt> = agent
        .zome_call("alliance", "transactor", "get_parked_spend", ())
        .await?;

    println!("===================");
    println!("Parked Spends:");
    println!("{:#?}", parked);
    println!("===================");

    Ok(())
}

pub async fn get_fees_for_transaction(value: CommonOpts, amount: String) -> Result<()> {
    let agent = Ham::connect(value).await?;

    let fees: String = agent
        .zome_call("alliance", "transactor", "get_fees_for_transaction", amount)
        .await?;

    println!("===================");
    println!("Transaction Fees:");
    println!("{}", fees);
    println!("===================");

    Ok(())
}

pub async fn get_transaction_amount_after_fees(value: CommonOpts, amount: String) -> Result<()> {
    let agent = Ham::connect(value).await?;

    let amount_after_fees: String = agent
        .zome_call(
            "alliance",
            "transactor",
            "get_transaction_amount_after_fees",
            amount,
        )
        .await?;

    println!("===================");
    println!("Amount After Fees:");
    println!("{}", amount_after_fees);
    println!("===================");

    Ok(())
}