5 // BuildDescriptor returns a validated descriptor publication with its delivery
7 func BuildDescriptor(deviceID string, metadata Metadata, payload DescriptorPayload) (Publication, error) {
8 return buildMessage(Address{
14 // ParseDescriptor validates its topic, envelope, payload, and delivery
16 func ParseDescriptor(topic string, data []byte, retained bool) (Message[DescriptorPayload], error) {
17 message, err := parseMessage[DescriptorPayload](Descriptor, topic, data, retained)
19 return Message[DescriptorPayload]{}, fmt.Errorf("parse descriptor: %w", err)
25 // BuildAvailability returns a validated availability publication with its
27 func BuildAvailability(deviceID string, metadata Metadata, payload AvailabilityPayload) (Publication, error) {
28 return buildMessage(Address{
34 // ParseAvailability validates its topic, envelope, payload, and delivery
36 func ParseAvailability(topic string, data []byte, retained bool) (Message[AvailabilityPayload], error) {
37 message, err := parseMessage[AvailabilityPayload](Availability, topic, data, retained)
39 return Message[AvailabilityPayload]{}, fmt.Errorf("parse availability: %w", err)
45 // BuildReported returns a validated reported publication with its delivery
47 func BuildReported(deviceID string, capability string, metadata Metadata, payload ValuePayload) (Publication, error) {
48 return buildMessage(Address{
55 // ParseReported validates its topic, envelope, payload, and delivery retention.
56 func ParseReported(topic string, data []byte, retained bool) (Message[ValuePayload], error) {
57 message, err := parseMessage[ValuePayload](Reported, topic, data, retained)
59 return Message[ValuePayload]{}, fmt.Errorf("parse reported: %w", err)
65 // BuildTelemetry returns a validated telemetry publication with its delivery
67 func BuildTelemetry(deviceID string, capability string, metadata Metadata, payload ValuePayload) (Publication, error) {
68 return buildMessage(Address{
75 // ParseTelemetry validates its topic, envelope, payload, and delivery
77 func ParseTelemetry(topic string, data []byte, retained bool) (Message[ValuePayload], error) {
78 message, err := parseMessage[ValuePayload](Telemetry, topic, data, retained)
80 return Message[ValuePayload]{}, fmt.Errorf("parse telemetry: %w", err)
86 // BuildEvent returns a validated event publication with its delivery rules.
87 func BuildEvent(deviceID string, event string, metadata Metadata, payload EventPayload) (Publication, error) {
88 return buildMessage(Address{
95 // ParseEvent validates its topic, envelope, payload, and delivery retention.
96 func ParseEvent(topic string, data []byte, retained bool) (Message[EventPayload], error) {
97 message, err := parseMessage[EventPayload](Event, topic, data, retained)
99 return Message[EventPayload]{}, fmt.Errorf("parse event: %w", err)
105 // BuildCommand returns a validated command publication with its delivery rules.
106 func BuildCommand(deviceID string, capability string, metadata Metadata, payload ValuePayload) (Publication, error) {
107 return buildMessage(Address{
111 }, metadata, payload)
114 // ParseCommand validates its topic, envelope, payload, and delivery retention.
115 func ParseCommand(topic string, data []byte, retained bool) (Message[ValuePayload], error) {
116 message, err := parseMessage[ValuePayload](Command, topic, data, retained)
118 return Message[ValuePayload]{}, fmt.Errorf("parse command: %w", err)
124 // BuildCommandBatch returns a validated command batch publication with its
126 func BuildCommandBatch(deviceID string, metadata Metadata, payload BatchPayload) (Publication, error) {
127 return buildMessage(Address{
130 }, metadata, payload)
133 // ParseCommandBatch validates its topic, envelope, payload, and delivery
135 func ParseCommandBatch(topic string, data []byte, retained bool) (Message[BatchPayload], error) {
136 message, err := parseMessage[BatchPayload](CommandBatch, topic, data, retained)
138 return Message[BatchPayload]{}, fmt.Errorf("parse command batch: %w", err)
144 // BuildResult returns a validated result publication with its delivery rules.
145 func BuildResult(deviceID string, commandID string, metadata Metadata, payload ResultPayload) (Publication, error) {
146 return buildMessage(Address{
150 }, metadata, payload)
153 // ParseResult validates its topic, envelope, payload, and delivery retention.
154 func ParseResult(topic string, data []byte, retained bool) (Message[ResultPayload], error) {
155 message, err := parseMessage[ResultPayload](Result, topic, data, retained)
157 return Message[ResultPayload]{}, fmt.Errorf("parse result: %w", err)
163 // BuildHubStatus returns a validated hub status publication with its delivery
165 func BuildHubStatus(hubID string, metadata Metadata, payload HubStatusPayload) (Publication, error) {
166 return buildMessage(Address{
169 }, metadata, payload)
172 // ParseHubStatus validates its topic, envelope, payload, and delivery
174 func ParseHubStatus(topic string, data []byte, retained bool) (Message[HubStatusPayload], error) {
175 message, err := parseMessage[HubStatusPayload](HubStatus, topic, data, retained)
177 return Message[HubStatusPayload]{}, fmt.Errorf("parse hub status: %w", err)