# Serialization ## Paths Paths are made of segments of **28 bytes** each. The layout (assuming positions in a `Uint8Array`) is the following: | Offset | Length (bytes) | Data Type | Field | | ------ | -------------- | --------- | ------- | | 0 | 2 | `u16` | Command | | 2 | 2 | `u16` | Flags | | 4 | 4 | `f32` | `c1_x` | | 8 | 4 | `f32` | `c1_y` | | 12 | 4 | `f32` | `c2_x` | | 16 | 4 | `f32` | `c2_y` | | 20 | 4 | `f32` | `x` | | 24 | 4 | `f32` | `y` | **Command** can be one of these values: - `:move-to`: `1` - `:line-to`: `2` - `:curve-to`: `3` - `:close-path`: `4` **Flags** is not being used at the moment. ## Gradient stops Gradient stops are serialized in a `Uint8Array`, each stop taking **5 bytes**. | Offset | Length (bytes) | Data Type | Field | | ------ | -------------- | --------- | ----------- | | 0 | 1 | `u8` | Red | | 1 | 1 | `u8` | Green | | 2 | 1 | `u8` | Blue | | 3 | 1 | `u8` | Alpha | | 4 | 1 | `u8` | Stop Offset | **Red**, **Green**, **Blue** and **Alpha** are the RGBA components of the stop. **Stop offset** is the offset, being integer values ranging from `0` to `100` (both inclusive). ## StrokeCap Stroke caps are serialized as `u8`: | Value | Field | | ----- | --------- | | 1 | Line | | 2 | Triangle | | 3 | Rectangle | | 4 | Circle | | 5 | Diamond | | 6 | Round | | 7 | Square | | _ | None | ## StrokeStyle Stroke styles are serialized as `u8`: | Value | Field | | ----- | ------ | | 1 | Dotted | | 2 | Dashed | | 3 | Mixed | | _ | Solid |