|
- package nmos
-
- import (
- "context"
- "encoding/json"
- "fmt"
- "net/http"
- "strings"
- "time"
- )
-
- type QueryClient struct {
- BaseURL string
- HTTPClient *http.Client
- }
-
- func NewQueryClient(baseURL string) *QueryClient {
- return &QueryClient{
- BaseURL: strings.TrimRight(baseURL, "/"),
- HTTPClient: &http.Client{
- Timeout: 10 * time.Second,
- },
- }
- }
-
- func (c *QueryClient) GetSenders(ctx context.Context) ([]Sender, error) {
- var out []Sender
- if err := c.getJSON(ctx, "/x-nmos/query/v1.3/senders", &out); err != nil {
- return nil, err
- }
- return out, nil
- }
-
- func (c *QueryClient) GetReceivers(ctx context.Context) ([]Receiver, error) {
- var out []Receiver
- if err := c.getJSON(ctx, "/x-nmos/query/v1.3/receivers", &out); err != nil {
- return nil, err
- }
- return out, nil
- }
-
- func (c *QueryClient) getJSON(ctx context.Context, path string, target any) error {
- req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.BaseURL+path, nil)
- if err != nil {
- return err
- }
- resp, err := c.HTTPClient.Do(req)
- if err != nil {
- return err
- }
- defer resp.Body.Close()
- if resp.StatusCode < 200 || resp.StatusCode >= 300 {
- return fmt.Errorf("NMOS query %s returned %s", path, resp.Status)
- }
- return json.NewDecoder(resp.Body).Decode(target)
- }
|