defmodule Rediscovery do @external_resource "README.md" @moduledoc "README.md" |> File.read!() |> String.split("") |> Enum.fetch!(1) alias Rediscovery.State @options_schema [ host: [ type: :string, required: true ], port: [ type: :non_neg_integer, required: true ], prefix: [ type: :string, required: true ], poll_interval: [ type: :non_neg_integer, default: 10_000 ], pub_sub: [ type: :boolean, default: false ], update_interval: [ type: :non_neg_integer, default: 10_000 ], key_expiration: [ type: :non_neg_integer, default: 15_000 ], metadata_fn: [ type: {:fun, 0}, default: &__MODULE__.default_metadata_fn/0 ] ] def default_metadata_fn do %{} end def child_spec(opts) do opts = NimbleOptions.validate!(opts, @options_schema) Rediscovery.Supervisor.child_spec(opts) end def start_link(opts) do opts = NimbleOptions.validate!(opts, @options_schema) Rediscovery.Supervisor.start_link(opts) end defdelegate state(), to: State defdelegate state(server), to: State end