planetscale 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }