60 lines
1.5 KiB
Elixir
60 lines
1.5 KiB
Elixir
defmodule LastFm.Config do
|
|
@type t :: %__MODULE__{
|
|
api_key: String.t(),
|
|
user: String.t(),
|
|
auto_refresh: boolean(),
|
|
refresh_interval: pos_integer(),
|
|
user_agent: String.t(),
|
|
req_options: Keyword.t()
|
|
}
|
|
|
|
@enforce_keys [:api_key, :user]
|
|
defstruct api_key: "",
|
|
user: "",
|
|
auto_refresh: true,
|
|
refresh_interval: 60_000,
|
|
user_agent: "change me",
|
|
req_options: []
|
|
|
|
@schema NimbleOptions.new!(
|
|
api_key: [
|
|
type: :string,
|
|
required: true
|
|
],
|
|
user: [
|
|
type: :string,
|
|
required: true
|
|
],
|
|
auto_refresh: [
|
|
type: :boolean,
|
|
required: false,
|
|
default: true
|
|
],
|
|
refresh_interval: [
|
|
type: :pos_integer,
|
|
required: false,
|
|
default: 60_000
|
|
],
|
|
user_agent: [
|
|
type: :string,
|
|
required: false,
|
|
default: "change me"
|
|
],
|
|
req_options: [
|
|
type: :keyword_list,
|
|
required: false,
|
|
default: []
|
|
]
|
|
)
|
|
|
|
@doc NimbleOptions.docs(@schema)
|
|
@spec resolve(atom) :: t | no_return
|
|
def resolve(otp_app) do
|
|
app_config =
|
|
Application.get_env(otp_app, LastFm)
|
|
|> NimbleOptions.validate!(@schema)
|
|
|
|
struct(__MODULE__, app_config)
|
|
end
|
|
end
|