# `Kinda.Resource.Declaration`
[🔗](https://github.com/beaver-lodge/kinda/blob/main/lib/kinda/resource/declaration.ex#L1)

Declares the stable lifecycle contract of a native resource.

Declarations are data: generated bindings and test tooling can inspect the
same identity, ownership and upgrade promises without coupling production
code to a test observer.

# `t`

```elixir
@type t() :: %Kinda.Resource.Declaration{
  abi_version: pos_integer(),
  identity: atom() | binary(),
  owner: atom() | binary() | nil,
  upgrade: upgrade()
}
```

# `upgrade`

```elixir
@type upgrade() :: :unsupported | :takeover
```

# `new`

```elixir
@spec new(
  atom() | binary(),
  keyword()
) :: t()
```

# `supports_upgrade?`

```elixir
@spec supports_upgrade?(t()) :: boolean()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
