1use anyhow::Result;
4
5use crate::client::RommClient;
6use crate::endpoints::roms::GetRoms;
7use crate::types::RomList;
8
9pub const ROM_PAGE_CEILING: u64 = 20000;
11
12pub 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}