# `MingaAgent.Changeset.SourceRead`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_agent/changeset/source_read.ex#L1)

Bounded selection of a changeset-owned source with its atomic revision.

# `lines_result`

```elixir
@type lines_result() ::
  {:ok,
   {:memory, binary(), non_neg_integer(), non_neg_integer() | :unknown,
    boolean()}
   | {:disk, String.t()}, non_neg_integer()}
  | {:error, term()}
```

# `prefix_result`

```elixir
@type prefix_result() ::
  {:ok, {:memory, binary(), boolean()} | {:disk, String.t()}, non_neg_integer()}
  | {:error, term()}
```

# `source`

```elixir
@type source() :: {:ok, {:memory, binary()} | {:disk, String.t()}} | {:error, term()}
```

# `lines`

```elixir
@spec lines(
  source(),
  non_neg_integer(),
  non_neg_integer(),
  pos_integer(),
  pos_integer()
) ::
  lines_result()
```

Selects requested lines without materializing or indexing the full resident source.

# `prefix`

```elixir
@spec prefix(source(), non_neg_integer(), pos_integer()) :: prefix_result()
```

Copies only a bounded prefix out of the selected resident source.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
