Skip to main content

romm_api/core/
roms.rs

1//! Shared ROM list fetching helpers.
2
3use anyhow::Result;
4
5use crate::client::RommClient;
6use crate::endpoints::roms::GetRoms;
7use crate::types::RomList;
8
9/// Maximum ROM rows fetched by paginated helpers (TUI safety cap).
10pub const ROM_PAGE_CEILING: u64 = 20000;
11
12/// Fetch all pages for a `GetRoms` request up to [`ROM_PAGE_CEILING`].
13pub async fn fetch_roms_paginated(client: &RommClient, req: &GetRoms) -> Result<RomList> {
14    let mut roms = client.call(req).await?;
15    let total = roms.total;
16    while (roms.items.len() as u64) < total && (roms.items.len() as u64) < ROM_PAGE_CEILING {
17        let mut next_req = req.clone();
18        next_req.offset = Some(roms.items.len() as u32);
19        let next_batch = client.call(&next_req).await?;
20        if next_batch.items.is_empty() {
21            break;
22        }
23        roms.items.extend(next_batch.items);
24    }
25    Ok(roms)
26}