import asyncio
from dataclasses import dataclass, field
from typing import AsyncIterator
@dataclass
class Record:
id: str
payload: dict
tags: list[str] = field(default_factory=list)
async def fetch_records(source: str) -> AsyncIterator[Record]:
"""Yield records from source -- replace with real I/O."""
for i in range(5):
await asyncio.sleep(0.1)
yield Record(id=f"{source}-{i}", payload={"index": i})
async def process(records: AsyncIterator[Record]) -> list[Record]:
out = []
async for r in records:
r.tags.append("processed")
out.append(r)
return out
async def main():
records = fetch_records("demo")
result = await process(records)
print(f"Processed {len(result)} records")
asyncio.run(main())