planetscale 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (378) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +24 -0
  3. data/.github/workflows/gem-push.yml +38 -0
  4. data/.github/workflows/licensed.yml +43 -0
  5. data/.gitignore +10 -0
  6. data/.licensed.yml +9 -0
  7. data/.licenses/go/github.com/armon/circbuf.dep.yml +31 -0
  8. data/.licenses/go/github.com/gorilla/mux.dep.yml +41 -0
  9. data/.licenses/go/github.com/hashicorp/go-cleanhttp.dep.yml +375 -0
  10. data/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +32 -0
  11. data/.licenses/go/github.com/pkg/errors.dep.yml +36 -0
  12. data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +160 -0
  13. data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +180 -0
  14. data/.licenses/go/go.uber.org/atomic.dep.yml +31 -0
  15. data/.licenses/go/go.uber.org/multierr.dep.yml +30 -0
  16. data/.licenses/go/go.uber.org/zap.dep.yml +30 -0
  17. data/.licenses/go/go.uber.org/zap/buffer.dep.yml +30 -0
  18. data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +30 -0
  19. data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +30 -0
  20. data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +31 -0
  21. data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +31 -0
  22. data/.licenses/go/golang.org/x/net/context/ctxhttp.dep.yml +63 -0
  23. data/.licenses/go/golang.org/x/oauth2.dep.yml +44 -0
  24. data/.licenses/go/golang.org/x/oauth2/internal.dep.yml +38 -0
  25. data/.ruby_version +1 -0
  26. data/Gemfile +8 -0
  27. data/LICENSE +201 -0
  28. data/README.md +88 -0
  29. data/Rakefile +10 -0
  30. data/bin/console +15 -0
  31. data/bin/setup +17 -0
  32. data/controller.go +255 -0
  33. data/go.mod +16 -0
  34. data/go.sum +428 -0
  35. data/lib/generators/planetscale/install_generator.rb +58 -0
  36. data/lib/planetscale.rb +137 -0
  37. data/lib/planetscale/version.rb +5 -0
  38. data/planetscale.gemspec +44 -0
  39. data/proxy.go +128 -0
  40. data/vendor/github.com/armon/circbuf/.gitignore +22 -0
  41. data/vendor/github.com/armon/circbuf/LICENSE +20 -0
  42. data/vendor/github.com/armon/circbuf/README.md +28 -0
  43. data/vendor/github.com/armon/circbuf/circbuf.go +92 -0
  44. data/vendor/github.com/armon/circbuf/go.mod +1 -0
  45. data/vendor/github.com/golang/protobuf/AUTHORS +3 -0
  46. data/vendor/github.com/golang/protobuf/CONTRIBUTORS +3 -0
  47. data/vendor/github.com/golang/protobuf/LICENSE +28 -0
  48. data/vendor/github.com/golang/protobuf/proto/buffer.go +324 -0
  49. data/vendor/github.com/golang/protobuf/proto/defaults.go +63 -0
  50. data/vendor/github.com/golang/protobuf/proto/deprecated.go +113 -0
  51. data/vendor/github.com/golang/protobuf/proto/discard.go +58 -0
  52. data/vendor/github.com/golang/protobuf/proto/extensions.go +356 -0
  53. data/vendor/github.com/golang/protobuf/proto/properties.go +306 -0
  54. data/vendor/github.com/golang/protobuf/proto/proto.go +167 -0
  55. data/vendor/github.com/golang/protobuf/proto/registry.go +317 -0
  56. data/vendor/github.com/golang/protobuf/proto/text_decode.go +801 -0
  57. data/vendor/github.com/golang/protobuf/proto/text_encode.go +560 -0
  58. data/vendor/github.com/golang/protobuf/proto/wire.go +78 -0
  59. data/vendor/github.com/golang/protobuf/proto/wrappers.go +34 -0
  60. data/vendor/github.com/gorilla/mux/AUTHORS +8 -0
  61. data/vendor/github.com/gorilla/mux/LICENSE +27 -0
  62. data/vendor/github.com/gorilla/mux/README.md +805 -0
  63. data/vendor/github.com/gorilla/mux/doc.go +306 -0
  64. data/vendor/github.com/gorilla/mux/go.mod +3 -0
  65. data/vendor/github.com/gorilla/mux/middleware.go +74 -0
  66. data/vendor/github.com/gorilla/mux/mux.go +606 -0
  67. data/vendor/github.com/gorilla/mux/regexp.go +388 -0
  68. data/vendor/github.com/gorilla/mux/route.go +736 -0
  69. data/vendor/github.com/gorilla/mux/test_helpers.go +19 -0
  70. data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +363 -0
  71. data/vendor/github.com/hashicorp/go-cleanhttp/README.md +30 -0
  72. data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +58 -0
  73. data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +20 -0
  74. data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +3 -0
  75. data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +48 -0
  76. data/vendor/github.com/mitchellh/go-homedir/LICENSE +21 -0
  77. data/vendor/github.com/mitchellh/go-homedir/README.md +14 -0
  78. data/vendor/github.com/mitchellh/go-homedir/go.mod +1 -0
  79. data/vendor/github.com/mitchellh/go-homedir/homedir.go +167 -0
  80. data/vendor/github.com/pkg/errors/.gitignore +24 -0
  81. data/vendor/github.com/pkg/errors/.travis.yml +10 -0
  82. data/vendor/github.com/pkg/errors/LICENSE +23 -0
  83. data/vendor/github.com/pkg/errors/Makefile +44 -0
  84. data/vendor/github.com/pkg/errors/README.md +59 -0
  85. data/vendor/github.com/pkg/errors/appveyor.yml +32 -0
  86. data/vendor/github.com/pkg/errors/errors.go +288 -0
  87. data/vendor/github.com/pkg/errors/go113.go +38 -0
  88. data/vendor/github.com/pkg/errors/stack.go +177 -0
  89. data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +139 -0
  90. data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +258 -0
  91. data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +142 -0
  92. data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +305 -0
  93. data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +131 -0
  94. data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +368 -0
  95. data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +78 -0
  96. data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +163 -0
  97. data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +467 -0
  98. data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +73 -0
  99. data/vendor/go.uber.org/atomic/.codecov.yml +19 -0
  100. data/vendor/go.uber.org/atomic/.gitignore +12 -0
  101. data/vendor/go.uber.org/atomic/.travis.yml +27 -0
  102. data/vendor/go.uber.org/atomic/CHANGELOG.md +76 -0
  103. data/vendor/go.uber.org/atomic/LICENSE.txt +19 -0
  104. data/vendor/go.uber.org/atomic/Makefile +78 -0
  105. data/vendor/go.uber.org/atomic/README.md +63 -0
  106. data/vendor/go.uber.org/atomic/bool.go +81 -0
  107. data/vendor/go.uber.org/atomic/bool_ext.go +53 -0
  108. data/vendor/go.uber.org/atomic/doc.go +23 -0
  109. data/vendor/go.uber.org/atomic/duration.go +82 -0
  110. data/vendor/go.uber.org/atomic/duration_ext.go +40 -0
  111. data/vendor/go.uber.org/atomic/error.go +51 -0
  112. data/vendor/go.uber.org/atomic/error_ext.go +39 -0
  113. data/vendor/go.uber.org/atomic/float64.go +76 -0
  114. data/vendor/go.uber.org/atomic/float64_ext.go +47 -0
  115. data/vendor/go.uber.org/atomic/gen.go +26 -0
  116. data/vendor/go.uber.org/atomic/go.mod +8 -0
  117. data/vendor/go.uber.org/atomic/go.sum +9 -0
  118. data/vendor/go.uber.org/atomic/int32.go +102 -0
  119. data/vendor/go.uber.org/atomic/int64.go +102 -0
  120. data/vendor/go.uber.org/atomic/nocmp.go +35 -0
  121. data/vendor/go.uber.org/atomic/string.go +54 -0
  122. data/vendor/go.uber.org/atomic/string_ext.go +43 -0
  123. data/vendor/go.uber.org/atomic/uint32.go +102 -0
  124. data/vendor/go.uber.org/atomic/uint64.go +102 -0
  125. data/vendor/go.uber.org/atomic/value.go +31 -0
  126. data/vendor/go.uber.org/multierr/.codecov.yml +15 -0
  127. data/vendor/go.uber.org/multierr/.gitignore +4 -0
  128. data/vendor/go.uber.org/multierr/.travis.yml +23 -0
  129. data/vendor/go.uber.org/multierr/CHANGELOG.md +60 -0
  130. data/vendor/go.uber.org/multierr/LICENSE.txt +19 -0
  131. data/vendor/go.uber.org/multierr/Makefile +42 -0
  132. data/vendor/go.uber.org/multierr/README.md +23 -0
  133. data/vendor/go.uber.org/multierr/error.go +449 -0
  134. data/vendor/go.uber.org/multierr/glide.yaml +8 -0
  135. data/vendor/go.uber.org/multierr/go.mod +8 -0
  136. data/vendor/go.uber.org/multierr/go.sum +11 -0
  137. data/vendor/go.uber.org/multierr/go113.go +52 -0
  138. data/vendor/go.uber.org/zap/.codecov.yml +17 -0
  139. data/vendor/go.uber.org/zap/.gitignore +32 -0
  140. data/vendor/go.uber.org/zap/.readme.tmpl +109 -0
  141. data/vendor/go.uber.org/zap/.travis.yml +23 -0
  142. data/vendor/go.uber.org/zap/CHANGELOG.md +432 -0
  143. data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +75 -0
  144. data/vendor/go.uber.org/zap/CONTRIBUTING.md +81 -0
  145. data/vendor/go.uber.org/zap/FAQ.md +156 -0
  146. data/vendor/go.uber.org/zap/LICENSE.txt +19 -0
  147. data/vendor/go.uber.org/zap/Makefile +63 -0
  148. data/vendor/go.uber.org/zap/README.md +134 -0
  149. data/vendor/go.uber.org/zap/array.go +320 -0
  150. data/vendor/go.uber.org/zap/buffer/buffer.go +123 -0
  151. data/vendor/go.uber.org/zap/buffer/pool.go +49 -0
  152. data/vendor/go.uber.org/zap/checklicense.sh +17 -0
  153. data/vendor/go.uber.org/zap/config.go +264 -0
  154. data/vendor/go.uber.org/zap/doc.go +113 -0
  155. data/vendor/go.uber.org/zap/encoder.go +79 -0
  156. data/vendor/go.uber.org/zap/error.go +80 -0
  157. data/vendor/go.uber.org/zap/field.go +539 -0
  158. data/vendor/go.uber.org/zap/flag.go +39 -0
  159. data/vendor/go.uber.org/zap/glide.yaml +34 -0
  160. data/vendor/go.uber.org/zap/global.go +168 -0
  161. data/vendor/go.uber.org/zap/global_go112.go +26 -0
  162. data/vendor/go.uber.org/zap/global_prego112.go +26 -0
  163. data/vendor/go.uber.org/zap/go.mod +13 -0
  164. data/vendor/go.uber.org/zap/go.sum +56 -0
  165. data/vendor/go.uber.org/zap/http_handler.go +81 -0
  166. data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +31 -0
  167. data/vendor/go.uber.org/zap/internal/color/color.go +44 -0
  168. data/vendor/go.uber.org/zap/internal/exit/exit.go +64 -0
  169. data/vendor/go.uber.org/zap/level.go +132 -0
  170. data/vendor/go.uber.org/zap/logger.go +344 -0
  171. data/vendor/go.uber.org/zap/options.go +140 -0
  172. data/vendor/go.uber.org/zap/sink.go +161 -0
  173. data/vendor/go.uber.org/zap/stacktrace.go +85 -0
  174. data/vendor/go.uber.org/zap/sugar.go +304 -0
  175. data/vendor/go.uber.org/zap/time.go +27 -0
  176. data/vendor/go.uber.org/zap/writer.go +99 -0
  177. data/vendor/go.uber.org/zap/zapcore/console_encoder.go +161 -0
  178. data/vendor/go.uber.org/zap/zapcore/core.go +113 -0
  179. data/vendor/go.uber.org/zap/zapcore/doc.go +24 -0
  180. data/vendor/go.uber.org/zap/zapcore/encoder.go +443 -0
  181. data/vendor/go.uber.org/zap/zapcore/entry.go +264 -0
  182. data/vendor/go.uber.org/zap/zapcore/error.go +115 -0
  183. data/vendor/go.uber.org/zap/zapcore/field.go +227 -0
  184. data/vendor/go.uber.org/zap/zapcore/hook.go +68 -0
  185. data/vendor/go.uber.org/zap/zapcore/increase_level.go +66 -0
  186. data/vendor/go.uber.org/zap/zapcore/json_encoder.go +534 -0
  187. data/vendor/go.uber.org/zap/zapcore/level.go +175 -0
  188. data/vendor/go.uber.org/zap/zapcore/level_strings.go +46 -0
  189. data/vendor/go.uber.org/zap/zapcore/marshaler.go +61 -0
  190. data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +179 -0
  191. data/vendor/go.uber.org/zap/zapcore/sampler.go +208 -0
  192. data/vendor/go.uber.org/zap/zapcore/tee.go +81 -0
  193. data/vendor/go.uber.org/zap/zapcore/write_syncer.go +123 -0
  194. data/vendor/golang.org/x/net/AUTHORS +3 -0
  195. data/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
  196. data/vendor/golang.org/x/net/LICENSE +27 -0
  197. data/vendor/golang.org/x/net/PATENTS +22 -0
  198. data/vendor/golang.org/x/net/context/context.go +56 -0
  199. data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +71 -0
  200. data/vendor/golang.org/x/net/context/go17.go +73 -0
  201. data/vendor/golang.org/x/net/context/go19.go +21 -0
  202. data/vendor/golang.org/x/net/context/pre_go17.go +301 -0
  203. data/vendor/golang.org/x/net/context/pre_go19.go +110 -0
  204. data/vendor/golang.org/x/oauth2/.travis.yml +13 -0
  205. data/vendor/golang.org/x/oauth2/AUTHORS +3 -0
  206. data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +26 -0
  207. data/vendor/golang.org/x/oauth2/CONTRIBUTORS +3 -0
  208. data/vendor/golang.org/x/oauth2/LICENSE +27 -0
  209. data/vendor/golang.org/x/oauth2/README.md +36 -0
  210. data/vendor/golang.org/x/oauth2/go.mod +9 -0
  211. data/vendor/golang.org/x/oauth2/go.sum +361 -0
  212. data/vendor/golang.org/x/oauth2/internal/client_appengine.go +14 -0
  213. data/vendor/golang.org/x/oauth2/internal/doc.go +6 -0
  214. data/vendor/golang.org/x/oauth2/internal/oauth2.go +37 -0
  215. data/vendor/golang.org/x/oauth2/internal/token.go +294 -0
  216. data/vendor/golang.org/x/oauth2/internal/transport.go +33 -0
  217. data/vendor/golang.org/x/oauth2/oauth2.go +381 -0
  218. data/vendor/golang.org/x/oauth2/token.go +178 -0
  219. data/vendor/golang.org/x/oauth2/transport.go +89 -0
  220. data/vendor/google.golang.org/appengine/LICENSE +202 -0
  221. data/vendor/google.golang.org/appengine/internal/api.go +678 -0
  222. data/vendor/google.golang.org/appengine/internal/api_classic.go +169 -0
  223. data/vendor/google.golang.org/appengine/internal/api_common.go +123 -0
  224. data/vendor/google.golang.org/appengine/internal/app_id.go +28 -0
  225. data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +308 -0
  226. data/vendor/google.golang.org/appengine/internal/base/api_base.proto +33 -0
  227. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +4367 -0
  228. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +551 -0
  229. data/vendor/google.golang.org/appengine/internal/identity.go +55 -0
  230. data/vendor/google.golang.org/appengine/internal/identity_classic.go +61 -0
  231. data/vendor/google.golang.org/appengine/internal/identity_flex.go +11 -0
  232. data/vendor/google.golang.org/appengine/internal/identity_vm.go +134 -0
  233. data/vendor/google.golang.org/appengine/internal/internal.go +110 -0
  234. data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +1313 -0
  235. data/vendor/google.golang.org/appengine/internal/log/log_service.proto +150 -0
  236. data/vendor/google.golang.org/appengine/internal/main.go +16 -0
  237. data/vendor/google.golang.org/appengine/internal/main_common.go +7 -0
  238. data/vendor/google.golang.org/appengine/internal/main_vm.go +69 -0
  239. data/vendor/google.golang.org/appengine/internal/metadata.go +60 -0
  240. data/vendor/google.golang.org/appengine/internal/net.go +56 -0
  241. data/vendor/google.golang.org/appengine/internal/regen.sh +40 -0
  242. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +361 -0
  243. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +44 -0
  244. data/vendor/google.golang.org/appengine/internal/transaction.go +115 -0
  245. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +527 -0
  246. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +64 -0
  247. data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +210 -0
  248. data/vendor/google.golang.org/protobuf/AUTHORS +3 -0
  249. data/vendor/google.golang.org/protobuf/CONTRIBUTORS +3 -0
  250. data/vendor/google.golang.org/protobuf/LICENSE +27 -0
  251. data/vendor/google.golang.org/protobuf/PATENTS +22 -0
  252. data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +773 -0
  253. data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +7 -0
  254. data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +371 -0
  255. data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +538 -0
  256. data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +318 -0
  257. data/vendor/google.golang.org/protobuf/internal/descopts/options.go +29 -0
  258. data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +69 -0
  259. data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +213 -0
  260. data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +241 -0
  261. data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +207 -0
  262. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +665 -0
  263. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +190 -0
  264. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +161 -0
  265. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +373 -0
  266. data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +29 -0
  267. data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +265 -0
  268. data/vendor/google.golang.org/protobuf/internal/errors/errors.go +89 -0
  269. data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +39 -0
  270. data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +12 -0
  271. data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +158 -0
  272. data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +631 -0
  273. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +471 -0
  274. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +704 -0
  275. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +450 -0
  276. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +356 -0
  277. data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +107 -0
  278. data/vendor/google.golang.org/protobuf/internal/filetype/build.go +297 -0
  279. data/vendor/google.golang.org/protobuf/internal/flags/flags.go +24 -0
  280. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +9 -0
  281. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +9 -0
  282. data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +34 -0
  283. data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +106 -0
  284. data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +829 -0
  285. data/vendor/google.golang.org/protobuf/internal/genid/doc.go +11 -0
  286. data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +34 -0
  287. data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +19 -0
  288. data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +31 -0
  289. data/vendor/google.golang.org/protobuf/internal/genid/goname.go +25 -0
  290. data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +16 -0
  291. data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +31 -0
  292. data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +116 -0
  293. data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +34 -0
  294. data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +184 -0
  295. data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +13 -0
  296. data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +175 -0
  297. data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +177 -0
  298. data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +141 -0
  299. data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +223 -0
  300. data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +830 -0
  301. data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +5637 -0
  302. data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +388 -0
  303. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +37 -0
  304. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +11 -0
  305. data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +217 -0
  306. data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +123 -0
  307. data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +209 -0
  308. data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +557 -0
  309. data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +17 -0
  310. data/vendor/google.golang.org/protobuf/internal/impl/convert.go +496 -0
  311. data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +141 -0
  312. data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +121 -0
  313. data/vendor/google.golang.org/protobuf/internal/impl/decode.go +276 -0
  314. data/vendor/google.golang.org/protobuf/internal/impl/encode.go +201 -0
  315. data/vendor/google.golang.org/protobuf/internal/impl/enum.go +21 -0
  316. data/vendor/google.golang.org/protobuf/internal/impl/extension.go +156 -0
  317. data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +219 -0
  318. data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +92 -0
  319. data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +176 -0
  320. data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +81 -0
  321. data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +558 -0
  322. data/vendor/google.golang.org/protobuf/internal/impl/merge.go +176 -0
  323. data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +209 -0
  324. data/vendor/google.golang.org/protobuf/internal/impl/message.go +276 -0
  325. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +465 -0
  326. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +543 -0
  327. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +249 -0
  328. data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +178 -0
  329. data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +174 -0
  330. data/vendor/google.golang.org/protobuf/internal/impl/validate.go +576 -0
  331. data/vendor/google.golang.org/protobuf/internal/impl/weak.go +74 -0
  332. data/vendor/google.golang.org/protobuf/internal/order/order.go +89 -0
  333. data/vendor/google.golang.org/protobuf/internal/order/range.go +115 -0
  334. data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +29 -0
  335. data/vendor/google.golang.org/protobuf/internal/set/ints.go +58 -0
  336. data/vendor/google.golang.org/protobuf/internal/strs/strings.go +196 -0
  337. data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +27 -0
  338. data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +94 -0
  339. data/vendor/google.golang.org/protobuf/internal/version/version.go +79 -0
  340. data/vendor/google.golang.org/protobuf/proto/checkinit.go +71 -0
  341. data/vendor/google.golang.org/protobuf/proto/decode.go +278 -0
  342. data/vendor/google.golang.org/protobuf/proto/decode_gen.go +603 -0
  343. data/vendor/google.golang.org/protobuf/proto/doc.go +94 -0
  344. data/vendor/google.golang.org/protobuf/proto/encode.go +319 -0
  345. data/vendor/google.golang.org/protobuf/proto/encode_gen.go +97 -0
  346. data/vendor/google.golang.org/protobuf/proto/equal.go +167 -0
  347. data/vendor/google.golang.org/protobuf/proto/extension.go +92 -0
  348. data/vendor/google.golang.org/protobuf/proto/merge.go +139 -0
  349. data/vendor/google.golang.org/protobuf/proto/messageset.go +93 -0
  350. data/vendor/google.golang.org/protobuf/proto/proto.go +43 -0
  351. data/vendor/google.golang.org/protobuf/proto/proto_methods.go +19 -0
  352. data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +19 -0
  353. data/vendor/google.golang.org/protobuf/proto/reset.go +43 -0
  354. data/vendor/google.golang.org/protobuf/proto/size.go +97 -0
  355. data/vendor/google.golang.org/protobuf/proto/size_gen.go +55 -0
  356. data/vendor/google.golang.org/protobuf/proto/wrappers.go +29 -0
  357. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +276 -0
  358. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +248 -0
  359. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +286 -0
  360. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +374 -0
  361. data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +252 -0
  362. data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +77 -0
  363. data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +504 -0
  364. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +128 -0
  365. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +461 -0
  366. data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +665 -0
  367. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +285 -0
  368. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +59 -0
  369. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +411 -0
  370. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +98 -0
  371. data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +869 -0
  372. data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +15 -0
  373. data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +167 -0
  374. data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +44 -0
  375. data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +56 -0
  376. data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +4039 -0
  377. data/vendor/modules.txt +79 -0
  378. metadata +495 -0
@@ -0,0 +1,140 @@
1
+ // Copyright (c) 2016 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ package zap
22
+
23
+ import (
24
+ "fmt"
25
+
26
+ "go.uber.org/zap/zapcore"
27
+ )
28
+
29
+ // An Option configures a Logger.
30
+ type Option interface {
31
+ apply(*Logger)
32
+ }
33
+
34
+ // optionFunc wraps a func so it satisfies the Option interface.
35
+ type optionFunc func(*Logger)
36
+
37
+ func (f optionFunc) apply(log *Logger) {
38
+ f(log)
39
+ }
40
+
41
+ // WrapCore wraps or replaces the Logger's underlying zapcore.Core.
42
+ func WrapCore(f func(zapcore.Core) zapcore.Core) Option {
43
+ return optionFunc(func(log *Logger) {
44
+ log.core = f(log.core)
45
+ })
46
+ }
47
+
48
+ // Hooks registers functions which will be called each time the Logger writes
49
+ // out an Entry. Repeated use of Hooks is additive.
50
+ //
51
+ // Hooks are useful for simple side effects, like capturing metrics for the
52
+ // number of emitted logs. More complex side effects, including anything that
53
+ // requires access to the Entry's structured fields, should be implemented as
54
+ // a zapcore.Core instead. See zapcore.RegisterHooks for details.
55
+ func Hooks(hooks ...func(zapcore.Entry) error) Option {
56
+ return optionFunc(func(log *Logger) {
57
+ log.core = zapcore.RegisterHooks(log.core, hooks...)
58
+ })
59
+ }
60
+
61
+ // Fields adds fields to the Logger.
62
+ func Fields(fs ...Field) Option {
63
+ return optionFunc(func(log *Logger) {
64
+ log.core = log.core.With(fs)
65
+ })
66
+ }
67
+
68
+ // ErrorOutput sets the destination for errors generated by the Logger. Note
69
+ // that this option only affects internal errors; for sample code that sends
70
+ // error-level logs to a different location from info- and debug-level logs,
71
+ // see the package-level AdvancedConfiguration example.
72
+ //
73
+ // The supplied WriteSyncer must be safe for concurrent use. The Open and
74
+ // zapcore.Lock functions are the simplest ways to protect files with a mutex.
75
+ func ErrorOutput(w zapcore.WriteSyncer) Option {
76
+ return optionFunc(func(log *Logger) {
77
+ log.errorOutput = w
78
+ })
79
+ }
80
+
81
+ // Development puts the logger in development mode, which makes DPanic-level
82
+ // logs panic instead of simply logging an error.
83
+ func Development() Option {
84
+ return optionFunc(func(log *Logger) {
85
+ log.development = true
86
+ })
87
+ }
88
+
89
+ // AddCaller configures the Logger to annotate each message with the filename,
90
+ // line number, and function name of zap's caller. See also WithCaller.
91
+ func AddCaller() Option {
92
+ return WithCaller(true)
93
+ }
94
+
95
+ // WithCaller configures the Logger to annotate each message with the filename,
96
+ // line number, and function name of zap's caller, or not, depending on the
97
+ // value of enabled. This is a generalized form of AddCaller.
98
+ func WithCaller(enabled bool) Option {
99
+ return optionFunc(func(log *Logger) {
100
+ log.addCaller = enabled
101
+ })
102
+ }
103
+
104
+ // AddCallerSkip increases the number of callers skipped by caller annotation
105
+ // (as enabled by the AddCaller option). When building wrappers around the
106
+ // Logger and SugaredLogger, supplying this Option prevents zap from always
107
+ // reporting the wrapper code as the caller.
108
+ func AddCallerSkip(skip int) Option {
109
+ return optionFunc(func(log *Logger) {
110
+ log.callerSkip += skip
111
+ })
112
+ }
113
+
114
+ // AddStacktrace configures the Logger to record a stack trace for all messages at
115
+ // or above a given level.
116
+ func AddStacktrace(lvl zapcore.LevelEnabler) Option {
117
+ return optionFunc(func(log *Logger) {
118
+ log.addStack = lvl
119
+ })
120
+ }
121
+
122
+ // IncreaseLevel increase the level of the logger. It has no effect if
123
+ // the passed in level tries to decrease the level of the logger.
124
+ func IncreaseLevel(lvl zapcore.LevelEnabler) Option {
125
+ return optionFunc(func(log *Logger) {
126
+ core, err := zapcore.NewIncreaseLevelCore(log.core, lvl)
127
+ if err != nil {
128
+ fmt.Fprintf(log.errorOutput, "failed to IncreaseLevel: %v\n", err)
129
+ } else {
130
+ log.core = core
131
+ }
132
+ })
133
+ }
134
+
135
+ // OnFatal sets the action to take on fatal logs.
136
+ func OnFatal(action zapcore.CheckWriteAction) Option {
137
+ return optionFunc(func(log *Logger) {
138
+ log.onFatal = action
139
+ })
140
+ }
@@ -0,0 +1,161 @@
1
+ // Copyright (c) 2016 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ package zap
22
+
23
+ import (
24
+ "errors"
25
+ "fmt"
26
+ "io"
27
+ "net/url"
28
+ "os"
29
+ "strings"
30
+ "sync"
31
+
32
+ "go.uber.org/zap/zapcore"
33
+ )
34
+
35
+ const schemeFile = "file"
36
+
37
+ var (
38
+ _sinkMutex sync.RWMutex
39
+ _sinkFactories map[string]func(*url.URL) (Sink, error) // keyed by scheme
40
+ )
41
+
42
+ func init() {
43
+ resetSinkRegistry()
44
+ }
45
+
46
+ func resetSinkRegistry() {
47
+ _sinkMutex.Lock()
48
+ defer _sinkMutex.Unlock()
49
+
50
+ _sinkFactories = map[string]func(*url.URL) (Sink, error){
51
+ schemeFile: newFileSink,
52
+ }
53
+ }
54
+
55
+ // Sink defines the interface to write to and close logger destinations.
56
+ type Sink interface {
57
+ zapcore.WriteSyncer
58
+ io.Closer
59
+ }
60
+
61
+ type nopCloserSink struct{ zapcore.WriteSyncer }
62
+
63
+ func (nopCloserSink) Close() error { return nil }
64
+
65
+ type errSinkNotFound struct {
66
+ scheme string
67
+ }
68
+
69
+ func (e *errSinkNotFound) Error() string {
70
+ return fmt.Sprintf("no sink found for scheme %q", e.scheme)
71
+ }
72
+
73
+ // RegisterSink registers a user-supplied factory for all sinks with a
74
+ // particular scheme.
75
+ //
76
+ // All schemes must be ASCII, valid under section 3.1 of RFC 3986
77
+ // (https://tools.ietf.org/html/rfc3986#section-3.1), and must not already
78
+ // have a factory registered. Zap automatically registers a factory for the
79
+ // "file" scheme.
80
+ func RegisterSink(scheme string, factory func(*url.URL) (Sink, error)) error {
81
+ _sinkMutex.Lock()
82
+ defer _sinkMutex.Unlock()
83
+
84
+ if scheme == "" {
85
+ return errors.New("can't register a sink factory for empty string")
86
+ }
87
+ normalized, err := normalizeScheme(scheme)
88
+ if err != nil {
89
+ return fmt.Errorf("%q is not a valid scheme: %v", scheme, err)
90
+ }
91
+ if _, ok := _sinkFactories[normalized]; ok {
92
+ return fmt.Errorf("sink factory already registered for scheme %q", normalized)
93
+ }
94
+ _sinkFactories[normalized] = factory
95
+ return nil
96
+ }
97
+
98
+ func newSink(rawURL string) (Sink, error) {
99
+ u, err := url.Parse(rawURL)
100
+ if err != nil {
101
+ return nil, fmt.Errorf("can't parse %q as a URL: %v", rawURL, err)
102
+ }
103
+ if u.Scheme == "" {
104
+ u.Scheme = schemeFile
105
+ }
106
+
107
+ _sinkMutex.RLock()
108
+ factory, ok := _sinkFactories[u.Scheme]
109
+ _sinkMutex.RUnlock()
110
+ if !ok {
111
+ return nil, &errSinkNotFound{u.Scheme}
112
+ }
113
+ return factory(u)
114
+ }
115
+
116
+ func newFileSink(u *url.URL) (Sink, error) {
117
+ if u.User != nil {
118
+ return nil, fmt.Errorf("user and password not allowed with file URLs: got %v", u)
119
+ }
120
+ if u.Fragment != "" {
121
+ return nil, fmt.Errorf("fragments not allowed with file URLs: got %v", u)
122
+ }
123
+ if u.RawQuery != "" {
124
+ return nil, fmt.Errorf("query parameters not allowed with file URLs: got %v", u)
125
+ }
126
+ // Error messages are better if we check hostname and port separately.
127
+ if u.Port() != "" {
128
+ return nil, fmt.Errorf("ports not allowed with file URLs: got %v", u)
129
+ }
130
+ if hn := u.Hostname(); hn != "" && hn != "localhost" {
131
+ return nil, fmt.Errorf("file URLs must leave host empty or use localhost: got %v", u)
132
+ }
133
+ switch u.Path {
134
+ case "stdout":
135
+ return nopCloserSink{os.Stdout}, nil
136
+ case "stderr":
137
+ return nopCloserSink{os.Stderr}, nil
138
+ }
139
+ return os.OpenFile(u.Path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
140
+ }
141
+
142
+ func normalizeScheme(s string) (string, error) {
143
+ // https://tools.ietf.org/html/rfc3986#section-3.1
144
+ s = strings.ToLower(s)
145
+ if first := s[0]; 'a' > first || 'z' < first {
146
+ return "", errors.New("must start with a letter")
147
+ }
148
+ for i := 1; i < len(s); i++ { // iterate over bytes, not runes
149
+ c := s[i]
150
+ switch {
151
+ case 'a' <= c && c <= 'z':
152
+ continue
153
+ case '0' <= c && c <= '9':
154
+ continue
155
+ case c == '.' || c == '+' || c == '-':
156
+ continue
157
+ }
158
+ return "", fmt.Errorf("may not contain %q", c)
159
+ }
160
+ return s, nil
161
+ }
@@ -0,0 +1,85 @@
1
+ // Copyright (c) 2016 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ package zap
22
+
23
+ import (
24
+ "runtime"
25
+ "sync"
26
+
27
+ "go.uber.org/zap/internal/bufferpool"
28
+ )
29
+
30
+ var (
31
+ _stacktracePool = sync.Pool{
32
+ New: func() interface{} {
33
+ return newProgramCounters(64)
34
+ },
35
+ }
36
+ )
37
+
38
+ func takeStacktrace(skip int) string {
39
+ buffer := bufferpool.Get()
40
+ defer buffer.Free()
41
+ programCounters := _stacktracePool.Get().(*programCounters)
42
+ defer _stacktracePool.Put(programCounters)
43
+
44
+ var numFrames int
45
+ for {
46
+ // Skip the call to runtime.Callers and takeStacktrace so that the
47
+ // program counters start at the caller of takeStacktrace.
48
+ numFrames = runtime.Callers(skip+2, programCounters.pcs)
49
+ if numFrames < len(programCounters.pcs) {
50
+ break
51
+ }
52
+ // Don't put the too-short counter slice back into the pool; this lets
53
+ // the pool adjust if we consistently take deep stacktraces.
54
+ programCounters = newProgramCounters(len(programCounters.pcs) * 2)
55
+ }
56
+
57
+ i := 0
58
+ frames := runtime.CallersFrames(programCounters.pcs[:numFrames])
59
+
60
+ // Note: On the last iteration, frames.Next() returns false, with a valid
61
+ // frame, but we ignore this frame. The last frame is a a runtime frame which
62
+ // adds noise, since it's only either runtime.main or runtime.goexit.
63
+ for frame, more := frames.Next(); more; frame, more = frames.Next() {
64
+ if i != 0 {
65
+ buffer.AppendByte('\n')
66
+ }
67
+ i++
68
+ buffer.AppendString(frame.Function)
69
+ buffer.AppendByte('\n')
70
+ buffer.AppendByte('\t')
71
+ buffer.AppendString(frame.File)
72
+ buffer.AppendByte(':')
73
+ buffer.AppendInt(int64(frame.Line))
74
+ }
75
+
76
+ return buffer.String()
77
+ }
78
+
79
+ type programCounters struct {
80
+ pcs []uintptr
81
+ }
82
+
83
+ func newProgramCounters(size int) *programCounters {
84
+ return &programCounters{make([]uintptr, size)}
85
+ }
@@ -0,0 +1,304 @@
1
+ // Copyright (c) 2016 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ package zap
22
+
23
+ import (
24
+ "fmt"
25
+
26
+ "go.uber.org/zap/zapcore"
27
+
28
+ "go.uber.org/multierr"
29
+ )
30
+
31
+ const (
32
+ _oddNumberErrMsg = "Ignored key without a value."
33
+ _nonStringKeyErrMsg = "Ignored key-value pairs with non-string keys."
34
+ )
35
+
36
+ // A SugaredLogger wraps the base Logger functionality in a slower, but less
37
+ // verbose, API. Any Logger can be converted to a SugaredLogger with its Sugar
38
+ // method.
39
+ //
40
+ // Unlike the Logger, the SugaredLogger doesn't insist on structured logging.
41
+ // For each log level, it exposes three methods: one for loosely-typed
42
+ // structured logging, one for println-style formatting, and one for
43
+ // printf-style formatting. For example, SugaredLoggers can produce InfoLevel
44
+ // output with Infow ("info with" structured context), Info, or Infof.
45
+ type SugaredLogger struct {
46
+ base *Logger
47
+ }
48
+
49
+ // Desugar unwraps a SugaredLogger, exposing the original Logger. Desugaring
50
+ // is quite inexpensive, so it's reasonable for a single application to use
51
+ // both Loggers and SugaredLoggers, converting between them on the boundaries
52
+ // of performance-sensitive code.
53
+ func (s *SugaredLogger) Desugar() *Logger {
54
+ base := s.base.clone()
55
+ base.callerSkip -= 2
56
+ return base
57
+ }
58
+
59
+ // Named adds a sub-scope to the logger's name. See Logger.Named for details.
60
+ func (s *SugaredLogger) Named(name string) *SugaredLogger {
61
+ return &SugaredLogger{base: s.base.Named(name)}
62
+ }
63
+
64
+ // With adds a variadic number of fields to the logging context. It accepts a
65
+ // mix of strongly-typed Field objects and loosely-typed key-value pairs. When
66
+ // processing pairs, the first element of the pair is used as the field key
67
+ // and the second as the field value.
68
+ //
69
+ // For example,
70
+ // sugaredLogger.With(
71
+ // "hello", "world",
72
+ // "failure", errors.New("oh no"),
73
+ // Stack(),
74
+ // "count", 42,
75
+ // "user", User{Name: "alice"},
76
+ // )
77
+ // is the equivalent of
78
+ // unsugared.With(
79
+ // String("hello", "world"),
80
+ // String("failure", "oh no"),
81
+ // Stack(),
82
+ // Int("count", 42),
83
+ // Object("user", User{Name: "alice"}),
84
+ // )
85
+ //
86
+ // Note that the keys in key-value pairs should be strings. In development,
87
+ // passing a non-string key panics. In production, the logger is more
88
+ // forgiving: a separate error is logged, but the key-value pair is skipped
89
+ // and execution continues. Passing an orphaned key triggers similar behavior:
90
+ // panics in development and errors in production.
91
+ func (s *SugaredLogger) With(args ...interface{}) *SugaredLogger {
92
+ return &SugaredLogger{base: s.base.With(s.sweetenFields(args)...)}
93
+ }
94
+
95
+ // Debug uses fmt.Sprint to construct and log a message.
96
+ func (s *SugaredLogger) Debug(args ...interface{}) {
97
+ s.log(DebugLevel, "", args, nil)
98
+ }
99
+
100
+ // Info uses fmt.Sprint to construct and log a message.
101
+ func (s *SugaredLogger) Info(args ...interface{}) {
102
+ s.log(InfoLevel, "", args, nil)
103
+ }
104
+
105
+ // Warn uses fmt.Sprint to construct and log a message.
106
+ func (s *SugaredLogger) Warn(args ...interface{}) {
107
+ s.log(WarnLevel, "", args, nil)
108
+ }
109
+
110
+ // Error uses fmt.Sprint to construct and log a message.
111
+ func (s *SugaredLogger) Error(args ...interface{}) {
112
+ s.log(ErrorLevel, "", args, nil)
113
+ }
114
+
115
+ // DPanic uses fmt.Sprint to construct and log a message. In development, the
116
+ // logger then panics. (See DPanicLevel for details.)
117
+ func (s *SugaredLogger) DPanic(args ...interface{}) {
118
+ s.log(DPanicLevel, "", args, nil)
119
+ }
120
+
121
+ // Panic uses fmt.Sprint to construct and log a message, then panics.
122
+ func (s *SugaredLogger) Panic(args ...interface{}) {
123
+ s.log(PanicLevel, "", args, nil)
124
+ }
125
+
126
+ // Fatal uses fmt.Sprint to construct and log a message, then calls os.Exit.
127
+ func (s *SugaredLogger) Fatal(args ...interface{}) {
128
+ s.log(FatalLevel, "", args, nil)
129
+ }
130
+
131
+ // Debugf uses fmt.Sprintf to log a templated message.
132
+ func (s *SugaredLogger) Debugf(template string, args ...interface{}) {
133
+ s.log(DebugLevel, template, args, nil)
134
+ }
135
+
136
+ // Infof uses fmt.Sprintf to log a templated message.
137
+ func (s *SugaredLogger) Infof(template string, args ...interface{}) {
138
+ s.log(InfoLevel, template, args, nil)
139
+ }
140
+
141
+ // Warnf uses fmt.Sprintf to log a templated message.
142
+ func (s *SugaredLogger) Warnf(template string, args ...interface{}) {
143
+ s.log(WarnLevel, template, args, nil)
144
+ }
145
+
146
+ // Errorf uses fmt.Sprintf to log a templated message.
147
+ func (s *SugaredLogger) Errorf(template string, args ...interface{}) {
148
+ s.log(ErrorLevel, template, args, nil)
149
+ }
150
+
151
+ // DPanicf uses fmt.Sprintf to log a templated message. In development, the
152
+ // logger then panics. (See DPanicLevel for details.)
153
+ func (s *SugaredLogger) DPanicf(template string, args ...interface{}) {
154
+ s.log(DPanicLevel, template, args, nil)
155
+ }
156
+
157
+ // Panicf uses fmt.Sprintf to log a templated message, then panics.
158
+ func (s *SugaredLogger) Panicf(template string, args ...interface{}) {
159
+ s.log(PanicLevel, template, args, nil)
160
+ }
161
+
162
+ // Fatalf uses fmt.Sprintf to log a templated message, then calls os.Exit.
163
+ func (s *SugaredLogger) Fatalf(template string, args ...interface{}) {
164
+ s.log(FatalLevel, template, args, nil)
165
+ }
166
+
167
+ // Debugw logs a message with some additional context. The variadic key-value
168
+ // pairs are treated as they are in With.
169
+ //
170
+ // When debug-level logging is disabled, this is much faster than
171
+ // s.With(keysAndValues).Debug(msg)
172
+ func (s *SugaredLogger) Debugw(msg string, keysAndValues ...interface{}) {
173
+ s.log(DebugLevel, msg, nil, keysAndValues)
174
+ }
175
+
176
+ // Infow logs a message with some additional context. The variadic key-value
177
+ // pairs are treated as they are in With.
178
+ func (s *SugaredLogger) Infow(msg string, keysAndValues ...interface{}) {
179
+ s.log(InfoLevel, msg, nil, keysAndValues)
180
+ }
181
+
182
+ // Warnw logs a message with some additional context. The variadic key-value
183
+ // pairs are treated as they are in With.
184
+ func (s *SugaredLogger) Warnw(msg string, keysAndValues ...interface{}) {
185
+ s.log(WarnLevel, msg, nil, keysAndValues)
186
+ }
187
+
188
+ // Errorw logs a message with some additional context. The variadic key-value
189
+ // pairs are treated as they are in With.
190
+ func (s *SugaredLogger) Errorw(msg string, keysAndValues ...interface{}) {
191
+ s.log(ErrorLevel, msg, nil, keysAndValues)
192
+ }
193
+
194
+ // DPanicw logs a message with some additional context. In development, the
195
+ // logger then panics. (See DPanicLevel for details.) The variadic key-value
196
+ // pairs are treated as they are in With.
197
+ func (s *SugaredLogger) DPanicw(msg string, keysAndValues ...interface{}) {
198
+ s.log(DPanicLevel, msg, nil, keysAndValues)
199
+ }
200
+
201
+ // Panicw logs a message with some additional context, then panics. The
202
+ // variadic key-value pairs are treated as they are in With.
203
+ func (s *SugaredLogger) Panicw(msg string, keysAndValues ...interface{}) {
204
+ s.log(PanicLevel, msg, nil, keysAndValues)
205
+ }
206
+
207
+ // Fatalw logs a message with some additional context, then calls os.Exit. The
208
+ // variadic key-value pairs are treated as they are in With.
209
+ func (s *SugaredLogger) Fatalw(msg string, keysAndValues ...interface{}) {
210
+ s.log(FatalLevel, msg, nil, keysAndValues)
211
+ }
212
+
213
+ // Sync flushes any buffered log entries.
214
+ func (s *SugaredLogger) Sync() error {
215
+ return s.base.Sync()
216
+ }
217
+
218
+ func (s *SugaredLogger) log(lvl zapcore.Level, template string, fmtArgs []interface{}, context []interface{}) {
219
+ // If logging at this level is completely disabled, skip the overhead of
220
+ // string formatting.
221
+ if lvl < DPanicLevel && !s.base.Core().Enabled(lvl) {
222
+ return
223
+ }
224
+
225
+ // Format with Sprint, Sprintf, or neither.
226
+ msg := template
227
+ if msg == "" && len(fmtArgs) > 0 {
228
+ msg = fmt.Sprint(fmtArgs...)
229
+ } else if msg != "" && len(fmtArgs) > 0 {
230
+ msg = fmt.Sprintf(template, fmtArgs...)
231
+ }
232
+
233
+ if ce := s.base.Check(lvl, msg); ce != nil {
234
+ ce.Write(s.sweetenFields(context)...)
235
+ }
236
+ }
237
+
238
+ func (s *SugaredLogger) sweetenFields(args []interface{}) []Field {
239
+ if len(args) == 0 {
240
+ return nil
241
+ }
242
+
243
+ // Allocate enough space for the worst case; if users pass only structured
244
+ // fields, we shouldn't penalize them with extra allocations.
245
+ fields := make([]Field, 0, len(args))
246
+ var invalid invalidPairs
247
+
248
+ for i := 0; i < len(args); {
249
+ // This is a strongly-typed field. Consume it and move on.
250
+ if f, ok := args[i].(Field); ok {
251
+ fields = append(fields, f)
252
+ i++
253
+ continue
254
+ }
255
+
256
+ // Make sure this element isn't a dangling key.
257
+ if i == len(args)-1 {
258
+ s.base.DPanic(_oddNumberErrMsg, Any("ignored", args[i]))
259
+ break
260
+ }
261
+
262
+ // Consume this value and the next, treating them as a key-value pair. If the
263
+ // key isn't a string, add this pair to the slice of invalid pairs.
264
+ key, val := args[i], args[i+1]
265
+ if keyStr, ok := key.(string); !ok {
266
+ // Subsequent errors are likely, so allocate once up front.
267
+ if cap(invalid) == 0 {
268
+ invalid = make(invalidPairs, 0, len(args)/2)
269
+ }
270
+ invalid = append(invalid, invalidPair{i, key, val})
271
+ } else {
272
+ fields = append(fields, Any(keyStr, val))
273
+ }
274
+ i += 2
275
+ }
276
+
277
+ // If we encountered any invalid key-value pairs, log an error.
278
+ if len(invalid) > 0 {
279
+ s.base.DPanic(_nonStringKeyErrMsg, Array("invalid", invalid))
280
+ }
281
+ return fields
282
+ }
283
+
284
+ type invalidPair struct {
285
+ position int
286
+ key, value interface{}
287
+ }
288
+
289
+ func (p invalidPair) MarshalLogObject(enc zapcore.ObjectEncoder) error {
290
+ enc.AddInt64("position", int64(p.position))
291
+ Any("key", p.key).AddTo(enc)
292
+ Any("value", p.value).AddTo(enc)
293
+ return nil
294
+ }
295
+
296
+ type invalidPairs []invalidPair
297
+
298
+ func (ps invalidPairs) MarshalLogArray(enc zapcore.ArrayEncoder) error {
299
+ var err error
300
+ for i := range ps {
301
+ err = multierr.Append(err, enc.AppendObject(ps[i]))
302
+ }
303
+ return err
304
+ }