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(())
}