/**
 * gvir_storage_pool_get_info:
 * @pool: the storage_pool
 * @err: Place-holder for possible errors
 *
 * Returns: (transfer full): the info. The returned pointer should be
 * freed using #g_boxed_free() when no longer needed.
 */
GVirStoragePoolInfo *gvir_storage_pool_get_info(GVirStoragePool *pool,
                                                GError **err)
{
    GVirStoragePoolPrivate *priv;
    virStoragePoolInfo info;
    GVirStoragePoolInfo *ret;

    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
    g_return_val_if_fail(err == NULL || *err == NULL, NULL);

    priv = pool->priv;
    if (virStoragePoolGetInfo(priv->handle, &info) < 0) {
        if (err)
            *err = gvir_error_new_literal(GVIR_STORAGE_POOL_ERROR,
                                          0,
                                          "Unable to get storage pool info");
        return NULL;
    }

    ret = g_slice_new(GVirStoragePoolInfo);
    ret->state = info.state;
    ret->capacity = info.capacity;
    ret->allocation = info.allocation;
    ret->available = info.available;

    return ret;
}
    ERL_NIF_TERM
vert_virStoragePoolGetInfo(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
    VERT_RESOURCE *sp = NULL;
    ErlNifBinary info = {0};


    VERT_GET_RESOURCE(0, sp, VERT_RES_STORAGEPOOL);

    if (!enif_alloc_binary(sizeof(virStoragePoolInfo), &info))
        return error_tuple(env, atom_enomem);

    VERTERR(virStoragePoolGetInfo(sp->res, (virStoragePoolInfoPtr)info.data) < 0);

    return enif_make_tuple2(env,
            atom_ok,
            enif_make_binary(env, &info));
}