# Package

<a id="package"></a>

# Package

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

struct Package
```

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

> **Inherits:** `Value`
> **Subclassed by:** [`LocalPackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage), [`RemotePackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-RemotePackage.md#remotepackage)

JSON-backed package metadata shared by local and remote package records.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Package`](#package-1)  | Constructs an empty package. |
|  | [`Package`](#package-2)  | Constructs a package from an existing JSON value. |
|  | [`~Package`](#package-3) `virtual` `noexcept` |  |
| `std::string` | [`id`](#id-7) `virtual` `const` | Returns the package unique identifier. |
| `std::string` | [`name`](#name-10) `virtual` `const` | Returns the package display name. |
| `std::string` | [`type`](#type-14) `virtual` `const` | Returns the package type (e.g. "plugin", "asset"). |
| `std::string` | [`author`](#author) `virtual` `const` | Returns the package author string. |
| `std::string` | [`description`](#description-1) `virtual` `const` | Returns the package description string. |
| `bool` | [`hasExtension`](#hasextension) `virtual` `const` | Returns true when the package has an "extension" object. |
| [`Extension`](https://auscaster.com/icey/docs/api-reference/icy-pacm-Package-Extension.md#extension-1) | [`extension`](#extension) `virtual` `const` | Returns a read-only view of the extension metadata. Throws if no extension object is present. |
| `bool` | [`valid`](#valid-4) `virtual` `const` | Returns true if id, name and type are all non-empty. |
| [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) | [`toJson`](#tojson) `virtual` `const` | Returns a plain JSON copy of this package object. |
| `void` | [`print`](#print-11) `virtual` `const` | Dumps the JSON representation of this package to `ost`. |

---

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

### Package

```cpp
Package()
```

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

Constructs an empty package.

---

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

### Package

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

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

Constructs a package from an existing JSON value.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `src` | const [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) & | JSON object containing package fields. |

---

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

### ~Package

`virtual` `noexcept`

```cpp
virtual ~Package() noexcept
```

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

---

<a id="id-7"></a>

### id

`virtual` `const`

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

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

Returns the package unique identifier.

---

<a id="name-10"></a>

### name

`virtual` `const`

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

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

Returns the package display name.

---

<a id="type-14"></a>

### type

`virtual` `const`

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

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

Returns the package type (e.g. "plugin", "asset").

---

<a id="author"></a>

### author

`virtual` `const`

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

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

Returns the package author string.

---

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

### description

`virtual` `const`

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

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

Returns the package description string.

---

<a id="hasextension"></a>

### hasExtension

`virtual` `const`

```cpp
virtual bool hasExtension() const
```

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

Returns true when the package has an "extension" object.

---

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

### extension

`virtual` `const`

```cpp
virtual Extension extension() const
```

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

Returns a read-only view of the extension metadata. Throws if no extension object is present.

---

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

### valid

`virtual` `const`

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

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

Returns true if id, name and type are all non-empty.

#### Reimplemented by

- [`LocalPackage::valid`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#valid-3)

---

<a id="tojson"></a>

### toJson

`virtual` `const`

```cpp
virtual json::Value toJson() const
```

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

Returns a plain JSON copy of this package object.

---

<a id="print-11"></a>

### print

`virtual` `const`

```cpp
virtual void print(std::ostream & ost) const
```

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

Dumps the JSON representation of this package to `ost`.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ost` | `std::ostream &` | Output stream. |
