1defmodule Drinkup.Options do
2 use TypedStruct
3
4 @default_host "https://bsky.network"
5
6 @type options() :: %{
7 required(:consumer) => module(),
8 optional(:name) => atom(),
9 optional(:host) => String.t(),
10 optional(:cursor) => pos_integer()
11 }
12
13 typedstruct do
14 field :consumer, module(), enforce: true
15 field :name, atom(), default: Drinkup
16 field :host, String.t(), default: @default_host
17 field :cursor, pos_integer() | nil
18 end
19
20 @spec from(options()) :: t()
21 def from(%{consumer: _} = options), do: struct(__MODULE__, options)
22end