Streams
Stream read/write operations for handling data efficiently. Stream objects are obtained from other modules (HTTP, filesystem, etc.).
Loading
-- From HTTP request body
local stream = req:stream()
-- From filesystem
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")
Reading
local chunk, err = stream:read(size)
| Parameter | Type | Description |
|---|---|---|
size |
integer | Bytes to read (0 = read all available) |
Returns: string, error — nil on EOF
-- Read all remaining data
local data, err = stream:read_all()
Writing
local bytes, err = stream:write(data)
| Parameter | Type | Description |
|---|---|---|
data |
string | Data to write |
Returns: integer, error — bytes written
Seeking
local pos, err = stream:seek(whence, offset)
| Parameter | Type | Description |
|---|---|---|
whence |
string | "set", "cur", or "end" |
offset |
integer | Offset in bytes |
Returns: integer, error — new position
Flushing
local ok, err = stream:flush()
Flush buffered data to underlying storage.
Stream Info
local info, err = stream:stat()
| Field | Type | Description |
|---|---|---|
size |
integer | Total size (-1 if unknown) |
position |
integer | Current position |
readable |
boolean | Can read |
writable |
boolean | Can write |
seekable |
boolean | Can seek |
Closing
local ok, err = stream:close()
Close stream and release resources. Safe to call multiple times.
Scanner
Create a tokenizer for stream content:
local scanner, err = stream:scanner(split)
| Parameter | Type | Description |
|---|---|---|
split |
string | "lines", "words", "bytes", "runes" |
Scanner Methods
local has_more = scanner:scan() -- Advance to next token
local token = scanner:text() -- Get current token
local err_msg = scanner:err() -- Get error if any
while scanner:scan() do
local line = scanner:text()
process(line)
end
if scanner:err() then
return nil, errors.new("INTERNAL", scanner:err())
end
Errors
| Condition | Kind |
|---|---|
| Invalid whence/split type | INVALID |
| Stream closed | INTERNAL |
| Not readable/writable | INTERNAL |
| Read/write failure | INTERNAL |