# `Milvex.Config`

Configuration module for Milvus client connections.

Handles parsing and validation of connection parameters from keyword lists,
maps, or URI strings. Supports various authentication methods including
username/password and API tokens.

# `t`

```elixir
@type t() :: %{
  :timeout =&gt; integer(),
  optional(:port) =&gt; integer(),
  optional(:user) =&gt; binary(),
  :ssl =&gt; boolean(),
  :host =&gt; binary(),
  optional(:token) =&gt; binary(),
  optional(:password) =&gt; binary(),
  ssl_options: any(),
  database: binary(),
  reconnect_base_delay: integer(),
  reconnect_max_delay: integer(),
  reconnect_multiplier: float(),
  reconnect_jitter: float(),
  retry_max_attempts: integer(),
  retry_base_delay: integer(),
  retry_max_delay: integer(),
  retry_timeout: integer(),
  adapter: any(),
  adapter_opts: any()
}
```

# `default_ssl_options`

```elixir
@spec default_ssl_options() :: keyword()
```

Returns the default SSL options for secure connections.

# `defaults`

```elixir
@spec defaults() :: t()
```

Returns the default configuration with all default values applied.

# `merge_rpc_opts`

```elixir
@spec merge_rpc_opts(
  t(),
  keyword()
) :: keyword()
```

Merges RPC-relevant defaults from a config map with user-provided opts.

Extracts retry and timeout keys from the connection config and uses them
as defaults. User-provided opts take precedence.

# `parse`

```elixir
@spec parse(keyword() | map()) :: {:ok, t()} | {:error, Milvex.Error.t()}
```

Parse and validate configuration from keyword list or map.

Returns `{:ok, config}` on success or `{:error, error}` on validation failure.

## Examples

    iex> Milvex.Config.parse(host: "localhost", port: 19530)
    {:ok, %{host: "localhost", port: 19530, ...}}

    iex> Milvex.Config.parse(port: -1)
    {:error, %Milvex.Errors.Invalid{...}}

# `parse_uri`

```elixir
@spec parse_uri(String.t()) :: {:ok, t()} | {:error, Milvex.Error.t()}
```

Parse configuration from URI string.

Supports formats:
- `http://localhost:19530`
- `https://user:pass@host:19530/database`
- `milvus://host:19530?timeout=60000`

## Examples

    iex> Milvex.Config.parse_uri("http://localhost:19530")
    {:ok, %{host: "localhost", port: 19530, ssl: false, ...}}

    iex> Milvex.Config.parse_uri("https://user:pass@milvus.example.com:443/mydb")
    {:ok, %{host: "milvus.example.com", port: 443, ssl: true, user: "user", ...}}

# `schema`

Returns the configuration schema.

Configuration options for connecting to a Milvus server

## Options

* `:timeout` (`t:integer/0`) - Required. Timeout for gRPC calls in milliseconds The default value is `30000`.

* `:port` (`t:integer/0`) - Milvus server port (1-65535)

* `:user` (`t:String.t/0`) - Username for authentication

* `:ssl` (`t:boolean/0`) - Required. Enable SSL/TLS encryption The default value is `nil`.

* `:host` (`t:String.t/0`) - Required. Milvus server hostname or IP address The default value is `"localhost"`.

* `:token` (`t:String.t/0`) - API token for authentication (alternative to user/password)

* `:password` (`t:String.t/0`) - Password for authentication

* `:ssl_options` (`t:term/0`) - Required. SSL options passed to the underlying transport The default value is `[]`.

* `:database` (`t:String.t/0`) - Required. Database name to connect to The default value is `"default"`.

* `:reconnect_base_delay` (`t:integer/0`) - Required. Base delay for reconnection attempts in milliseconds The default value is `1000`.

* `:reconnect_max_delay` (`t:integer/0`) - Required. Maximum delay for reconnection attempts in milliseconds The default value is `60000`.

* `:reconnect_multiplier` (`t:float/0`) - Required. Multiplier for exponential backoff The default value is `2.0`.

* `:reconnect_jitter` (`t:float/0`) - Required. Jitter factor (0.0 to 1.0) to randomize delay The default value is `0.1`.

* `:retry_max_attempts` (`t:integer/0`) - Required. Maximum number of retry attempts for transient gRPC errors (0 to disable) The default value is `5`.

* `:retry_base_delay` (`t:integer/0`) - Required. Initial backoff delay in milliseconds for RPC retries The default value is `100`.

* `:retry_max_delay` (`t:integer/0`) - Required. Maximum backoff delay in milliseconds for RPC retries The default value is `3000`.

* `:retry_timeout` (`t:integer/0`) - Required. Total time budget in milliseconds for all retry attempts The default value is `15000`.

* `:adapter` (`t:term/0`) - Required. GRPC client adapter module The default value is `GRPC.Client.Adapters.Gun`.

* `:adapter_opts` (`t:term/0`) - Required. Adapter-specific options passed to GRPC.Stub.connect The default value is `[]`.

## Example

    iex> Zoi.example(Milvex.Config.schema())
    %{timeout: 30000, port: 19530, host: "localhost", database: "default"}

---

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