whisky 1.0.22

The Cardano Rust SDK, inspired by MeshJS
Documentation
use std::collections::HashMap;

use whisky_common::models::{Asset, UTxO};

pub fn utxos_to_assets(utxos: &[UTxO]) -> HashMap<String, String> {
    let mut balance: HashMap<String, String> = HashMap::new();

    for utxo in utxos {
        for asset in &utxo.output.amount {
            let (policy, name) = Asset::unit_to_tuple(&asset.unit());
            let quantity = asset.quantity().clone();
            let asset_key = if policy.is_empty() {
                name
            } else {
                format!("{}/{}", policy, name)
            };

            balance
                .entry(asset_key)
                .and_modify(|v| {
                    *v = (Asset::new(asset.unit().clone(), v.clone()).quantity_i128()
                        + Asset::new(asset.unit().clone(), quantity.clone()).quantity_i128())
                    .to_string()
                })
                .or_insert(Asset::new(asset.unit().clone(), quantity).quantity());
        }
    }

    balance
}