use crate::{display::format_table, ham::Ham, CommonOpts};
use anyhow::Result;
use colored::Colorize;
use holochain_types::dna::ActionHash;
use rave_engine::types::entries::{CodeTemplateExt, SAVED};
use rave_engine::types::Transaction;
pub async fn execute_saved(value: CommonOpts, input: String) -> Result<()> {
let agent = Ham::connect(value).await?;
let input: serde_json::Value = serde_json::from_str(&input)?;
let result: (SAVED, ActionHash) = agent
.zome_call("alliance", "transactor", "execute", input)
.await?;
println!("===================");
println!("SAVED Executed:");
println!("SAVED: {:#?}", result.0);
println!("Action Hash: {:#?}", result.1);
println!("===================");
Ok(())
}
pub async fn get_incoming_saveds(value: CommonOpts) -> Result<()> {
let agent = Ham::connect(value).await?;
let saveds: Vec<Transaction> = agent
.zome_call("alliance", "transactor", "get_incoming_saveds", ())
.await?;
println!("===================");
println!("Incoming SAVEDs:");
println!("{:#?}", saveds);
println!("===================");
Ok(())
}
pub async fn collect_from_saved(value: CommonOpts, saved: String) -> Result<()> {
let agent = Ham::connect(value).await?;
let saved: serde_json::Value = serde_json::from_str(&saved)?;
let result: Transaction = agent
.zome_call("alliance", "transactor", "collect_from_saved", saved)
.await?;
println!("===================");
println!("SAVED Accepted:");
println!("{:#?}", result);
println!("===================");
Ok(())
}
pub async fn get_code_templates_lib(value: CommonOpts) -> Result<Vec<CodeTemplateExt>> {
let agent = Ham::connect(value).await?;
let saveds: Vec<CodeTemplateExt> = agent
.zome_call("alliance", "transactor", "get_code_templates_lib", ())
.await?;
println!("Code Templates Library:");
if !saveds.is_empty() {
let table = format_table(&saveds, "Code Templates Library");
table.printstd();
} else {
println!("{}", "No code templates library".dimmed());
}
Ok(saveds)
}