Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"sync"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
//go:embed openapi/spec.yaml
|
||||
var openAPISpecYAML []byte
|
||||
|
||||
//go:embed openapi/docs.html
|
||||
var openAPIDocsHTML []byte
|
||||
|
||||
var (
|
||||
openAPIJSONOnce sync.Once
|
||||
openAPIJSON []byte
|
||||
openAPIJSONErr error
|
||||
)
|
||||
|
||||
func loadOpenAPIJSON() {
|
||||
var doc any
|
||||
if err := yaml.Unmarshal(openAPISpecYAML, &doc); err != nil {
|
||||
openAPIJSONErr = err
|
||||
return
|
||||
}
|
||||
openAPIJSON, openAPIJSONErr = json.Marshal(doc)
|
||||
}
|
||||
|
||||
func (s *Server) serveOpenAPIJSON(c *gin.Context) {
|
||||
openAPIJSONOnce.Do(loadOpenAPIJSON)
|
||||
if openAPIJSONErr != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": openAPIJSONErr.Error()})
|
||||
return
|
||||
}
|
||||
c.Header("Cache-Control", "public, max-age=300")
|
||||
c.Data(http.StatusOK, "application/json; charset=utf-8", openAPIJSON)
|
||||
}
|
||||
|
||||
func (s *Server) serveOpenAPIYAML(c *gin.Context) {
|
||||
c.Header("Cache-Control", "public, max-age=300")
|
||||
c.Data(http.StatusOK, "application/yaml; charset=utf-8", openAPISpecYAML)
|
||||
}
|
||||
|
||||
func (s *Server) serveOpenAPIDocs(c *gin.Context) {
|
||||
c.Data(http.StatusOK, "text/html; charset=utf-8", openAPIDocsHTML)
|
||||
}
|
||||
Reference in New Issue
Block a user