# FormPart

<a id="formpart"></a>

# FormPart

```cpp
#include <icy/http/form.h>

class FormPart
```

[Defined in src/http/include/icy/http/form.h:183](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L183)

> **Subclassed by:** [`FilePart`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#filepart), [`StringPart`](https://auscaster.com/icey/docs/api-reference/icy-http-StringPart.md#stringpart-1)

An implementation of [FormPart](#formpart).

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`FormPart`](#formpart-1)  | Creates the [FormPart](#formpart) with the given MIME content type. |
|  | [`~FormPart`](#formpart-2) `virtual` | Destroys the [FormPart](#formpart). |
| `void` | [`reset`](#reset-18) `virtual` | Resets the internal state and write position to the beginning. Called by [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) when retrying or recalculating content length. |
| `bool` | [`writeChunk`](#writechunk-1) `virtual` | Writes the next chunk of data to the [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter). |
| `void` | [`write`](#write-22) `virtual` | Writes the entire part data to the [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) in one call. |
| `void` | [`write`](#write-23) `virtual` | Writes the entire part data to an output stream (used for content-length calculation). |
| [`NVCollection`](https://auscaster.com/icey/docs/api-reference/icy-NVCollection.md#nvcollection) & | [`headers`](#headers-1)  | Returns the extra MIME headers for this part (e.g. Content-Disposition). |
| `bool` | [`initialWrite`](#initialwrite) `virtual` `const` | Returns true if this is the first write call since construction or [reset()](#reset-18). |
| `const std::string &` | [`contentType`](#contenttype-1) `const` | Returns the MIME content type for this part. |
| `uint64_t` | [`length`](#length-2) `virtual` `const` | Returns the total byte length of the part data. |

---

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

### FormPart

```cpp
FormPart(const std::string & contentType = "application/octet-stream")
```

[Defined in src/http/include/icy/http/form.h:188](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L188)

Creates the [FormPart](#formpart) with the given MIME content type.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `contentType` | `const std::string &` | MIME type for this part (default: "application/octet-stream"). |

---

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

### ~FormPart

`virtual`

```cpp
virtual ~FormPart()
```

[Defined in src/http/include/icy/http/form.h:191](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L191)

Destroys the [FormPart](#formpart).

---

<a id="reset-18"></a>

### reset

`virtual`

```cpp
virtual void reset()
```

[Defined in src/http/include/icy/http/form.h:195](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L195)

Resets the internal state and write position to the beginning. Called by [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) when retrying or recalculating content length.

#### Reimplemented by

- [`FilePart::reset`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#reset-17)

---

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

### writeChunk

`virtual`

```cpp
virtual bool writeChunk(FormWriter & writer)
```

[Defined in src/http/include/icy/http/form.h:200](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L200)

Writes the next chunk of data to the [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter). 
#### Returns
true if more data remains to be written; false when complete.

#### Reimplemented by

- [`FilePart::writeChunk`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#writechunk)
- [`StringPart::writeChunk`](https://auscaster.com/icey/docs/api-reference/icy-http-StringPart.md#writechunk-2)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `writer` | [`FormWriter`](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) & | The [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) to send the chunk through. |

---

<a id="write-22"></a>

### write

`virtual`

```cpp
virtual void write(FormWriter & writer)
```

[Defined in src/http/include/icy/http/form.h:204](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L204)

Writes the entire part data to the [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) in one call.

#### Reimplemented by

- [`FilePart::write`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#write-20)
- [`StringPart::write`](https://auscaster.com/icey/docs/api-reference/icy-http-StringPart.md#write-33)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `writer` | [`FormWriter`](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) & | The [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) to send data through. |

---

<a id="write-23"></a>

### write

`virtual`

```cpp
virtual void write(std::ostream & ostr)
```

[Defined in src/http/include/icy/http/form.h:208](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L208)

Writes the entire part data to an output stream (used for content-length calculation).

#### Reimplemented by

- [`FilePart::write`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#write-21)
- [`StringPart::write`](https://auscaster.com/icey/docs/api-reference/icy-http-StringPart.md#write-34)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ostr` | `std::ostream &` | Output stream to write to. |

---

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

### headers

```cpp
NVCollection & headers()
```

[Defined in src/http/include/icy/http/form.h:211](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L211)

Returns the extra MIME headers for this part (e.g. Content-Disposition).

---

<a id="initialwrite"></a>

### initialWrite

`virtual` `const`

```cpp
virtual bool initialWrite() const
```

[Defined in src/http/include/icy/http/form.h:214](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L214)

Returns true if this is the first write call since construction or [reset()](#reset-18).

---

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

### contentType

`const`

```cpp
const std::string & contentType() const
```

[Defined in src/http/include/icy/http/form.h:217](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L217)

Returns the MIME content type for this part.

---

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

### length

`virtual` `const`

```cpp
virtual uint64_t length() const
```

[Defined in src/http/include/icy/http/form.h:220](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L220)

Returns the total byte length of the part data.

#### Reimplemented by

- [`FilePart::length`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#length-1)
- [`StringPart::length`](https://auscaster.com/icey/docs/api-reference/icy-http-StringPart.md#length-3)

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::string` | [`_contentType`](#_contenttype)  |  |
| `uint64_t` | [`_length`](#_length)  |  |
| [`NVCollection`](https://auscaster.com/icey/docs/api-reference/icy-NVCollection.md#nvcollection) | [`_headers`](#_headers)  |  |
| `bool` | [`_initialWrite`](#_initialwrite)  |  |

---

<a id="_contenttype"></a>

### _contentType

```cpp
std::string _contentType
```

[Defined in src/http/include/icy/http/form.h:223](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L223)

---

<a id="_length"></a>

### _length

```cpp
uint64_t _length
```

[Defined in src/http/include/icy/http/form.h:224](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L224)

---

<a id="_headers"></a>

### _headers

```cpp
NVCollection _headers
```

Type: [`NVCollection`](https://auscaster.com/icey/docs/api-reference/icy-NVCollection.md#nvcollection)

[Defined in src/http/include/icy/http/form.h:225](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L225)

---

<a id="_initialwrite"></a>

### _initialWrite

```cpp
bool _initialWrite
```

[Defined in src/http/include/icy/http/form.h:226](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/form.h#L226)
