defmodule ExWal.Models.Segment do
@moduledoc """
A single segment file.
## Description
The `ExWal.Models.Segment` module represents a single segment unit.
It contains information about the path, index, buffer, block count, and blocks within the segment.
## Examples
iex> segment = %ExWal.Models.Segment{path: "segment1.wal", index: 1, buf: "", block_count: 0, blocks: :array.new()}
%ExWal.Models.Segment{path: "segment1.wal", index: 1, buf: "", block_count: 0, blocks: :array.new()}
## Struct Fields
- `path` - The path of the segment file.
- `index` - The index of the segment.
- `buf` - The binary buffer of the segment.
- `block_count` - The count of blocks within the segment.
- `blocks` - The array of blocks within the segment.
"""
defstruct path: "", index: 1, buf: "", block_count: 0, blocks: :array.new()
@type t :: %__MODULE__{
path: String.t(),
# first index of the segment
index: non_neg_integer(),
buf: binary(),
block_count: non_neg_integer(),
blocks: :array.array(ExWal.Models.Block.t()) | nil
}
end
defmodule ExWal.Models.Block do
@moduledoc """
A single block in a segment file.
## Description
The `ExWal.Models.Block` module represents a single block in a segment file.
It contains information about the offset and size of the block.
## Examples
iex> block = %ExWal.Models.Block{offset: 0, size: 1024}
%ExWal.Models.Block{offset: 0, size: 1024}
## Struct Fields
- `offset` - The offset of the block within the segment file.
- `size` - The size of the block in bytes.
"""
defstruct offset: 0, size: 0
@type t :: %__MODULE__{
offset: non_neg_integer(),
size: non_neg_integer()
}
end