# kendra-pdx/artnet-client architecture

> Architecture diagram of the GitHub repository kendra-pdx/artnet-client, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kendra-pdx/artnet-client
- Repository: https://github.com/kendra-pdx/artnet-client
- Video tour (about a minute): https://gitdiagram.com/kendra-pdx/artnet-client/video

## Overview

artnet-client is a no_std-capable Art-Net transport library. An application feeds DMX events to the producer, which discovers Art-Net nodes through Poll/PollReply and sends addressed DMX; independently, the receiver accepts DMX and publishes events, and answers Poll requests. UDP and IEEE 802.15.4 are feature-gated I/O backends. The README is empty, so capabilities and wiring here are based on the sampled Rust sources and Cargo feature declarations.

Main entry points: [`src/producer.rs`](https://github.com/kendra-pdx/artnet-client/blob/main/src/producer.rs) (Art-Net Producer), [`src/receiver.rs`](https://github.com/kendra-pdx/artnet-client/blob/main/src/receiver.rs) (Art-Net Receiver), [`src/lib.rs`](https://github.com/kendra-pdx/artnet-client/blob/main/src/lib.rs) (Event Channel), [`src/io.rs`](https://github.com/kendra-pdx/artnet-client/blob/main/src/io.rs) (Async I/O Trait)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app_flow["Application Flow"]
  node_events["Event Channel<br/>[lib.rs]"]
end

subgraph group_artnet_runtime["Art-Net Runtime"]
  node_receiver["Art-Net Receiver<br/>[receiver.rs]"]
  node_producer["Art-Net Producer<br/>[producer.rs]"]
  node_codec["Art-Net Codec"]
end

subgraph group_transport["I/O Transports"]
  node_async_io["Async I/O Trait<br/>[io.rs]"]
  node_udp["UDP Backend<br/>[edge_udp.rs]"]
  node_wpan["IEEE 802.15.4 Backend<br/>[esp_ieee802154.rs]"]
end

subgraph group_domain["Address Model"]
  node_addresses["Address Types<br/>[address.rs]"]
end

node_application(("Application"))
node_network(("UDP Network"))
node_radio(("IEEE 802.15.4 Radio"))

node_application -->|"publishes DMX"| node_events
node_events -->|"delivers events"| node_producer
node_receiver -->|"publishes DMX"| node_events
node_receiver -->|"receives packets"| node_async_io
node_receiver -->|"parses commands"| node_codec
node_receiver -->|"serializes replies"| node_codec
node_receiver -->|"sends replies"| node_async_io
node_receiver -->|"converts addresses"| node_addresses
node_producer -->|"receives packets"| node_async_io
node_producer -->|"parses replies"| node_codec
node_producer -->|"consumes events"| node_events
node_producer -->|"uses addresses"| node_addresses
node_producer -->|"serializes DMX or poll"| node_codec
node_producer -->|"sends packets"| node_async_io
node_udp -.->|"exchanges UDP"| node_network
node_wpan -.->|"exchanges frames"| node_radio

click node_events "https://github.com/kendra-pdx/artnet-client/blob/main/src/lib.rs"
click node_receiver "https://github.com/kendra-pdx/artnet-client/blob/main/src/receiver.rs"
click node_producer "https://github.com/kendra-pdx/artnet-client/blob/main/src/producer.rs"
click node_addresses "https://github.com/kendra-pdx/artnet-client/blob/main/src/address.rs"
click node_async_io "https://github.com/kendra-pdx/artnet-client/blob/main/src/io.rs"
click node_udp "https://github.com/kendra-pdx/artnet-client/blob/main/src/io/edge_udp.rs"
click node_wpan "https://github.com/kendra-pdx/artnet-client/blob/main/src/io/esp_ieee802154.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_events toneBlue
class node_receiver,node_producer,node_codec toneAmber
class node_async_io,node_udp,node_wpan toneMint
class node_addresses toneRose
class node_application,node_network,node_radio toneIndigo
```

## Components

### Application Flow

- [Event Channel](https://github.com/kendra-pdx/artnet-client/blob/main/src/lib.rs): `src/lib.rs`

### Art-Net Runtime

- [Art-Net Receiver](https://github.com/kendra-pdx/artnet-client/blob/main/src/receiver.rs): `src/receiver.rs`
- [Art-Net Producer](https://github.com/kendra-pdx/artnet-client/blob/main/src/producer.rs): `src/producer.rs`
- **Art-Net Codec**

### I/O Transports

- [Async I/O Trait](https://github.com/kendra-pdx/artnet-client/blob/main/src/io.rs): `src/io.rs`
- [UDP Backend](https://github.com/kendra-pdx/artnet-client/blob/main/src/io/edge_udp.rs): `src/io/edge_udp.rs`
- [IEEE 802.15.4 Backend](https://github.com/kendra-pdx/artnet-client/blob/main/src/io/esp_ieee802154.rs): `src/io/esp_ieee802154.rs`

### Address Model

- [Address Types](https://github.com/kendra-pdx/artnet-client/blob/main/src/address.rs): `src/address.rs`

### Other components

- **Application**
- **UDP Network**
- **IEEE 802.15.4 Radio**

## Connections

- Application → Event Channel: publishes DMX
- Event Channel → Art-Net Producer: delivers events
- Art-Net Receiver → Event Channel: publishes DMX
- Art-Net Receiver → Async I/O Trait: receives packets
- Art-Net Receiver → Art-Net Codec: parses commands
- Art-Net Receiver → Art-Net Codec: serializes replies
- Art-Net Receiver → Async I/O Trait: sends replies
- Art-Net Receiver → Address Types: converts addresses
- Art-Net Producer → Async I/O Trait: receives packets
- Art-Net Producer → Art-Net Codec: parses replies
- Art-Net Producer → Event Channel: consumes events
- Art-Net Producer → Address Types: uses addresses
- Art-Net Producer → Art-Net Codec: serializes DMX or poll
- Art-Net Producer → Async I/O Trait: sends packets
- UDP Backend → UDP Network: exchanges UDP
- IEEE 802.15.4 Backend → IEEE 802.15.4 Radio: exchanges frames
