lib/hikvision.ex

defmodule Hikvision do
  @moduledoc File.read!("README.md")

  use Application

  alias Hikvision.Config

  @type error :: {:error, :unauthorized} | {:error, :server_error} | {:error, map()}
  @type success :: {:ok, map()}

  @doc """
  Send a request to the Hikvision device
  """
  @spec request(term(), Keyword.t()) :: success() | error()
  def request(operation, config \\ []),
    do: Hikvision.Operation.perform(operation, Config.new(config))

  @impl Application
  def start(_type, _args) do
    children = [
      {Hikvision.Auth, []}
    ]

    Supervisor.start_link(children, strategy: :one_for_one, name: Hikvision.Supervisor)
  end
end