Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.law4devs.eu/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Every list() / deadlines() / query() call returns a Page<T>. The iter() / iter_deadlines() methods return a lazy Stream<T> that auto-paginates across all pages.

The Page<T> Object

let page = client.frameworks.list(Some(1), Some(20)).await?;

page.data            // Vec<T> — items on this page
page.meta.total      // u32 — total items across all pages
page.meta.page       // u32 — current page number
page.meta.per_page   // u32 — items per page
page.meta.pages      // u32 — total number of pages
page.links.next      // Option<String> — URL of next page
page.links.prev      // Option<String> — URL of previous page
page.has_next()      // bool — true if more pages exist
PageMeta fields
FieldTypeDescription
totalu32Total items
pageu32Current page
per_pageu32Items per page
pagesu32Total pages

Manual Pagination

let mut page_num = 1u32;
loop {
    let page = client.frameworks.list(Some(page_num), Some(20)).await?;
    for fw in &page.data {
        println!("{}", fw.name);
    }
    if !page.has_next() { break; }
    page_num += 1;
}

Automatic Pagination with iter()

iter() returns a Stream — it fetches the next page only when the current page is exhausted. Use Box::pin to make it Unpin for .next().await:
use futures::StreamExt;

let mut stream = Box::pin(client.frameworks.iter(20));
while let Some(result) = stream.next().await {
    let fw = result?;
    println!("{}", fw.name);
}
With a custom page size:
let mut stream = Box::pin(client.articles.iter("gdpr", 50));
while let Some(result) = stream.next().await {
    let a = result?;
    println!("{}", a.title);
}

Early Stopping

let mut stream = Box::pin(client.frameworks.iter(20));
while let Some(result) = stream.next().await {
    let fw = result?;
    if fw.slug == "gdpr" {
        println!("Found GDPR");
        break;
    }
}

Progress Tracking

let total = client.frameworks.list(None, None).await?.meta.total;
let mut count = 0u32;

let mut stream = Box::pin(client.frameworks.iter(20));
while let Some(result) = stream.next().await {
    let fw = result?;
    count += 1;
    println!("[{count}/{total}] {}", fw.name);
}