# Package::Extension

<a id="extension-1"></a>

# Extension

```cpp
#include <icy/pacm/package.h>

struct Extension
```

[Defined in src/pacm/include/icy/pacm/package.h:29](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L29)

Optional extension metadata that describes how a packaged runtime unit is loaded.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| const [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) & | [`root`](#root-3)  |  |

---

<a id="root-3"></a>

### root

```cpp
const json::Value & root
```

Type: const [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) &

[Defined in src/pacm/include/icy/pacm/package.h:56](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L56)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Extension`](#extension-2)  |  |
|  | [`~Extension`](#extension-3) `virtual` `noexcept` |  |
| `std::string` | [`loader`](#loader) `virtual` `const` | Returns the loader/runtime contract name (for example "graft"). |
| `std::string` | [`runtime`](#runtime) `virtual` `const` | Returns the runtime kind (for example "native" or "worker"). |
| `std::string` | [`entryPoint`](#entrypoint) `virtual` `const` | Returns the install-relative entrypoint path. |
| `int` | [`abiVersion`](#abiversion) `virtual` `const` | Returns the extension ABI version, or 0 if not specified. |
| `std::vector< std::string >` | [`capabilities`](#capabilities) `virtual` `const` | Returns the declared capabilities. |
| `bool` | [`valid`](#valid-6) `virtual` `const` | Returns true when the metadata is internally consistent. |
| `bool` | [`hasCapability`](#hascapability) `virtual` `const` | Returns true when `capability` is declared. |

---

<a id="extension-2"></a>

### Extension

```cpp
Extension(const json::Value & src)
```

[Defined in src/pacm/include/icy/pacm/package.h:32](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L32)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `src` | const [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) & | JSON object node that backs this extension metadata. |

---

<a id="extension-3"></a>

### ~Extension

`virtual` `noexcept`

```cpp
virtual ~Extension() noexcept
```

[Defined in src/pacm/include/icy/pacm/package.h:33](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L33)

---

<a id="loader"></a>

### loader

`virtual` `const`

```cpp
virtual std::string loader() const
```

[Defined in src/pacm/include/icy/pacm/package.h:36](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L36)

Returns the loader/runtime contract name (for example "graft").

---

<a id="runtime"></a>

### runtime

`virtual` `const`

```cpp
virtual std::string runtime() const
```

[Defined in src/pacm/include/icy/pacm/package.h:39](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L39)

Returns the runtime kind (for example "native" or "worker").

---

<a id="entrypoint"></a>

### entryPoint

`virtual` `const`

```cpp
virtual std::string entryPoint() const
```

[Defined in src/pacm/include/icy/pacm/package.h:42](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L42)

Returns the install-relative entrypoint path.

---

<a id="abiversion"></a>

### abiVersion

`virtual` `const`

```cpp
virtual int abiVersion() const
```

[Defined in src/pacm/include/icy/pacm/package.h:45](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L45)

Returns the extension ABI version, or 0 if not specified.

---

<a id="capabilities"></a>

### capabilities

`virtual` `const`

```cpp
virtual std::vector< std::string > capabilities() const
```

[Defined in src/pacm/include/icy/pacm/package.h:48](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L48)

Returns the declared capabilities.

---

<a id="valid-6"></a>

### valid

`virtual` `const`

```cpp
virtual bool valid() const
```

[Defined in src/pacm/include/icy/pacm/package.h:51](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L51)

Returns true when the metadata is internally consistent.

---

<a id="hascapability"></a>

### hasCapability

`virtual` `const`

```cpp
virtual bool hasCapability(std::string_view capability) const
```

[Defined in src/pacm/include/icy/pacm/package.h:54](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L54)

Returns true when `capability` is declared.
