Provider behaviour for HostKit integrations.
Providers own resource types, schemas, planning, applying, and optional DSL modules. This follows Terraform's provider/resource split while staying Elixir-native.
Summary
Callbacks
@callback apply(change :: HostKit.Change.t(), context :: map()) :: :ok | :ignore | {:error, term()}
@callback dsl_modules() :: [module()]
@callback plan(resource :: struct(), actual :: struct() | nil, context :: map()) :: {:ok, [HostKit.Change.t()]} | :ignore | {:error, term()}
@callback provider_name() :: atom()
@callback resource_types() :: [atom()]