feat: add isEmpty method to Metadata for improved validation

MyungSub0519 committed Nov 12, 2025 at 23:34 UTC bb7e245501e9ea303e710ebfa0695b4f70acb202
1 file changed +21 -4
sdk/sdk.go
+21 -4
@@ -2,6 +2,7 @@ package sdk
2
3 import (
4 "context"
5 + "encoding/json"
6 "errors"
7 "fmt"
8 "io"
@@ -176,6 +177,14 @@ type Metadata struct {
177 Country string `json:"country"`
178 }
179
180 +func (m Metadata) isEmpty() bool {
181 + return m.Description == "" &&
182 + len(m.Tags) == 0 &&
183 + m.Thumbnail == "" &&
184 + m.Owner == "" &&
185 + m.Country == ""
186 +}
187 +
188 type MetadataOption func(*Metadata)
189
190 func WithDescription(description string) MetadataOption {
@@ -362,11 +371,19 @@ func (g *RDClient) Listen(cred *cryptoops.Credential, name string, alpns []strin
371 return nil, ErrInvalidName
372 }
373
365 - metadataValue := ""
366 -
374 + var metadata Metadata
375 for _, option := range options {
368 - metadata := &Metadata{}
369 - option(metadata)
376 + option(&metadata)
377 + }
378 +
379 + metadataValue := ""
380 + if !metadata.isEmpty() {
381 + metadataJSON, err := json.Marshal(metadata)
382 + if err != nil {
383 + log.Error().Err(err).Msg("[SDK] Failed to marshal metadata")
384 + return nil, ErrInvalidMetadata
385 + }
386 + metadataValue = string(metadataJSON)
387 }
388
389 g.mu.Lock()