defmodule Towerops.Snmp.SnmpBehaviour do
  @moduledoc """
  Behaviour for SNMP operations.
  Allows mocking SnmpKit in tests using Mox.
  """

  @type target :: String.t()
  @type oid :: String.t() | [non_neg_integer()]
  @type snmp_opts :: keyword()
  @type snmp_value :: term()

  @callback get(target(), oid(), snmp_opts()) :: {:ok, snmp_value()} | {:error, term()}
  @callback get_next(target(), oid(), snmp_opts()) :: {:ok, map()} | {:error, term()}
  @callback walk(target(), oid(), snmp_opts()) :: {:ok, [map()]} | {:error, term()}
  @callback get_bulk(target(), oid(), snmp_opts()) :: {:ok, [map()]} | {:error, term()}
end
