MCPcopy Create free account
hub / github.com/Monibuca/engine / ReturnFetchValue

Function ReturnFetchValue

util/socket.go:140–190  ·  view source on GitHub ↗
(fetch func() T, rw http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

138 }
139}
140func ReturnFetchValue[T any](fetch func() T, rw http.ResponseWriter, r *http.Request) {
141 query := r.URL.Query()
142 isYaml := query.Get("format") == "yaml"
143 isJson := query.Get("format") == "json"
144 tickDur, err := time.ParseDuration(query.Get("interval"))
145 if err != nil {
146 tickDur = time.Second
147 }
148 if r.Header.Get("Accept") == "text/event-stream" {
149 sse := NewSSE(rw, r.Context())
150 tick := time.NewTicker(tickDur)
151 defer tick.Stop()
152 writer := Conditoinal(isYaml, sse.WriteYAML, sse.WriteJSON)
153 writer(fetch())
154 for range tick.C {
155 if writer(fetch()) != nil {
156 return
157 }
158 }
159 } else {
160 data := fetch()
161 rw.Header().Set("Content-Type", Conditoinal(isYaml, "text/yaml", "application/json"))
162 if isYaml {
163 if err := yaml.NewEncoder(rw).Encode(data); err != nil {
164 http.Error(rw, err.Error(), http.StatusInternalServerError)
165 }
166 } else if isJson {
167 if err := json.NewEncoder(rw).Encode(APIResult{
168 Code: 0,
169 Data: data,
170 Message: "ok",
171 }); err != nil {
172 json.NewEncoder(rw).Encode(APIError{
173 Code: APIErrorJSONEncode,
174 Message: err.Error(),
175 })
176 }
177 } else {
178 t := reflect.TypeOf(data)
179 switch t.Kind() {
180 case reflect.String, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64:
181 rw.Header().Set("Content-Type", "text/plain")
182 fmt.Fprint(rw, data)
183 default:
184 if err := json.NewEncoder(rw).Encode(data); err != nil {
185 http.Error(rw, err.Error(), http.StatusInternalServerError)
186 }
187 }
188 }
189 }
190}
191
192func ListenUDP(address string, networkBuffer int) (*net.UDPConn, error) {
193 addr, err := net.ResolveUDPAddr("udp", address)

Callers 3

API_list_pullMethod · 0.92
API_list_pushMethod · 0.92
ReturnValueFunction · 0.85

Calls 7

NewSSEFunction · 0.85
ConditoinalFunction · 0.85
SetMethod · 0.80
StopMethod · 0.65
HeaderMethod · 0.65
ErrorMethod · 0.65
GetMethod · 0.45

Tested by

no test coverage detected