options #171
							
								
								
									
										55
									
								
								handler/swagger/swagger.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								handler/swagger/swagger.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
package swagger
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"io/fs"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	yamlcodec "go.unistack.org/micro-codec-yaml/v3"
 | 
			
		||||
	rutil "go.unistack.org/micro/v3/util/reflect"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Handler append to generated swagger data from dst map[string]interface{}
 | 
			
		||||
var Handler = func(dst map[string]interface{}, fsys fs.FS) http.HandlerFunc {
 | 
			
		||||
	c := yamlcodec.NewCodec()
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		if r.Method != http.MethodGet {
 | 
			
		||||
			w.WriteHeader(http.StatusNotFound)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		path := r.URL.Path
 | 
			
		||||
		if len(path) > 1 && path[0] == '/' {
 | 
			
		||||
			path = path[1:]
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		buf, err := fs.ReadFile(fsys, path)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			w.WriteHeader(http.StatusInternalServerError)
 | 
			
		||||
			_, _ = w.Write([]byte(err.Error()))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var src interface{}
 | 
			
		||||
 | 
			
		||||
		if err = c.Unmarshal(buf, src); err != nil {
 | 
			
		||||
			w.WriteHeader(http.StatusInternalServerError)
 | 
			
		||||
			_, _ = w.Write([]byte(err.Error()))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err = rutil.Merge(src, dst); err != nil {
 | 
			
		||||
			w.WriteHeader(http.StatusInternalServerError)
 | 
			
		||||
			_, _ = w.Write([]byte(err.Error()))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if buf, err = c.Marshal(src); err != nil {
 | 
			
		||||
			w.WriteHeader(http.StatusInternalServerError)
 | 
			
		||||
			_, _ = w.Write([]byte(err.Error()))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		w.WriteHeader(http.StatusOK)
 | 
			
		||||
		_, _ = w.Write(buf)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user