Files
podcast-api/subsonic/http.go
2026-03-05 13:22:00 +03:00

45 lines
948 B
Go

package subsonic
import (
"encoding/json"
"encoding/xml"
"fmt"
"net/http"
)
func sendJSON(w http.ResponseWriter, data any, status int) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
return json.NewEncoder(w).Encode(data)
}
func sendXML(w http.ResponseWriter, data any, status int) error {
w.Header().Set("Content-Type", "application/xml")
w.WriteHeader(status)
return xml.NewEncoder(w).Encode(data)
}
func SendHTTPResponse(w http.ResponseWriter, r *http.Request, data any, status int) error {
format := r.URL.Query().Get("f")
if format == "" {
format = "json"
}
resp := struct {
SubsonicResponse any `xml:"subsonic-response" json:"subsonic-response"`
}{
SubsonicResponse: data,
}
switch format {
case "xml":
return sendXML(w, data, status)
case "json":
return sendJSON(w, resp, status)
case "jsonp":
return sendJSON(w, resp, status)
}
return fmt.Errorf("invalid format")
}