diff --git a/assets/vfsdata.go b/assets/vfsdata.go index 8b29de3..d62e2ba 100644 --- a/assets/vfsdata.go +++ b/assets/vfsdata.go @@ -21,7 +21,21 @@ var Assets = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", - modTime: time.Date(2021, 1, 16, 0, 49, 51, 282875034, time.UTC), + modTime: time.Date(2021, 1, 19, 9, 34, 46, 425278952, time.UTC), + }, + "/micro_chi.pb.go.tmpl": &vfsgen۰CompressedFileInfo{ + name: "micro_chi.pb.go.tmpl", + modTime: time.Date(2021, 1, 19, 9, 39, 14, 326591720, time.UTC), + uncompressedSize: 1559, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x54\x5f\x4f\xfb\x36\x14\x7d\xae\x3f\xc5\x5d\x26\xa4\x04\x52\x67\x68\x7b\xea\xe0\x61\x43\x20\xa1\x0d\x86\x78\x00\x69\x08\x21\xe3\xdc\x24\x56\x13\x3b\xb3\x6f\xba\x56\x6d\xbe\xfb\xe4\x24\xfd\xc3\x02\x08\xfd\x7e\x95\xaa\x34\xf6\x3d\x3e\xe7\xdc\x7b\xea\x24\x81\x0b\x93\x22\xe4\xa8\xd1\x0a\xc2\x14\x5e\x57\x50\x5b\x43\x46\x4e\x73\xd4\xd3\x4a\x49\x6b\x58\x2d\xe4\x5c\xe4\x08\xeb\x75\x6e\xee\xe6\xf9\x9f\xc2\xd1\x65\x89\x15\x6a\x02\x7e\xa5\x4a\x84\x0d\xb8\xba\x54\xf4\x9b\xb5\x62\x05\xc1\xaf\x01\x6c\xa0\x14\x8e\xda\x96\x31\x55\xd5\xc6\x12\x84\x0c\x20\x90\x46\x13\x2e\x29\xf0\xbf\xb3\xaa\x7f\x6a\xa4\xa4\x20\xaa\xbb\x17\x8b\x59\x89\xb2\xdf\x70\x64\x95\xce\x5d\xc0\xd8\x24\xc8\x15\x15\xcd\x2b\x97\xa6\x4a\x72\x33\x95\x85\x4a\xfc\x77\xf1\x4b\xc0\x26\x95\x4a\xd3\x12\xff\x15\x16\xe1\xc3\xb2\x64\x5f\xd4\x21\xa4\x35\x2f\xa2\x56\x6f\x00\x8d\x56\x8e\x84\x9c\x4f\x8d\xcd\x93\xae\x24\x59\xfc\x9c\x88\x5a\x05\x2c\x62\x8c\x56\x35\x82\x35\x0d\xe1\x1f\xb8\x02\x47\xb6\x91\xb4\x6e\x19\xcb\x1a\x2d\xe1\xde\xaf\xdf\x8a\x0a\x43\x49\x4b\x18\x4c\xf2\x8b\xfe\x19\x41\xd8\x3b\x89\xe1\xd5\x98\x32\x82\x35\x83\xe1\xb3\x10\x65\x83\x31\x98\x39\xcc\xce\x41\xd2\x92\x3f\xf8\x85\x70\x4b\xb3\x6e\x23\x3e\x60\xa3\x1d\xc6\x22\x35\x56\xef\xa1\x6c\x27\x02\x73\xe5\x08\x6d\x68\xe1\x58\x16\x8a\xdf\x34\xcb\x18\x0a\x50\x9a\xd0\x66\x42\xe2\xba\x8d\x01\x6b\x07\x4f\xcf\xc7\xbb\x06\xf0\x4b\x9d\xd6\x46\x69\x8a\x00\xad\x35\xf6\x50\x9b\xd7\x34\x8c\xa3\xd7\xf5\x57\x16\x16\x11\xdb\x15\xa8\x0c\x16\xfc\xb6\xa9\x6e\x90\x0a\x93\x86\x11\x9c\xc1\xe9\x01\xfe\x7f\x7a\xb3\x8a\xf8\xa5\xa7\xc8\xc2\x40\xe9\x85\x28\x55\x0a\x85\xd0\x69\x89\x16\x5c\x8d\x52\x65\x0a\xd3\x19\x1c\xfd\x78\xb2\x08\x62\x28\xf6\x7e\xdb\x3d\x63\x66\x2c\xbc\x78\x13\x9d\x34\xa1\x73\xec\x0c\x8d\x39\x55\xba\xf4\x25\x43\x80\xf8\xb5\x4e\x71\x19\x62\xcd\xfd\x88\x62\x08\x78\x10\x8d\x21\x59\x87\xf2\x1e\x36\x1b\x28\x51\x6f\xeb\x23\x38\x3b\xef\xb6\xc6\x34\x5f\xb0\x78\xd8\x63\xd0\xa2\xc2\x19\x1c\xb9\xc0\x7b\xe8\x0f\x1f\x9d\xd9\x8e\x56\x3c\xca\xbb\x19\x20\x4f\x2a\x5d\x9e\x9c\xce\x9e\x47\x75\x95\x2f\x5a\xf0\x7e\x1c\xbf\xaf\xba\x38\xea\x77\x39\x54\x06\x3f\x54\xfc\xda\x3d\x78\x89\x61\xe4\x0d\xfb\xd7\xbf\xd1\x9a\x30\xfa\x36\x9f\xc3\x28\x63\xa8\x3a\x7a\x38\x72\xa0\x0d\x41\x66\x1a\x9d\x06\x31\xe8\x0f\xbc\x8e\xd3\x52\x6c\xff\x0e\x15\xbf\xde\x26\x37\x8c\x78\xe8\x23\x1e\xfa\x6b\x82\xdf\xa3\xab\x8d\x76\xf8\x68\x15\x79\xc6\xe3\x61\xf5\x9f\x06\x1d\x45\xef\xbb\x35\xf3\xef\xb2\xb5\xcb\xe5\x1b\x51\x5f\x19\xde\x10\xd9\xa1\x2b\x07\xb1\x1d\xe6\xf4\x99\x2c\xfe\xa8\xa8\x08\xf7\x37\xd7\xe8\x76\xd8\xc7\x28\x1a\x8e\xbb\xf2\x5d\xea\xc9\xba\xcd\x3b\x41\xc5\xd3\x4f\xcf\x31\xd8\xe2\x33\xb5\x2d\x9b\x4c\x26\x43\x1b\xb4\x2a\x59\xcb\xfe\x0b\x00\x00\xff\xff\x92\xa4\xcf\x74\x17\x06\x00\x00"), + }, + "/micro_gorilla.pb.go.tmpl": &vfsgen۰CompressedFileInfo{ + name: "micro_gorilla.pb.go.tmpl", + modTime: time.Date(2021, 1, 19, 9, 35, 45, 169593324, time.UTC), + uncompressedSize: 1248, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x93\x5f\x4f\xdb\x3c\x14\xc6\xaf\xeb\x4f\x71\x5e\xbf\x42\x8a\x21\x38\x43\xbb\xeb\xe0\x62\x9b\x40\x43\xda\x18\xe2\x82\x49\x43\x08\x99\xe4\x38\xb1\x1a\xff\x99\xed\x54\x45\x6d\xbe\xfb\xe4\x34\x74\x9d\xc2\x24\xb4\xf9\xa6\xb5\xfd\x9c\xf3\x9c\x9f\xcf\x49\x51\xc0\x47\x5b\x21\xd4\x68\xd0\x8b\x88\x15\x3c\x3e\x81\xf3\x36\xda\xf2\xb8\x46\x73\xac\x55\xe9\x2d\x71\xa2\x5c\x88\x1a\x61\xbd\xae\xed\xf5\xa2\xfe\x2c\x42\x3c\x6f\x51\xa3\x89\xc0\x2f\x54\x8b\xb0\x81\xe0\x5a\x15\xdf\x7b\x2f\x9e\x80\xbe\xa3\xb0\x81\x56\x84\xd8\xf7\x84\x28\xed\xac\x8f\x90\x11\x00\x2a\x75\xa4\xe9\xd7\x60\x2c\x9a\x18\xdd\xb0\xf1\x28\x5b\x2c\xb7\x17\x21\x7a\x65\xea\x40\x09\x99\xd1\x5a\xc5\xa6\x7b\xe4\xa5\xd5\x45\x6d\xbd\x6a\x5b\x51\xe8\x6e\x45\xc9\x6c\xa8\xe9\x41\x38\x05\xfb\x9a\xce\xa8\x10\x45\xb9\x38\xb6\xbe\x2e\x06\x49\xb1\x7c\x5b\x08\xa7\x28\x61\x84\xc8\xce\x94\x70\x83\xb5\x0a\x11\x7d\xe6\xe1\x50\x77\x2b\x7e\x63\xbb\x88\x3e\x87\x06\x94\x89\xe8\xa5\x28\x71\xdd\xe7\x80\x2e\xc0\xdd\xfd\xe1\xce\x86\x9f\x9b\xca\x59\x65\x22\x03\xf4\xde\x7a\x58\x13\x18\xd7\x12\xe6\x67\x30\x02\xf0\x5b\xd1\x76\xf8\x55\x66\x0d\x23\x3b\x81\x92\xb0\xe4\x57\x9d\xfe\x82\xb1\xb1\x55\xc6\xe0\x14\x4e\xf6\xe2\x9f\x97\xc7\xd8\x79\x03\x52\x47\x7e\x9e\x2c\x64\x46\x95\x59\x8a\x56\x55\xd0\x08\x53\xb5\xe8\x21\x38\x2c\x95\x54\x58\xcd\xe1\xe0\xff\xa3\x25\xcd\xa1\x61\xbb\x3c\xfd\x2f\x47\x69\x3d\x3c\x24\x88\xa1\x34\x61\x6a\x1c\x80\xa6\x9e\xaa\x5a\x25\xc9\xf8\xe4\xfc\xd2\x54\xb8\xca\xd0\xf1\x2b\xa1\x31\x07\xca\x29\x9b\x86\xc8\x21\x2a\x31\x6c\x36\xd0\xa2\x79\xd6\x33\x38\x3d\x1b\xae\xa6\x36\xaf\x40\xdc\x7f\x63\x30\x42\xe3\x1c\x0e\x02\x4d\x0c\xdb\xe4\x93\x9c\xfd\xe4\x24\x45\x25\x9a\x31\xe4\x4e\x55\xab\xa3\x93\xf9\xfd\x44\xa7\x93\x68\xc9\xb7\xed\xf8\xf0\x94\xb4\x99\x79\xd1\x43\x49\xf8\x4f\xf3\xcb\x70\x9b\x4a\xcc\x58\x02\x4e\xdb\xef\xe8\x6d\xc6\xfe\x8e\x73\x6c\x65\x0e\x7a\xb0\x87\x83\x00\xc6\x46\x90\xb6\x33\x15\xcd\xc1\xfc\x81\x75\x3a\x2d\x4d\x0e\x76\x91\x48\x34\xbf\x7c\x9e\xdc\x8c\xf1\x2c\x4d\x79\x96\x3e\x2c\x7e\x83\xc1\x59\x13\xf0\x9b\x57\xc3\x88\x1f\x8e\xa7\x3f\x3a\x0c\x91\xbd\x4c\x6b\x17\xff\x84\xb5\x9b\xcb\xdf\x8a\x7a\x4d\xf3\x3c\xff\x34\xa4\xb8\x48\xe5\xa3\xe3\xd7\x22\x36\x77\x6f\xee\x73\xf0\x0d\x1b\x5b\x15\xd2\xf9\xf6\x2f\xe7\x9c\x0d\x4d\xce\x26\xf3\xd1\x93\xd9\x6c\x36\x56\x6a\x54\x4b\x7a\xf2\x33\x00\x00\xff\xff\xb8\xd2\xa4\xfd\xe0\x04\x00\x00"), }, "/{{trimSuffix \".proto\" .File.Name}}_micro.pb.go.tmpl": &vfsgen۰CompressedFileInfo{ name: "{{trimSuffix \".proto\" .File.Name}}_micro.pb.go.tmpl", @@ -39,13 +53,15 @@ var Assets = func() http.FileSystem { }, "/{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl": &vfsgen۰CompressedFileInfo{ name: "{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl", - modTime: time.Date(2021, 1, 19, 1, 8, 43, 197629353, time.UTC), - uncompressedSize: 8587, + modTime: time.Date(2021, 1, 19, 9, 42, 47, 209483219, time.UTC), + uncompressedSize: 7497, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x59\xdd\x6f\xdb\xc8\x11\x7f\xd6\xfe\x15\x13\x9e\x73\x20\x73\xf4\xaa\x87\x7b\xf3\x9d\x1f\xee\x82\x04\x4d\x51\x27\x07\xbb\x48\x81\x1a\x86\xc1\x50\x43\x69\x6b\x72\x49\xef\x2e\x15\x19\x34\xff\xf7\x62\x3f\x48\xf1\x4b\xb2\x6c\x25\x6d\xf3\x10\x8b\xbb\x33\x3b\x33\x3b\x5f\x3f\x0e\xe7\x73\x78\x9b\x2f\x10\x96\xc8\x51\x44\x0a\x17\xf0\xe5\x01\x0a\x91\xab\x3c\x3e\x5d\x22\x3f\xcd\x58\x2c\x72\x32\x9f\x83\xcc\x4b\x11\xe3\x19\x54\x15\x7d\xcf\x52\xa4\x1f\xa3\x0c\xeb\x9a\x14\x51\x7c\x17\x2d\x11\xaa\x6a\x99\xff\x79\xb7\xfc\x7b\x24\xd5\xbb\x14\x33\xe4\x0a\x0c\x1d\x3c\x82\x2c\x52\xa6\x7e\x17\x22\x7a\x00\xef\x57\x0f\x1e\x21\x8d\xa4\xaa\x6b\x42\x58\x56\xe4\x42\x81\x4f\x66\x5e\x9c\x73\x85\x1b\xe5\x11\x00\x2f\xc9\xec\x5f\x8e\x6a\xbe\x52\xaa\x30\x0f\x02\x93\x14\x63\xbb\x21\x95\x60\x7c\x29\x3d\x42\x66\xde\x92\xa9\x55\xf9\x85\xc6\x79\x36\x5f\xe6\x82\xa5\x69\x34\xcf\xca\x8d\x47\x66\x46\xf1\xdb\xa8\x60\xd0\xa5\x29\x39\x93\x2a\x8a\xef\x4e\x73\xb1\x9c\x1b\x92\xf9\xfa\x97\x79\x54\xb0\x96\x23\x4e\x99\x56\xfe\x69\x26\x4b\xe8\x41\xc3\x28\x51\xac\x51\x1c\xc0\x68\x09\x07\x02\x6f\xb5\xa5\x4f\x30\x9f\x5a\xd2\x53\x4d\x3a\x5f\xff\xe2\x91\x80\x90\x75\x24\xc0\x27\x00\x00\xb7\xd0\xd5\x83\x7e\x2a\x14\xcb\x79\x6f\xc7\xb2\x37\x3b\x01\x21\x55\x75\x0a\x27\xc6\x4b\x67\xe7\xce\x5d\x75\x6d\x57\xaf\x50\xac\x59\x8c\xda\xcb\x66\xd3\x3d\x1b\xb7\xc3\x23\x28\xc1\xb2\xab\x32\x49\xd8\x06\x3c\xb7\xe5\x69\x5e\xa2\x1e\x0a\x1d\x0c\x3d\xfe\x47\x48\xf3\xaf\x28\xde\x33\xa1\xfd\xee\x76\x40\x2a\x51\xc6\x0a\x2a\xa3\x62\xdc\x57\xf1\xad\xf9\x63\x76\xb8\x3e\xc1\x7a\x9c\xd4\x44\x47\xe2\x85\xa6\x04\xe7\x27\xa9\xca\x24\x31\xcb\x1f\xf1\x6b\x5f\xee\x56\x54\x2c\x30\x52\x08\x1c\xbf\x82\x6c\x96\xac\x84\xa4\xe4\xf1\x1e\x4e\xbf\x23\x3d\x9c\x56\x32\x80\x5d\x52\xad\x65\x02\x55\x29\x38\xfc\x78\xc8\x9d\x54\xf1\x19\xc4\xa1\x31\xf9\xcc\xfc\x5f\x6b\x93\xab\x4a\x44\x7c\x89\x5b\x1f\x5c\xa0\x5a\xe5\x8b\xc6\x53\x02\xef\xed\x82\xf1\xd3\x07\x5e\x94\xea\x1f\xda\x09\xfd\xc4\xa3\x9d\xc4\xb3\x6c\xb2\xe8\xb0\x7d\x2a\xd5\x61\x7c\x2c\x81\x88\x2f\xc0\xe7\xb9\x02\x77\x03\x57\x4a\x60\x94\x31\xbe\x0c\xc0\x37\x3a\xa2\xe8\x2c\x9d\xd6\xb5\xbd\x65\x3f\x86\x37\x87\x5c\x82\xbe\x50\x57\x5d\xfc\x58\x6d\xc0\x95\x06\xfa\xd6\xfe\x0d\x41\xe0\xbd\x39\xa9\x35\xbc\xae\x43\xc8\x0b\x25\x81\x52\xda\xf7\x50\x94\xa6\x36\xda\x03\xf0\x87\x6e\xba\x6d\xc5\xb8\xe5\x10\x50\x88\x5c\x04\xc6\x71\xda\x56\x4c\x25\x6a\x83\x87\x76\x7e\x07\x9b\xbe\x9b\xfa\xff\x37\xd7\x6f\x58\x9a\x98\xd3\x2c\x43\x6d\xf9\x42\x17\x10\x9d\x32\x2e\xce\x74\x88\xf9\x5a\x7c\xc4\xb8\x04\xff\xdf\x32\xe7\xe0\xe7\x05\xf2\xa8\x60\xf6\x58\xa0\x41\x00\x1e\x2f\xd3\xd4\x0b\x06\xcc\x23\x42\x7a\x89\xb2\xc8\xb9\x44\xd9\x50\xa2\x10\x59\x54\xe8\xf0\xcf\xa2\x3b\xf4\xb3\xa8\xb8\xb6\x99\x7e\xc3\xb8\x42\x91\x44\x31\x56\x75\x08\x55\x05\x29\xf2\x7d\x07\xd6\x75\xd0\x8a\xb6\xa9\x7a\x72\x17\xc2\xc9\x5a\x1f\x7d\xb0\x1e\xd7\x5e\x55\x9d\xdc\xd5\xb5\x77\x03\xe7\xba\x5a\x9c\x82\xbf\x44\x75\x81\x52\x46\x4b\x34\x89\x69\x2b\xf5\xc9\x9a\x5e\xc5\x2b\xcc\x22\xfa\x37\x99\x73\xf7\xf3\x12\x93\xc0\x96\xe6\xba\xae\xb6\xf7\x30\xb8\xd3\xdd\x8f\xdc\xf8\xef\xec\x1c\xa2\xa2\x40\xbe\xf0\xf5\x63\x68\x76\x00\x46\x5d\xca\xd5\x1f\xdf\xab\x2a\xfd\xf8\x19\xc5\x17\xa0\x75\xed\x05\x21\xec\x64\xf9\x33\x52\xab\x86\x41\xff\x76\x0c\x3b\xe9\xff\xc8\x17\x0f\x0d\xbd\xfe\xdd\xa7\x3f\x2a\x40\x9e\x13\x22\x53\xaa\xbd\xd3\x71\x7b\x11\x15\xbe\xf5\x5b\x4f\xa9\xce\x95\x8e\x16\x02\xd2\x4a\xce\xc5\x54\xa5\xf4\x47\xf5\xd4\x71\x4a\xb3\x60\x32\x46\xfb\x28\xa6\x31\xb5\x34\x3a\x41\x43\xf3\xfc\x11\xbf\x5e\xe2\x7d\x89\x52\xf9\x31\xd5\x9d\x23\x04\x6f\x58\x31\x68\x9b\xd8\x5e\x68\xfa\x51\x27\x83\xab\x3a\x08\x6d\x14\x50\x4a\x6d\x34\xb3\xc4\x08\x7c\x75\x0e\x9c\xa5\xae\x99\xb5\xed\x8c\xb3\xd4\xe8\x63\x56\x6b\xd2\x73\xc9\xa8\x5c\xd6\x35\xfc\x77\xff\x75\xf5\x3f\x3b\x77\xf7\x47\xaf\x74\x64\x0b\xbc\x0f\x7e\x7d\xae\x61\xc8\x17\xce\x15\xcf\xea\xe6\xcd\x75\x57\x56\x81\x3a\xd4\xa7\x77\x8a\x73\x73\xa6\x34\x45\xe8\xc7\x7e\x81\xac\xda\xe2\xd0\xf8\x5c\x97\xd3\x23\x3c\xae\x2d\x0f\xb5\xb0\xc3\x1c\xbd\xfb\x46\xda\x1d\x7b\xd6\xd6\x24\x73\x4b\x35\x21\x2f\x4e\xcf\xc3\x12\xb3\xaa\x9e\x5b\x65\xe7\x73\x30\x59\x0b\x99\x45\x3c\x2a\x07\x19\x29\x26\x93\x07\xdb\x85\xa0\x2d\xf8\xae\x57\xa2\xee\x70\x2f\xae\xc0\x81\x95\xe6\x07\x0e\x39\xf6\x91\x60\x92\x29\x7a\x55\x08\xc6\x55\xe2\x7b\xaf\x7f\x58\x7b\x21\x60\x40\xac\xf1\xae\x5c\x4c\xff\x24\x55\xf5\xbc\xda\x71\x30\x16\x6f\xc3\xa4\x0f\xca\x6d\xd8\xf6\x41\xaf\x15\x60\xd4\x6d\xa0\xe0\x04\x0c\x34\x65\x60\xa8\x64\x8b\x44\x36\x87\x21\x91\x56\xab\x00\x2e\x31\x5e\xff\xce\x17\x6f\xd3\x5c\xa2\xbf\x17\x4c\xcc\xb2\xe9\x5c\x9a\xb9\x44\xda\x50\x7d\xd6\x85\x5c\xfa\x59\x40\x66\x2e\xf4\xcf\x9b\xd0\x9f\x19\x32\x4d\xe5\x44\x91\x59\x4d\x5a\xb2\x57\x5b\xb2\x61\x6e\xcc\x6a\x32\x23\xcd\x6a\x66\xb3\xa2\x75\x9e\xf6\xdd\x4b\x2d\x6f\x4c\xb6\x71\xda\x0b\xa4\x0d\x75\x85\xad\xd1\xf5\x18\x31\x16\xdd\xf9\xc1\x10\xef\xed\x12\xd9\xd0\x1f\x23\x54\x17\x64\xe3\x09\xe8\x00\xae\xfd\xa6\x9a\x1a\x9e\x1d\x25\xb5\xf5\xff\xe1\x52\x35\x8b\x93\x5a\x55\x4f\xbc\x11\xbc\xec\x1a\xfc\x6c\x88\xa9\x0f\xbd\x87\x4e\x8c\x39\xdd\x06\x79\x77\x94\x6e\xc6\xf2\x27\xd0\x7b\xb6\xab\x7b\x6d\x3b\xf0\xf0\x26\x27\x3a\xf0\xb8\xdb\xe8\x23\x76\x64\x94\x2b\x87\x8d\xe5\xcd\xaa\xb6\x74\x3b\x21\x70\x03\x19\x37\x21\x78\xba\x18\xfe\x35\xe2\x8b\xd4\x30\xb4\x35\x70\xd8\x50\x1d\x89\x51\x64\xf2\xa5\x1c\xfe\x67\x6f\xe5\xcf\xe8\x0b\x36\x18\x56\x4f\x04\x83\xb3\xf5\xc9\xf7\xc1\x5e\x97\x70\xc3\x27\x2b\x6e\x1b\xc2\x7b\xd0\xe1\x11\xe0\x90\xcc\x3a\xd5\xbe\x8b\x65\x8f\x03\x8f\xb3\xd9\x08\x3a\x4e\x87\xed\x6c\xd6\x36\x02\xd3\x03\x66\x3d\x74\xb4\xa2\x3b\xa2\x87\xf6\x2e\x34\xd4\xc1\xbd\x1f\x4f\x6e\xdf\xf4\x8d\x36\x0d\x9c\x0c\xc8\x10\x48\x3e\x53\xf0\x31\x52\x1d\xd6\xeb\x68\xf0\x6d\xa3\x6a\x72\xca\xa0\x91\xf2\xa0\x12\x75\xcb\xe4\x73\xed\x17\x78\x6f\xce\xec\x97\xd1\x6f\x80\xb2\x7a\xd3\x19\x9b\x1e\x6d\xaf\x31\x9a\xee\x6c\xb7\x04\xda\xae\x38\xee\x4e\x04\xda\xe6\x35\xb9\xd9\x9d\xcf\x3d\x03\x94\x59\x91\x2d\xbc\x9a\xbe\xe0\xc1\x9b\x50\x0f\x96\x6c\x45\x0f\x8f\x6f\x4f\x3f\xec\xd4\xe6\x94\x51\x89\x70\x96\xb7\x9d\xa8\x1b\x14\xb6\x13\x0d\xdf\x41\x9e\x2e\xf7\x43\x0f\x75\xca\xfe\xee\x92\xf6\x7d\x81\xef\x40\xa5\xa0\xef\x98\x6c\x5f\xec\xb7\x8d\xb6\x05\x55\xc1\xb6\x03\x9f\x77\x1b\x6d\x83\x70\x07\xe0\xb1\xd7\x6f\x75\x39\x7b\x01\x7c\x1d\xe9\x3f\x46\xaf\x47\x63\xd7\xb1\x8c\xbd\xd0\xf5\x1b\x00\xd7\x49\xaf\xec\x45\x90\x47\xa3\xd6\x91\xc8\x27\x41\xeb\x6e\xc8\xba\x3b\x35\x8f\x30\x7f\x7f\x30\x1e\x82\x56\x4d\x1a\x4d\x64\xfa\x11\x17\xb4\xa7\x3c\x0c\x80\x6a\x17\x2c\x7c\x57\xa0\x3a\x89\x53\xdb\x84\xba\xc4\x25\x93\x0a\x85\x2f\xe0\x4d\x56\x6e\xe8\x65\x5e\x2a\x14\x21\xac\xa0\x37\x81\xc6\x42\xc2\xf5\xcd\x9b\xf6\x8b\x26\x7d\xc7\x17\x45\xce\xb8\xea\xbf\x23\xe8\x7f\x66\x1a\xe2\xbe\x95\xd2\xcf\x51\x5a\xe2\xa7\xc4\x5f\x05\xa4\x25\xb0\x13\x10\x33\xeb\x5d\xd3\x8f\x65\xe6\x66\xb9\x41\x4b\xc0\x92\x96\xe6\x37\xf8\xb9\x73\xf4\x60\x2c\x94\x64\xca\x8e\x42\x13\xdf\x63\x7c\x1d\xa5\x6c\x01\xab\x06\x41\x17\x18\xb3\x84\xe1\xe2\x0c\x5e\xff\xf0\xd3\xda\x0b\x61\xb5\x15\x50\x6f\x95\x49\x72\x01\xb7\xda\x3e\xa3\xb5\xc1\xd3\xda\xd6\xb1\x4c\xb6\xd8\x38\x34\xc6\xf8\x52\xd2\x0f\x7c\x81\x1b\x1f\x0b\x13\x03\xa1\x86\xc3\xc1\x98\x25\x31\x5c\xda\x86\xc7\x47\x48\x91\x37\xf4\x01\xfc\x76\x6e\xb6\xc6\x62\x0e\x30\xb1\x7b\xfd\xee\x43\xdd\x6b\xe9\x69\x1b\xec\xe1\xa3\x33\xeb\xd1\x0a\x77\xdf\x54\x1d\xcb\x35\x5b\x6c\x7e\xfa\xf9\xec\x66\x44\x97\x59\x27\x59\x0f\xfd\xf1\xa0\x69\xcd\xf7\xc8\x49\x5b\x5f\x65\xf4\x83\xfc\xac\x55\xf4\x03\x6d\xb0\x7e\xfc\x17\x8a\xdc\x0f\x5e\x66\xa7\x73\x65\xd8\x8c\xcc\x5e\x4b\x83\xde\x93\xbc\xe4\x0b\xcf\x7e\xa2\x9c\xb2\x75\x1c\x2d\xab\x10\xf2\x3b\xf3\x91\x85\x7e\x68\x82\xda\x0f\xa8\xaf\x13\xc0\x37\x03\xf5\x66\x54\xf7\x4f\xc1\x4c\xf4\xbf\x71\xab\x66\xb8\x19\x4c\x5b\x9b\xdf\x1d\x65\x56\x1b\x97\x3d\xa5\x0e\x71\x9e\xa0\x16\x4c\xbe\xd7\xea\xa3\xfd\xb0\x71\xfd\x97\x9b\x10\xc4\x2a\x70\xae\x92\x7a\xdd\xfe\xa4\x94\xda\xa9\xa0\x3f\x8a\x8f\x9a\xcc\xba\x63\x24\x52\x93\xff\x04\x00\x00\xff\xff\x44\xd3\xd5\x55\x8b\x21\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x58\xcb\x6e\xdb\x38\x17\x5e\x8b\x4f\x71\xaa\x3f\x7f\x21\x0d\x64\x7a\xd1\x5d\x0a\x2f\x3a\x41\x3b\x17\x4c\xda\x22\x29\x66\x53\x14\x81\x2a\x1f\xdb\x9a\x48\x94\x42\xd2\x4e\x02\x85\xef\x3e\xe0\x45\xb2\x24\xcb\xb7\xb8\x99\x99\x2e\x1a\x8b\xe4\xe1\xb9\x7f\xe7\x93\xc6\x63\xb8\x28\xa6\x08\x73\x64\xc8\x63\x89\x53\xf8\xfe\x08\x25\x2f\x64\x91\x8c\xe6\xc8\x46\x79\x9a\xf0\x82\x8c\xc7\x20\x8a\x25\x4f\xf0\x1c\xaa\x8a\x7e\x48\x33\xa4\x1f\xe3\x1c\x95\x22\x65\x9c\xdc\xc6\x73\x84\xaa\x9a\x17\x9f\x6f\xe7\x7f\xc4\x42\xbe\xcf\x30\x47\x26\xc1\x9c\x83\x27\x10\x65\x96\xca\x77\x9c\xc7\x8f\xe0\xbf\xf5\xe1\x09\xb2\x58\x48\xa5\x08\x49\xf3\xb2\xe0\x12\x02\xe2\xf9\x49\xc1\x24\x3e\x48\x9f\x00\xf8\xb3\x5c\xfa\x84\x78\x46\xf3\x4d\x92\xa5\xfa\x2e\x7f\x9e\xca\xc5\xf2\x3b\x4d\x8a\x7c\xbc\x64\xa9\x90\x71\x72\x3b\x2a\xf8\x7c\x6c\x4e\x8d\x57\x6f\xc6\xf6\xa0\x0f\xb5\xa0\x40\xbe\x42\x7e\x80\xa0\x3d\xe8\x77\x15\xde\x2c\xa4\x2c\xf7\x08\x8f\xec\xd1\x91\x3e\x3a\x5e\xbd\xf1\x49\x48\xc8\x2a\xe6\x10\x10\x00\x80\x1b\x68\xdb\x41\x3f\x95\x32\x2d\x58\x67\xc7\x8a\xd7\x3b\x21\x21\x55\x35\x82\x33\x13\xb4\xf3\x89\x8b\x9e\x52\x76\xf5\x1a\xf9\x2a\x4d\x50\x07\xdd\x6c\xba\x67\x93\x05\x78\x02\xc9\xd3\xfc\x7a\x39\x9b\xa5\x0f\xe0\xbb\x2d\x5f\xcb\x12\xf9\x58\xea\xdc\x74\xe4\x9f\x20\x2b\xee\x91\x7f\x48\xb9\x4e\x83\xdb\x01\x21\xf9\x32\x91\x50\x19\x13\x93\xae\x89\x17\xe6\x8f\xd9\x61\xfa\x06\x21\x79\xca\xe6\x44\x11\x5d\x18\x97\xfa\x24\xb8\x3c\x09\xb9\x9c\xcd\xcc\xf2\x47\xbc\xef\xea\x5d\xab\x4a\x38\xc6\x12\x81\xe1\x3d\x88\x7a\xc9\x6a\x98\x2d\x59\xb2\x43\x32\x68\x69\x8f\x86\x8d\x0c\x61\x9b\x56\xeb\x19\x47\xb9\xe4\x0c\x5e\x1f\x12\x93\x2a\x39\x87\x24\x32\x2e\x9f\x9b\xff\x95\x76\xb9\xaa\x78\xcc\xe6\xb8\xce\xc1\x25\xca\x45\x31\xad\x33\xc5\xf1\xce\x2e\x98\x3c\xfd\xc6\xca\xa5\xfc\xa2\x93\xd0\xed\x03\xda\xea\x03\x2b\x26\xca\x96\xd8\xa7\xa5\x3c\x4c\x2e\x9d\x41\xcc\xa6\x10\xb0\x42\x82\x8b\xc0\xb5\xe4\x18\xe7\x29\x9b\x87\x10\x18\x1b\x91\xb7\x96\x46\x4a\xd9\x28\x07\x09\xfc\x74\x48\x10\x74\x40\x5d\xb3\x07\x89\x7c\x00\xd7\xa9\xf4\xc2\xfe\x8d\x80\xe3\x9d\xb9\xa9\x71\x5c\xa9\x08\x8a\x52\x0a\xa0\x94\x76\x33\x14\x67\x99\xad\xf6\x10\x82\x7e\x9a\x6e\x1a\x35\x6e\x39\x02\xe4\xbc\xe0\xa1\x49\x9c\xf6\x15\x33\x81\xda\xe1\xbe\x9f\x2f\xe0\xd3\x8b\x99\xff\x9f\x09\xbf\x11\xa9\x6b\x4e\x8b\xf4\xad\x65\x53\x0d\x20\xba\x65\x5c\x9d\xe9\x12\x0b\xb4\xfa\x38\x65\x02\x82\xbf\x44\xc1\x20\x28\x4a\x64\x71\x99\xda\x6b\x81\x86\x21\xf8\x6c\x99\x65\x7e\xd8\x13\xde\x38\x48\xaf\x50\x94\x05\x13\x28\xea\x93\xc8\x79\x1e\x97\xba\xfc\xf3\xf8\x16\x83\x3c\x2e\xbf\xda\x4e\xff\x96\x32\x89\x7c\x16\x27\x58\xa9\x08\xaa\x0a\x32\x64\xbb\x2e\x54\x2a\x6c\x54\xdb\x56\x3d\xbb\x8d\xe0\x6c\xa5\xaf\x3e\xd8\x8e\xaf\x7e\x55\x9d\xdd\x2a\xe5\x7f\x83\x89\x46\x8b\x11\x04\x73\x94\x97\x28\x44\x3c\x47\xd3\x98\x16\xa9\xcf\x56\xf4\x3a\x59\x60\x1e\xd3\xdf\x45\xc1\xdc\xcf\x2b\x9c\x85\x16\x9a\x95\xaa\xd6\x71\xe8\xc5\x74\xfb\x23\x33\xf9\x3b\x9f\x40\x5c\x96\xc8\xa6\x81\x7e\x8c\xcc\x0e\xc0\xc6\x94\x72\xf8\x13\xf8\x55\xa5\x1f\xff\x44\xfe\x1d\xa8\x52\x7e\x18\xc1\x56\x91\xcf\xb1\x5c\xd4\x02\xfa\xb7\x13\x70\xe7\x87\x13\xae\xcf\xfe\x5c\x4c\x1f\x81\x86\xe0\xff\xf2\xfe\xcb\x3a\xc7\x43\x1a\xf4\xc9\x5a\x83\x95\xea\x6b\x68\xf9\x7b\x62\x8d\x1d\x53\x65\x43\xb6\xbe\xd7\xa5\x7f\x19\x97\x81\x4d\xfd\x6e\x2b\x5b\x0b\x21\x69\x34\x17\x7c\x08\x6c\x83\x0d\x48\x76\x92\xc2\x2c\x98\xa6\xd3\x69\x4e\x68\x42\xed\x19\xdd\xe3\x91\x79\xfe\x88\xf7\x57\x78\xb7\x44\x21\x83\x84\xea\xe1\x13\x81\xdf\x07\x1d\xda\x60\x83\x1f\x99\x91\xd6\x02\x81\x4a\x85\x91\x2d\x24\x4a\xa9\x6d\x88\x74\x66\x14\xbe\x9a\x00\x4b\x33\x37\x0f\x9b\x89\xc8\xd2\xcc\xd8\x63\x56\x15\xe9\xa4\x64\x03\x71\x95\x82\x7f\xf6\x5f\xdb\xfe\xf3\x89\x8b\x1f\xbd\xd6\xcd\xc1\xf1\x2e\x7c\x7b\xac\x63\xc8\xa6\x2e\x15\x47\x11\x82\x3a\xdc\x95\x35\x40\x45\xfa\xf6\x16\xbe\xd7\x77\x0a\x83\x63\xaf\xbb\x18\x5b\x35\xf8\x52\xe7\x5c\x23\xf2\x09\x19\xd7\x9e\x47\x5a\xd9\x61\x89\xde\x1e\x91\x66\xc7\xde\xb5\x76\xc9\x44\x49\x11\xf2\xec\xf6\x3c\xac\x31\xab\xea\x58\xa0\x1e\x8f\xc1\x74\x2d\xe4\x96\x34\xc9\x02\x44\x2c\x53\x31\x7b\xb4\x83\x0c\x9a\x99\xe1\xc6\x2d\xea\x21\xf9\x6c\x10\x0f\xad\xb6\x20\x74\xe4\xb3\x4b\x26\x67\xb9\xa4\xd7\x25\x4f\x99\x9c\x05\xfe\xff\xff\xb7\xf2\x23\xc0\x90\x58\xe7\x1d\x5c\x0c\xff\x24\x55\x75\x1c\x76\x1c\x4c\xe7\x9b\x32\xe9\xf2\x7a\x5b\xb6\x5d\xde\x6c\x15\x18\x73\x6b\x36\x39\xc0\x24\x0d\x0c\xf4\x8d\x6c\xc8\xcc\xc3\x61\x64\xa6\xb1\x2a\x84\x2b\x4c\x56\xef\xd8\xf4\x22\x2b\x04\x06\x3b\xf9\x88\x97\x0f\xf7\x92\xe7\x1a\xe9\x81\xea\xbb\x2e\xc5\x3c\xc8\x43\xe2\xb9\xd2\x9f\xd4\xa5\xef\x99\x63\xfa\x94\x53\x45\x3c\x45\x9a\x63\xaf\xd6\xc7\xfa\xbd\xe1\x29\xe2\x91\x7a\x35\xb7\x5d\xd1\x24\x4f\xe7\xee\xb9\x9e\xd7\x2e\xdb\x3a\xed\x14\xd2\x03\x75\xc0\x56\xdb\x7a\x8a\x1a\x4b\x10\x83\xb0\x4f\x19\xb7\xa9\xac\xcf\x9f\xa2\x54\x03\xb2\xc9\x04\xb4\x38\xdb\x6e\x57\x0d\x86\xe7\x27\x69\x6d\xf2\x7f\xb8\x56\x2d\xe2\xb4\x56\xd5\x9e\x97\x8a\xe7\x85\x21\xc8\xfb\xb4\xfc\xd0\x38\xb4\x6a\xcc\xd9\xd6\xeb\xbb\x93\x6c\x33\x9e\xef\x79\x01\xc8\xb7\x4d\xaf\xf5\x04\xee\x47\x72\x60\x02\x6f\x4e\x1b\x7d\xc5\x96\x8e\x72\x70\x58\x7b\x5e\xaf\x6a\x4f\xd7\x1f\x19\xdc\x37\x1d\xf7\x91\x61\x3f\x18\xfe\x1a\xb3\x69\x66\x04\x1a\x0c\xec\x0f\x54\x77\xc4\x18\x32\xf8\x5e\x0f\xff\xda\x8b\xfd\x11\x73\xc1\x16\xc3\x62\x4f\x31\x38\x5f\xf7\xbe\x52\x76\xa6\x84\xfb\x7e\x65\xd5\xad\x4b\x78\x07\x3b\x3c\x81\x1c\x12\xaf\x85\xf6\x6d\x2e\x7b\x1a\x79\xf4\xbc\x0d\xea\x38\x5c\xb6\x9e\xd7\x0c\x02\x33\x03\xbc\x0e\x3b\x5a\xd0\x2d\xd5\x43\x3b\x01\x8d\x74\x71\xef\xe6\x93\xeb\x8f\x05\xc6\x9a\x9a\x4e\x86\xa4\x4f\x24\x8f\x54\x7c\x8a\x56\xc7\xf5\x5a\x16\xfc\xd8\xaa\x1a\xfc\x50\xa1\x99\x72\x0f\x89\xda\x30\x79\xac\xff\x1c\xef\xcc\x9d\x5d\x18\xfd\x01\x2c\xab\xf3\x81\xc7\xb6\x47\x33\x6b\x8c\xa5\x5b\xc7\x2d\x81\x66\x2a\x6e\x4e\x27\x02\xcd\xf0\x1a\xdc\x6c\x7f\xe2\x3b\x82\x94\x59\x95\x0d\xbd\x1a\x0e\x70\xef\x4d\xa8\x43\x4b\xd6\xaa\xfb\xd7\x37\xb7\x1f\x76\x6b\x7d\xcb\x06\x44\x38\xcf\x9b\x49\xd4\x2e\x0a\x3b\x89\xfa\xef\x20\xfb\xe1\xbe\x9f\xa1\x16\xec\x6f\x87\xb4\x97\x25\xbe\x3d\x93\xc2\x6e\x62\xf2\x5d\xb5\xdf\x0c\xda\x86\x54\x85\xeb\x09\x3c\x69\x0f\xda\x9a\xe1\xf6\xc8\x63\x67\xde\x6a\x38\x7b\x06\x7d\xdd\xb0\x7f\x93\xbd\x9e\xcc\x5d\x37\x75\xec\xa4\xae\x3f\x80\xb8\x0e\x66\x65\x27\x83\x3c\x99\xb5\x6e\xa8\xdc\x4b\x5a\xb7\x53\xd6\xed\xad\x79\x82\xfb\xbb\x8b\xf1\x10\xb6\x6a\xda\x68\xa0\xd3\x4f\x08\xd0\x0e\x78\xe8\x11\xd5\x36\x59\x78\x51\xa2\x3a\xc8\x53\x95\x22\x7f\x07\x00\x00\xff\xff\x85\x3a\x95\xe6\x49\x1d\x00\x00"), }, } fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/micro_chi.pb.go.tmpl"].(os.FileInfo), + fs["/micro_gorilla.pb.go.tmpl"].(os.FileInfo), fs["/{{trimSuffix \".proto\" .File.Name}}_micro.pb.go.tmpl"].(os.FileInfo), fs["/{{trimSuffix \".proto\" .File.Name}}_micro_grpc.pb.go.tmpl"].(os.FileInfo), fs["/{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl"].(os.FileInfo), diff --git a/templates/micro_chi.pb.go.tmpl b/templates/micro_chi.pb.go.tmpl new file mode 100644 index 0000000..4155a68 --- /dev/null +++ b/templates/micro_chi.pb.go.tmpl @@ -0,0 +1,50 @@ +// Code generated by protoc-gen-micro +package {{goPkgLastElement .File | splitArray ";" | last}} + +import ( + "context" + "fmt" + "net/http" + "reflect" + "strings" + + "github.com/go-chi/chi/v4" + middleware "github.com/go-chi/chi/v4/middleware" + micro_api "github.com/unistack-org/micro/v3/api" +) + +type routeKey struct{} + +func RouteName(ctx context.Context) (string, bool) { + value, ok := ctx.Value(routeKey{}).(string) + return value, ok +} + +func Register(r *chi.Mux, h interface{}, eps []*micro_api.Endpoint) error { + v := reflect.ValueOf(h) + + if v.NumMethod() < 1 { + return fmt.Errorf("invalid handler specified: %#+v", h) + } + + for _, ep := range eps { + idx := strings.Index(ep.Name, ".") + if idx < 1 || len(ep.Name) <= idx { + return fmt.Errorf("invalid api.Endpoint name: %s", ep.Name) + } + name := ep.Name[idx+1:] + m := v.MethodByName(name) + if !m.IsValid() || m.IsZero() { + return fmt.Errorf("invalid handler, method %s not found", name) + } + + rh, ok := m.Interface().(func(http.ResponseWriter, *http.Request)) + if !ok { + return fmt.Errorf("invalid handler: %#+v", m.Interface()) + } + for _, method := range ep.Method { + r.With(middleware.Value(routeKey{}, ep.Name)).MethodFunc(method, ep.Path[0], rh) + } + } + return nil +} diff --git a/templates/micro_gorilla.pb.go.tmpl b/templates/micro_gorilla.pb.go.tmpl new file mode 100644 index 0000000..f98961f --- /dev/null +++ b/templates/micro_gorilla.pb.go.tmpl @@ -0,0 +1,39 @@ +// Code generated by protoc-gen-micro +package {{goPkgLastElement .File | splitArray ";" | last}} + +import ( + "fmt" + "net/http" + "reflect" + "strings" + + "github.com/gorilla/mux" + micro_api "github.com/unistack-org/micro/v3/api" +) + +func Register(r *mux.Router, h interface{}, eps []*micro_api.Endpoint) error { + v := reflect.ValueOf(h) + + if v.NumMethod() < 1 { + return fmt.Errorf("invalid handler specified: %#+v", h) + } + + for _, ep := range eps { + idx := strings.Index(ep.Name, ".") + if idx < 1 || len(ep.Name) <= idx { + return fmt.Errorf("invalid api.Endpoint name: %s", ep.Name) + } + name := ep.Name[idx+1:] + m := v.MethodByName(name) + if !m.IsValid() || m.IsZero() { + return fmt.Errorf("invalid handler, method %s not found", name) + } + + rh, ok := m.Interface().(func(http.ResponseWriter, *http.Request)) + if !ok { + return fmt.Errorf("invalid handler: %#+v", m.Interface()) + } + r.HandleFunc(ep.Path[0], rh).Methods(ep.Method...).Name(ep.Name) + } + return nil +} diff --git "a/templates/{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl" "b/templates/{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl" index 20b0d5f..894e0f6 100644 --- "a/templates/{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl" +++ "b/templates/{{trimSuffix \".proto\" .File.Name}}_micro_http.pb.go.tmpl" @@ -5,12 +5,7 @@ package {{goPkgLastElement .File | splitArray ";" | last}} import ( "context" "fmt" - "net/http" - "reflect" - "strings" - "github.com/gorilla/mux" - micro_api "github.com/unistack-org/micro/v3/api" micro_client "github.com/unistack-org/micro/v3/client" micro_server "github.com/unistack-org/micro/v3/server" micro_client_http "github.com/unistack-org/micro-client-http/v3" @@ -57,7 +52,9 @@ func (c *{{$ServiceName | lowerFirst}}Service) {{.Name}}(ctx context.Context, re nopts := append(opts, micro_client_http.Method("{{httpVerb .}}"), micro_client_http.Path("{{httpPath .}}"), + {{- if not (contains (httpBody .) "GET") }} micro_client_http.Body("{{httpBody .}}"), + {{- end }} {{- if not (contains (json (openapiOption .)) "null") }} {{- if (openapiOption .).Responses }} micro_client_http.ErrorMap(errmap), @@ -238,31 +235,3 @@ func (x *{{$ServiceName | lowerFirst}}{{.Name}}Stream) Recv() (*{{$reqMethod}}, {{- end}} {{- end}} - -func Register(r *mux.Router, h interface{}, eps []*micro_api.Endpoint) error { - v := reflect.ValueOf(h) - - methods := v.NumMethod() - if methods < 1 { - return fmt.Errorf("invalid handler specified: %#+v", h) - } - - for _, ep := range eps { - idx := strings.Index(ep.Name, ".") - if idx < 1 || len(ep.Name) <= idx { - return fmt.Errorf("invalid api.Endpoint name: %s", ep.Name) - } - name := ep.Name[idx+1:] - m := v.MethodByName(name) - if !m.IsValid() || m.IsZero() { - return fmt.Errorf("invalid handler, method %s not found", name) - } - - rh, ok := m.Interface().(func(http.ResponseWriter, *http.Request)) - if !ok { - return fmt.Errorf("invalid handler: %#+v", m.Interface()) - } - r.HandleFunc(ep.Path[0], rh).Methods(ep.Method...).Name(ep.Name) - } - return nil -}