handler/swagger: initial import
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										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