updated dependencies
This commit is contained in:
parent
2c822aeade
commit
d952775922
21
go.mod
21
go.mod
@ -3,7 +3,7 @@ module git.paulbsd.com/paulbsd/pki
|
|||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/go-acme/lego/v4 v4.9.0
|
github.com/go-acme/lego/v4 v4.9.1
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/google/go-cmp v0.5.5 // indirect
|
github.com/google/go-cmp v0.5.5 // indirect
|
||||||
github.com/labstack/echo/v4 v4.9.1
|
github.com/labstack/echo/v4 v4.9.1
|
||||||
@ -11,19 +11,19 @@ require (
|
|||||||
github.com/miekg/dns v1.1.50 // indirect
|
github.com/miekg/dns v1.1.50 // indirect
|
||||||
github.com/onsi/ginkgo v1.16.0 // indirect
|
github.com/onsi/ginkgo v1.16.0 // indirect
|
||||||
github.com/onsi/gomega v1.11.0 // indirect
|
github.com/onsi/gomega v1.11.0 // indirect
|
||||||
golang.org/x/crypto v0.1.0 // indirect
|
golang.org/x/crypto v0.4.0 // indirect
|
||||||
golang.org/x/net v0.1.0 // indirect
|
golang.org/x/net v0.4.0 // indirect
|
||||||
golang.org/x/sys v0.1.0 // indirect
|
golang.org/x/sys v0.3.0 // indirect
|
||||||
golang.org/x/text v0.4.0 // indirect
|
golang.org/x/text v0.5.0 // indirect
|
||||||
golang.org/x/time v0.1.0 // indirect
|
golang.org/x/time v0.3.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0
|
gopkg.in/ini.v1 v1.67.0
|
||||||
xorm.io/builder v0.3.12 // indirect
|
xorm.io/builder v0.3.12 // indirect
|
||||||
xorm.io/xorm v1.3.2
|
xorm.io/xorm v1.3.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
|
github.com/cenkalti/backoff/v4 v4.2.0 // indirect
|
||||||
github.com/goccy/go-json v0.9.11 // indirect
|
github.com/goccy/go-json v0.10.0 // indirect
|
||||||
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/labstack/gommon v0.4.0 // indirect
|
github.com/labstack/gommon v0.4.0 // indirect
|
||||||
@ -35,8 +35,7 @@ require (
|
|||||||
github.com/syndtr/goleveldb v1.0.0 // indirect
|
github.com/syndtr/goleveldb v1.0.0 // indirect
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||||
golang.org/x/mod v0.6.0 // indirect
|
golang.org/x/mod v0.7.0 // indirect
|
||||||
golang.org/x/tools v0.2.0 // indirect
|
golang.org/x/tools v0.4.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
|
||||||
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
||||||
)
|
)
|
||||||
|
86
go.sum
86
go.sum
@ -28,10 +28,9 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
|
|||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||||
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
|
|
||||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||||
github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
|
github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
|
||||||
github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
||||||
@ -67,8 +66,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
|||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
|
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/go-acme/lego/v4 v4.9.0 h1:8Hjj44IqRS7cigshMyFQ+0pIZvwgkG/+9A0UnNh7G8A=
|
github.com/go-acme/lego/v4 v4.9.1 h1:n9Z5MQwANeGSQKlVE3bEh9SDvAySK9oVYOKCGCESqQE=
|
||||||
github.com/go-acme/lego/v4 v4.9.0/go.mod h1:g3JRUyWS3L/VObpp4bCxzJftKyf/Wba8QrSSnoiqjg4=
|
github.com/go-acme/lego/v4 v4.9.1/go.mod h1:g3JRUyWS3L/VObpp4bCxzJftKyf/Wba8QrSSnoiqjg4=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
||||||
@ -80,12 +79,9 @@ github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfC
|
|||||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||||
github.com/goccy/go-json v0.7.4/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
|
||||||
github.com/goccy/go-json v0.7.8 h1:CvMH7LotYymYuLGEohBM1lTZWX4g6jzWUUl2aLFuBoE=
|
|
||||||
github.com/goccy/go-json v0.7.8/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
|
||||||
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk=
|
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
|
||||||
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
||||||
@ -125,6 +121,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
@ -210,7 +207,6 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22
|
|||||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
@ -244,7 +240,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
|
|||||||
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs=
|
|
||||||
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
|
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
@ -259,9 +254,6 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
|
|||||||
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
|
||||||
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
|
|
||||||
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
|
||||||
github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA=
|
github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA=
|
||||||
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
@ -315,8 +307,6 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS
|
|||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
||||||
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
||||||
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
||||||
github.com/ovh/go-ovh v1.1.0 h1:bHXZmw8nTgZin4Nv7JuaLs0KG5x54EQR7migYTd1zrk=
|
|
||||||
github.com/ovh/go-ovh v1.1.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA=
|
|
||||||
github.com/ovh/go-ovh v1.3.0 h1:mvZaddk4E4kLcXhzb+cxBsMPYp2pHqiQpWYkInsuZPQ=
|
github.com/ovh/go-ovh v1.3.0 h1:mvZaddk4E4kLcXhzb+cxBsMPYp2pHqiQpWYkInsuZPQ=
|
||||||
github.com/ovh/go-ovh v1.3.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA=
|
github.com/ovh/go-ovh v1.3.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA=
|
||||||
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
|
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
|
||||||
@ -392,7 +382,6 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb
|
|||||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4=
|
|
||||||
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
||||||
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
|
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
|
||||||
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
||||||
@ -432,10 +421,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
|
golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8=
|
||||||
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80=
|
||||||
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
|
|
||||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
@ -445,10 +432,9 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl
|
|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
|
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=
|
golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
|
||||||
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -471,10 +457,8 @@ golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwY
|
|||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
|
golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
|
||||||
golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=
|
|
||||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -484,8 +468,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -515,7 +499,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@ -525,10 +508,9 @@ golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
|
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -536,16 +518,12 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
|||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
|
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
|
||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=
|
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
||||||
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA=
|
|
||||||
golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@ -564,19 +542,15 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
|||||||
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 h1:BonxutuHCTL0rBDnZlKjpGIQFTjyUVTexFOdWkB6Fg0=
|
|
||||||
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=
|
golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4=
|
||||||
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
|
||||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
|
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
@ -610,8 +584,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
|
|||||||
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||||
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
|
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
|
||||||
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
|
|
||||||
gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
|
||||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
@ -636,7 +608,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
||||||
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||||
modernc.org/cc/v3 v3.33.6 h1:r63dgSzVzRxUpAJFPQWHy1QeZeY1ydNENUDaBx1GqYc=
|
|
||||||
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
@ -652,7 +623,6 @@ modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g
|
|||||||
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U=
|
modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U=
|
||||||
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
modernc.org/ccgo/v3 v3.9.5 h1:dEuUSf8WN51rDkprFuAqjfchKEzN0WttP/Py3enBwjk=
|
|
||||||
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
|
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
|
||||||
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
|
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
|
||||||
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
|
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
|
||||||
@ -691,9 +661,7 @@ modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8=
|
|||||||
modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
|
modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
|
||||||
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
||||||
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
||||||
modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
|
||||||
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
||||||
modernc.org/libc v1.9.11 h1:QUxZMs48Ahg2F7SN41aERvMfGLY2HU/ADnB9DC4Yts8=
|
|
||||||
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
|
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
|
||||||
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
|
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
|
||||||
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
|
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
|
||||||
@ -731,36 +699,26 @@ modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE=
|
|||||||
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
|
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
|
||||||
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/mathutil v1.4.0 h1:GCjoRaBew8ECCKINQA2nYjzvufFW9YiEuuB+rQ9bn2E=
|
|
||||||
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8=
|
modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8=
|
||||||
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/memory v1.0.4 h1:utMBrFcpnQDdNsmM6asmyH/FM9TqLPS7XF7otpJmrwM=
|
|
||||||
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
|
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
|
||||||
modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14=
|
modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14=
|
||||||
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
|
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
|
||||||
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
|
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
|
||||||
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||||
modernc.org/sqlite v1.11.2 h1:ShWQpeD3ag/bmx6TqidBlIWonWmQaSQKls3aenCbt+w=
|
|
||||||
modernc.org/sqlite v1.11.2/go.mod h1:+mhs/P1ONd+6G7hcAs6irwDi/bjTQ7nLW6LHRBsEa3A=
|
|
||||||
modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE=
|
modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE=
|
||||||
modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8=
|
modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8=
|
||||||
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
|
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
|
||||||
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
||||||
modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI=
|
|
||||||
modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY=
|
modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY=
|
||||||
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
|
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
|
||||||
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||||
modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=
|
|
||||||
modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY=
|
modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY=
|
||||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||||
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
||||||
xorm.io/builder v0.3.9 h1:Sd65/LdWyO7LR8+Cbd+e7mm3sK/7U9k0jS3999IDHMc=
|
|
||||||
xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
|
||||||
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
||||||
xorm.io/builder v0.3.12 h1:ASZYX7fQmy+o8UJdhlLHSW57JDOkM8DNhcAF5d0LiJM=
|
xorm.io/builder v0.3.12 h1:ASZYX7fQmy+o8UJdhlLHSW57JDOkM8DNhcAF5d0LiJM=
|
||||||
xorm.io/builder v0.3.12/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
xorm.io/builder v0.3.12/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
||||||
xorm.io/xorm v1.2.3 h1:ZsVtQEsfkA31bbe8lhrP5cZKUjrxXQQO5tsr7Tf/0eo=
|
|
||||||
xorm.io/xorm v1.2.3/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0=
|
|
||||||
xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM=
|
xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM=
|
||||||
xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw=
|
xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw=
|
||||||
|
10
vendor/github.com/cenkalti/backoff/v4/.travis.yml
generated
vendored
10
vendor/github.com/cenkalti/backoff/v4/.travis.yml
generated
vendored
@ -1,10 +0,0 @@
|
|||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.13
|
|
||||||
- 1.x
|
|
||||||
- tip
|
|
||||||
before_install:
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
script:
|
|
||||||
- $HOME/gopath/bin/goveralls -service=travis-ci
|
|
50
vendor/github.com/cenkalti/backoff/v4/retry.go
generated
vendored
50
vendor/github.com/cenkalti/backoff/v4/retry.go
generated
vendored
@ -5,10 +5,20 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// An OperationWithData is executing by RetryWithData() or RetryNotifyWithData().
|
||||||
|
// The operation will be retried using a backoff policy if it returns an error.
|
||||||
|
type OperationWithData[T any] func() (T, error)
|
||||||
|
|
||||||
// An Operation is executing by Retry() or RetryNotify().
|
// An Operation is executing by Retry() or RetryNotify().
|
||||||
// The operation will be retried using a backoff policy if it returns an error.
|
// The operation will be retried using a backoff policy if it returns an error.
|
||||||
type Operation func() error
|
type Operation func() error
|
||||||
|
|
||||||
|
func (o Operation) withEmptyData() OperationWithData[struct{}] {
|
||||||
|
return func() (struct{}, error) {
|
||||||
|
return struct{}{}, o()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Notify is a notify-on-error function. It receives an operation error and
|
// Notify is a notify-on-error function. It receives an operation error and
|
||||||
// backoff delay if the operation failed (with an error).
|
// backoff delay if the operation failed (with an error).
|
||||||
//
|
//
|
||||||
@ -28,18 +38,41 @@ func Retry(o Operation, b BackOff) error {
|
|||||||
return RetryNotify(o, b, nil)
|
return RetryNotify(o, b, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RetryWithData is like Retry but returns data in the response too.
|
||||||
|
func RetryWithData[T any](o OperationWithData[T], b BackOff) (T, error) {
|
||||||
|
return RetryNotifyWithData(o, b, nil)
|
||||||
|
}
|
||||||
|
|
||||||
// RetryNotify calls notify function with the error and wait duration
|
// RetryNotify calls notify function with the error and wait duration
|
||||||
// for each failed attempt before sleep.
|
// for each failed attempt before sleep.
|
||||||
func RetryNotify(operation Operation, b BackOff, notify Notify) error {
|
func RetryNotify(operation Operation, b BackOff, notify Notify) error {
|
||||||
return RetryNotifyWithTimer(operation, b, notify, nil)
|
return RetryNotifyWithTimer(operation, b, notify, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RetryNotifyWithData is like RetryNotify but returns data in the response too.
|
||||||
|
func RetryNotifyWithData[T any](operation OperationWithData[T], b BackOff, notify Notify) (T, error) {
|
||||||
|
return doRetryNotify(operation, b, notify, nil)
|
||||||
|
}
|
||||||
|
|
||||||
// RetryNotifyWithTimer calls notify function with the error and wait duration using the given Timer
|
// RetryNotifyWithTimer calls notify function with the error and wait duration using the given Timer
|
||||||
// for each failed attempt before sleep.
|
// for each failed attempt before sleep.
|
||||||
// A default timer that uses system timer is used when nil is passed.
|
// A default timer that uses system timer is used when nil is passed.
|
||||||
func RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer) error {
|
func RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer) error {
|
||||||
var err error
|
_, err := doRetryNotify(operation.withEmptyData(), b, notify, t)
|
||||||
var next time.Duration
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// RetryNotifyWithTimerAndData is like RetryNotifyWithTimer but returns data in the response too.
|
||||||
|
func RetryNotifyWithTimerAndData[T any](operation OperationWithData[T], b BackOff, notify Notify, t Timer) (T, error) {
|
||||||
|
return doRetryNotify(operation, b, notify, t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func doRetryNotify[T any](operation OperationWithData[T], b BackOff, notify Notify, t Timer) (T, error) {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
next time.Duration
|
||||||
|
res T
|
||||||
|
)
|
||||||
if t == nil {
|
if t == nil {
|
||||||
t = &defaultTimer{}
|
t = &defaultTimer{}
|
||||||
}
|
}
|
||||||
@ -52,21 +85,22 @@ func RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer
|
|||||||
|
|
||||||
b.Reset()
|
b.Reset()
|
||||||
for {
|
for {
|
||||||
if err = operation(); err == nil {
|
res, err = operation()
|
||||||
return nil
|
if err == nil {
|
||||||
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var permanent *PermanentError
|
var permanent *PermanentError
|
||||||
if errors.As(err, &permanent) {
|
if errors.As(err, &permanent) {
|
||||||
return permanent.Err
|
return res, permanent.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
if next = b.NextBackOff(); next == Stop {
|
if next = b.NextBackOff(); next == Stop {
|
||||||
if cerr := ctx.Err(); cerr != nil {
|
if cerr := ctx.Err(); cerr != nil {
|
||||||
return cerr
|
return res, cerr
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if notify != nil {
|
if notify != nil {
|
||||||
@ -77,7 +111,7 @@ func RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer
|
|||||||
|
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return ctx.Err()
|
return res, ctx.Err()
|
||||||
case <-t.C():
|
case <-t.C():
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/go-acme/lego/v4/acme/api/internal/sender/useragent.go
generated
vendored
2
vendor/github.com/go-acme/lego/v4/acme/api/internal/sender/useragent.go
generated
vendored
@ -5,7 +5,7 @@ package sender
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// ourUserAgent is the User-Agent of this underlying library package.
|
// ourUserAgent is the User-Agent of this underlying library package.
|
||||||
ourUserAgent = "xenolf-acme/4.9.0"
|
ourUserAgent = "xenolf-acme/4.9.1"
|
||||||
|
|
||||||
// ourUserAgentComment is part of the UA comment linked to the version status of this underlying library package.
|
// ourUserAgentComment is part of the UA comment linked to the version status of this underlying library package.
|
||||||
// values: detach|release
|
// values: detach|release
|
||||||
|
18
vendor/github.com/go-acme/lego/v4/challenge/dns01/dns_challenge.go
generated
vendored
18
vendor/github.com/go-acme/lego/v4/challenge/dns01/dns_challenge.go
generated
vendored
@ -194,14 +194,20 @@ func getChallengeFqdn(domain string) string {
|
|||||||
// Keep following CNAMEs
|
// Keep following CNAMEs
|
||||||
r, err := dnsQuery(fqdn, dns.TypeCNAME, recursiveNameservers, true)
|
r, err := dnsQuery(fqdn, dns.TypeCNAME, recursiveNameservers, true)
|
||||||
|
|
||||||
// Check if the domain has CNAME then use that
|
if err != nil || r.Rcode != dns.RcodeSuccess {
|
||||||
if err == nil && r.Rcode == dns.RcodeSuccess {
|
// No more CNAME records to follow, exit
|
||||||
fqdn = updateDomainWithCName(r, fqdn)
|
break
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// No more CNAME records to follow, exit
|
// Check if the domain has CNAME then use that
|
||||||
break
|
cname := updateDomainWithCName(r, fqdn)
|
||||||
|
if cname == fqdn {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Found CNAME entry for %q: %q", fqdn, cname)
|
||||||
|
|
||||||
|
fqdn = cname
|
||||||
}
|
}
|
||||||
|
|
||||||
return fqdn
|
return fqdn
|
||||||
|
4
vendor/github.com/goccy/go-json/Makefile
generated
vendored
4
vendor/github.com/goccy/go-json/Makefile
generated
vendored
@ -22,7 +22,7 @@ cover-html: cover
|
|||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint: golangci-lint
|
lint: golangci-lint
|
||||||
golangci-lint run
|
$(BIN_DIR)/golangci-lint run
|
||||||
|
|
||||||
golangci-lint: | $(BIN_DIR)
|
golangci-lint: | $(BIN_DIR)
|
||||||
@{ \
|
@{ \
|
||||||
@ -30,7 +30,7 @@ golangci-lint: | $(BIN_DIR)
|
|||||||
GOLANGCI_LINT_TMP_DIR=$$(mktemp -d); \
|
GOLANGCI_LINT_TMP_DIR=$$(mktemp -d); \
|
||||||
cd $$GOLANGCI_LINT_TMP_DIR; \
|
cd $$GOLANGCI_LINT_TMP_DIR; \
|
||||||
go mod init tmp; \
|
go mod init tmp; \
|
||||||
GOBIN=$(BIN_DIR) go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.36.0; \
|
GOBIN=$(BIN_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.48.0; \
|
||||||
rm -rf $$GOLANGCI_LINT_TMP_DIR; \
|
rm -rf $$GOLANGCI_LINT_TMP_DIR; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/github.com/goccy/go-json/README.md
generated
vendored
2
vendor/github.com/goccy/go-json/README.md
generated
vendored
@ -184,7 +184,7 @@ func Marshal(v interface{}) ([]byte, error) {
|
|||||||
`json.Marshal` and `json.Unmarshal` receive `interface{}` value and they perform type determination dynamically to process.
|
`json.Marshal` and `json.Unmarshal` receive `interface{}` value and they perform type determination dynamically to process.
|
||||||
In normal case, you need to use the `reflect` library to determine the type dynamically, but since `reflect.Type` is defined as `interface`, when you call the method of `reflect.Type`, The reflect's argument is escaped.
|
In normal case, you need to use the `reflect` library to determine the type dynamically, but since `reflect.Type` is defined as `interface`, when you call the method of `reflect.Type`, The reflect's argument is escaped.
|
||||||
|
|
||||||
Therefore, the arguments for `Marshal` and `Unmarshal` are always escape to the heap.
|
Therefore, the arguments for `Marshal` and `Unmarshal` are always escaped to the heap.
|
||||||
However, `go-json` can use the feature of `reflect.Type` while avoiding escaping.
|
However, `go-json` can use the feature of `reflect.Type` while avoiding escaping.
|
||||||
|
|
||||||
`reflect.Type` is defined as `interface`, but in reality `reflect.Type` is implemented only by the structure `rtype` defined in the `reflect` package.
|
`reflect.Type` is defined as `interface`, but in reality `reflect.Type` is implemented only by the structure `rtype` defined in the `reflect` package.
|
||||||
|
31
vendor/github.com/goccy/go-json/decode.go
generated
vendored
31
vendor/github.com/goccy/go-json/decode.go
generated
vendored
@ -83,6 +83,37 @@ func unmarshalContext(ctx context.Context, data []byte, v interface{}, optFuncs
|
|||||||
return validateEndBuf(src, cursor)
|
return validateEndBuf(src, cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
pathDecoder = decoder.NewPathDecoder()
|
||||||
|
)
|
||||||
|
|
||||||
|
func extractFromPath(path *Path, data []byte, optFuncs ...DecodeOptionFunc) ([][]byte, error) {
|
||||||
|
if path.path.RootSelectorOnly {
|
||||||
|
return [][]byte{data}, nil
|
||||||
|
}
|
||||||
|
src := make([]byte, len(data)+1) // append nul byte to the end
|
||||||
|
copy(src, data)
|
||||||
|
|
||||||
|
ctx := decoder.TakeRuntimeContext()
|
||||||
|
ctx.Buf = src
|
||||||
|
ctx.Option.Flags = 0
|
||||||
|
ctx.Option.Flags |= decoder.PathOption
|
||||||
|
ctx.Option.Path = path.path
|
||||||
|
for _, optFunc := range optFuncs {
|
||||||
|
optFunc(ctx.Option)
|
||||||
|
}
|
||||||
|
paths, cursor, err := pathDecoder.DecodePath(ctx, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
decoder.ReleaseRuntimeContext(ctx)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
decoder.ReleaseRuntimeContext(ctx)
|
||||||
|
if err := validateEndBuf(src, cursor); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return paths, nil
|
||||||
|
}
|
||||||
|
|
||||||
func unmarshalNoEscape(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {
|
func unmarshalNoEscape(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {
|
||||||
src := make([]byte, len(data)+1) // append nul byte to the end
|
src := make([]byte, len(data)+1) // append nul byte to the end
|
||||||
copy(src, data)
|
copy(src, data)
|
||||||
|
2
vendor/github.com/goccy/go-json/error.go
generated
vendored
2
vendor/github.com/goccy/go-json/error.go
generated
vendored
@ -37,3 +37,5 @@ type UnmarshalTypeError = errors.UnmarshalTypeError
|
|||||||
type UnsupportedTypeError = errors.UnsupportedTypeError
|
type UnsupportedTypeError = errors.UnsupportedTypeError
|
||||||
|
|
||||||
type UnsupportedValueError = errors.UnsupportedValueError
|
type UnsupportedValueError = errors.UnsupportedValueError
|
||||||
|
|
||||||
|
type PathError = errors.PathError
|
||||||
|
4
vendor/github.com/goccy/go-json/internal/decoder/anonymous_field.go
generated
vendored
4
vendor/github.com/goccy/go-json/internal/decoder/anonymous_field.go
generated
vendored
@ -35,3 +35,7 @@ func (d *anonymousFieldDecoder) Decode(ctx *RuntimeContext, cursor, depth int64,
|
|||||||
p = *(*unsafe.Pointer)(p)
|
p = *(*unsafe.Pointer)(p)
|
||||||
return d.dec.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+d.offset))
|
return d.dec.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+d.offset))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *anonymousFieldDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return d.dec.DecodePath(ctx, cursor, depth)
|
||||||
|
}
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/array.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/array.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package decoder
|
package decoder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/errors"
|
"github.com/goccy/go-json/internal/errors"
|
||||||
@ -167,3 +168,7 @@ func (d *arrayDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *arrayDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: array decoder does not support decode path")
|
||||||
|
}
|
||||||
|
438
vendor/github.com/goccy/go-json/internal/decoder/assign.go
generated
vendored
Normal file
438
vendor/github.com/goccy/go-json/internal/decoder/assign.go
generated
vendored
Normal file
@ -0,0 +1,438 @@
|
|||||||
|
package decoder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
nilValue = reflect.ValueOf(nil)
|
||||||
|
)
|
||||||
|
|
||||||
|
func AssignValue(src, dst reflect.Value) error {
|
||||||
|
if dst.Type().Kind() != reflect.Ptr {
|
||||||
|
return fmt.Errorf("invalid dst type. required pointer type: %T", dst.Type())
|
||||||
|
}
|
||||||
|
casted, err := castValue(dst.Elem().Type(), src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
dst.Elem().Set(casted)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func castValue(t reflect.Type, v reflect.Value) (reflect.Value, error) {
|
||||||
|
switch t.Kind() {
|
||||||
|
case reflect.Int:
|
||||||
|
vv, err := castInt(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(int(vv.Int())), nil
|
||||||
|
case reflect.Int8:
|
||||||
|
vv, err := castInt(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(int8(vv.Int())), nil
|
||||||
|
case reflect.Int16:
|
||||||
|
vv, err := castInt(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(int16(vv.Int())), nil
|
||||||
|
case reflect.Int32:
|
||||||
|
vv, err := castInt(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(int32(vv.Int())), nil
|
||||||
|
case reflect.Int64:
|
||||||
|
return castInt(v)
|
||||||
|
case reflect.Uint:
|
||||||
|
vv, err := castUint(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(uint(vv.Uint())), nil
|
||||||
|
case reflect.Uint8:
|
||||||
|
vv, err := castUint(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(uint8(vv.Uint())), nil
|
||||||
|
case reflect.Uint16:
|
||||||
|
vv, err := castUint(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(uint16(vv.Uint())), nil
|
||||||
|
case reflect.Uint32:
|
||||||
|
vv, err := castUint(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(uint32(vv.Uint())), nil
|
||||||
|
case reflect.Uint64:
|
||||||
|
return castUint(v)
|
||||||
|
case reflect.Uintptr:
|
||||||
|
vv, err := castUint(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(uintptr(vv.Uint())), nil
|
||||||
|
case reflect.String:
|
||||||
|
return castString(v)
|
||||||
|
case reflect.Bool:
|
||||||
|
return castBool(v)
|
||||||
|
case reflect.Float32:
|
||||||
|
vv, err := castFloat(v)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(float32(vv.Float())), nil
|
||||||
|
case reflect.Float64:
|
||||||
|
return castFloat(v)
|
||||||
|
case reflect.Array:
|
||||||
|
return castArray(t, v)
|
||||||
|
case reflect.Slice:
|
||||||
|
return castSlice(t, v)
|
||||||
|
case reflect.Map:
|
||||||
|
return castMap(t, v)
|
||||||
|
case reflect.Struct:
|
||||||
|
return castStruct(t, v)
|
||||||
|
}
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func castInt(v reflect.Value) (reflect.Value, error) {
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
return v, nil
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
|
return reflect.ValueOf(int64(v.Uint())), nil
|
||||||
|
case reflect.String:
|
||||||
|
i64, err := strconv.ParseInt(v.String(), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(i64), nil
|
||||||
|
case reflect.Bool:
|
||||||
|
if v.Bool() {
|
||||||
|
return reflect.ValueOf(int64(1)), nil
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(int64(0)), nil
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
return reflect.ValueOf(int64(v.Float())), nil
|
||||||
|
case reflect.Array:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castInt(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to int64 from empty array")
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castInt(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to int64 from empty slice")
|
||||||
|
case reflect.Interface:
|
||||||
|
return castInt(reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Map:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to int64 from map")
|
||||||
|
case reflect.Struct:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to int64 from struct")
|
||||||
|
case reflect.Ptr:
|
||||||
|
return castInt(v.Elem())
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to int64 from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
|
||||||
|
func castUint(v reflect.Value) (reflect.Value, error) {
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
return reflect.ValueOf(uint64(v.Int())), nil
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
|
return v, nil
|
||||||
|
case reflect.String:
|
||||||
|
u64, err := strconv.ParseUint(v.String(), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(u64), nil
|
||||||
|
case reflect.Bool:
|
||||||
|
if v.Bool() {
|
||||||
|
return reflect.ValueOf(uint64(1)), nil
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(uint64(0)), nil
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
return reflect.ValueOf(uint64(v.Float())), nil
|
||||||
|
case reflect.Array:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castUint(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to uint64 from empty array")
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castUint(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to uint64 from empty slice")
|
||||||
|
case reflect.Interface:
|
||||||
|
return castUint(reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Map:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to uint64 from map")
|
||||||
|
case reflect.Struct:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to uint64 from struct")
|
||||||
|
case reflect.Ptr:
|
||||||
|
return castUint(v.Elem())
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to uint64 from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
|
||||||
|
func castString(v reflect.Value) (reflect.Value, error) {
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
return reflect.ValueOf(fmt.Sprint(v.Int())), nil
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
|
return reflect.ValueOf(fmt.Sprint(v.Uint())), nil
|
||||||
|
case reflect.String:
|
||||||
|
return v, nil
|
||||||
|
case reflect.Bool:
|
||||||
|
if v.Bool() {
|
||||||
|
return reflect.ValueOf("true"), nil
|
||||||
|
}
|
||||||
|
return reflect.ValueOf("false"), nil
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
return reflect.ValueOf(fmt.Sprint(v.Float())), nil
|
||||||
|
case reflect.Array:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castString(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from empty array")
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castString(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from empty slice")
|
||||||
|
case reflect.Interface:
|
||||||
|
return castString(reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Map:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from map")
|
||||||
|
case reflect.Struct:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from struct")
|
||||||
|
case reflect.Ptr:
|
||||||
|
return castString(v.Elem())
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
|
||||||
|
func castBool(v reflect.Value) (reflect.Value, error) {
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
switch v.Int() {
|
||||||
|
case 0:
|
||||||
|
return reflect.ValueOf(false), nil
|
||||||
|
case 1:
|
||||||
|
return reflect.ValueOf(true), nil
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to bool from %d", v.Int())
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
|
switch v.Uint() {
|
||||||
|
case 0:
|
||||||
|
return reflect.ValueOf(false), nil
|
||||||
|
case 1:
|
||||||
|
return reflect.ValueOf(true), nil
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to bool from %d", v.Uint())
|
||||||
|
case reflect.String:
|
||||||
|
b, err := strconv.ParseBool(v.String())
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(b), nil
|
||||||
|
case reflect.Bool:
|
||||||
|
return v, nil
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
switch v.Float() {
|
||||||
|
case 0:
|
||||||
|
return reflect.ValueOf(false), nil
|
||||||
|
case 1:
|
||||||
|
return reflect.ValueOf(true), nil
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to bool from %f", v.Float())
|
||||||
|
case reflect.Array:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castBool(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from empty array")
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castBool(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from empty slice")
|
||||||
|
case reflect.Interface:
|
||||||
|
return castBool(reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Map:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from map")
|
||||||
|
case reflect.Struct:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to string from struct")
|
||||||
|
case reflect.Ptr:
|
||||||
|
return castBool(v.Elem())
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to bool from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
|
||||||
|
func castFloat(v reflect.Value) (reflect.Value, error) {
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
return reflect.ValueOf(float64(v.Int())), nil
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
|
return reflect.ValueOf(float64(v.Uint())), nil
|
||||||
|
case reflect.String:
|
||||||
|
f64, err := strconv.ParseFloat(v.String(), 64)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(f64), nil
|
||||||
|
case reflect.Bool:
|
||||||
|
if v.Bool() {
|
||||||
|
return reflect.ValueOf(float64(1)), nil
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(float64(0)), nil
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
return v, nil
|
||||||
|
case reflect.Array:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castFloat(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to float64 from empty array")
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castFloat(v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to float64 from empty slice")
|
||||||
|
case reflect.Interface:
|
||||||
|
return castFloat(reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Map:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to float64 from map")
|
||||||
|
case reflect.Struct:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to float64 from struct")
|
||||||
|
case reflect.Ptr:
|
||||||
|
return castFloat(v.Elem())
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to float64 from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
|
||||||
|
func castArray(t reflect.Type, v reflect.Value) (reflect.Value, error) {
|
||||||
|
kind := v.Type().Kind()
|
||||||
|
if kind == reflect.Interface {
|
||||||
|
return castArray(t, reflect.ValueOf(v.Interface()))
|
||||||
|
}
|
||||||
|
if kind != reflect.Slice && kind != reflect.Array {
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to array from %s", kind)
|
||||||
|
}
|
||||||
|
if t.Elem() == v.Type().Elem() {
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
if t.Len() != v.Len() {
|
||||||
|
return nilValue, fmt.Errorf("failed to cast [%d]array from slice of %d length", t.Len(), v.Len())
|
||||||
|
}
|
||||||
|
ret := reflect.New(t).Elem()
|
||||||
|
for i := 0; i < v.Len(); i++ {
|
||||||
|
vv, err := castValue(t.Elem(), v.Index(i))
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
ret.Index(i).Set(vv)
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func castSlice(t reflect.Type, v reflect.Value) (reflect.Value, error) {
|
||||||
|
kind := v.Type().Kind()
|
||||||
|
if kind == reflect.Interface {
|
||||||
|
return castSlice(t, reflect.ValueOf(v.Interface()))
|
||||||
|
}
|
||||||
|
if kind != reflect.Slice && kind != reflect.Array {
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to slice from %s", kind)
|
||||||
|
}
|
||||||
|
if t.Elem() == v.Type().Elem() {
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
ret := reflect.MakeSlice(t, v.Len(), v.Len())
|
||||||
|
for i := 0; i < v.Len(); i++ {
|
||||||
|
vv, err := castValue(t.Elem(), v.Index(i))
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
ret.Index(i).Set(vv)
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func castMap(t reflect.Type, v reflect.Value) (reflect.Value, error) {
|
||||||
|
ret := reflect.MakeMap(t)
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Map:
|
||||||
|
iter := v.MapRange()
|
||||||
|
for iter.Next() {
|
||||||
|
key, err := castValue(t.Key(), iter.Key())
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
value, err := castValue(t.Elem(), iter.Value())
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
ret.SetMapIndex(key, value)
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
case reflect.Interface:
|
||||||
|
return castMap(t, reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castMap(t, v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to map from empty slice")
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to map from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
|
||||||
|
func castStruct(t reflect.Type, v reflect.Value) (reflect.Value, error) {
|
||||||
|
ret := reflect.New(t).Elem()
|
||||||
|
switch v.Type().Kind() {
|
||||||
|
case reflect.Map:
|
||||||
|
iter := v.MapRange()
|
||||||
|
for iter.Next() {
|
||||||
|
key := iter.Key()
|
||||||
|
k, err := castString(key)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
fieldName := k.String()
|
||||||
|
field, ok := t.FieldByName(fieldName)
|
||||||
|
if ok {
|
||||||
|
value, err := castValue(field.Type, iter.Value())
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
ret.FieldByName(fieldName).Set(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
case reflect.Struct:
|
||||||
|
for i := 0; i < v.Type().NumField(); i++ {
|
||||||
|
name := v.Type().Field(i).Name
|
||||||
|
ret.FieldByName(name).Set(v.FieldByName(name))
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
case reflect.Interface:
|
||||||
|
return castStruct(t, reflect.ValueOf(v.Interface()))
|
||||||
|
case reflect.Slice:
|
||||||
|
if v.Len() > 0 {
|
||||||
|
return castStruct(t, v.Index(0))
|
||||||
|
}
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to struct from empty slice")
|
||||||
|
default:
|
||||||
|
return nilValue, fmt.Errorf("failed to cast to struct from %s", v.Type().Kind())
|
||||||
|
}
|
||||||
|
}
|
5
vendor/github.com/goccy/go-json/internal/decoder/bool.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/bool.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package decoder
|
package decoder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/errors"
|
"github.com/goccy/go-json/internal/errors"
|
||||||
@ -76,3 +77,7 @@ func (d *boolDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.
|
|||||||
}
|
}
|
||||||
return 0, errors.ErrUnexpectedEndOfJSON("bool", cursor)
|
return 0, errors.ErrUnexpectedEndOfJSON("bool", cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *boolDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: bool decoder does not support decode path")
|
||||||
|
}
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/bytes.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/bytes.go
generated
vendored
@ -2,6 +2,7 @@ package decoder
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/errors"
|
"github.com/goccy/go-json/internal/errors"
|
||||||
@ -78,6 +79,10 @@ func (d *bytesDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe
|
|||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *bytesDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: []byte decoder does not support decode path")
|
||||||
|
}
|
||||||
|
|
||||||
func (d *bytesDecoder) decodeStreamBinary(s *Stream, depth int64, p unsafe.Pointer) ([]byte, error) {
|
func (d *bytesDecoder) decodeStreamBinary(s *Stream, depth int64, p unsafe.Pointer) ([]byte, error) {
|
||||||
c := s.skipWhiteSpace()
|
c := s.skipWhiteSpace()
|
||||||
if c == '[' {
|
if c == '[' {
|
||||||
|
12
vendor/github.com/goccy/go-json/internal/decoder/float.go
generated
vendored
12
vendor/github.com/goccy/go-json/internal/decoder/float.go
generated
vendored
@ -156,3 +156,15 @@ func (d *floatDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe
|
|||||||
d.op(p, f64)
|
d.op(p, f64)
|
||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *floatDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
buf := ctx.Buf
|
||||||
|
bytes, c, err := d.decodeByte(buf, cursor)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
if bytes == nil {
|
||||||
|
return [][]byte{nullbytes}, c, nil
|
||||||
|
}
|
||||||
|
return [][]byte{bytes}, c, nil
|
||||||
|
}
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/func.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/func.go
generated
vendored
@ -2,6 +2,7 @@ package decoder
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/errors"
|
"github.com/goccy/go-json/internal/errors"
|
||||||
@ -139,3 +140,7 @@ func (d *funcDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.
|
|||||||
}
|
}
|
||||||
return cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)
|
return cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *funcDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: func decoder does not support decode path")
|
||||||
|
}
|
||||||
|
4
vendor/github.com/goccy/go-json/internal/decoder/int.go
generated
vendored
4
vendor/github.com/goccy/go-json/internal/decoder/int.go
generated
vendored
@ -240,3 +240,7 @@ func (d *intDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.P
|
|||||||
d.op(p, i64)
|
d.op(p, i64)
|
||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *intDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: int decoder does not support decode path")
|
||||||
|
}
|
||||||
|
70
vendor/github.com/goccy/go-json/internal/decoder/interface.go
generated
vendored
70
vendor/github.com/goccy/go-json/internal/decoder/interface.go
generated
vendored
@ -94,6 +94,7 @@ func (d *interfaceDecoder) numDecoder(s *Stream) Decoder {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
emptyInterfaceType = runtime.Type2RType(reflect.TypeOf((*interface{})(nil)).Elem())
|
emptyInterfaceType = runtime.Type2RType(reflect.TypeOf((*interface{})(nil)).Elem())
|
||||||
|
EmptyInterfaceType = emptyInterfaceType
|
||||||
interfaceMapType = runtime.Type2RType(
|
interfaceMapType = runtime.Type2RType(
|
||||||
reflect.TypeOf((*map[string]interface{})(nil)).Elem(),
|
reflect.TypeOf((*map[string]interface{})(nil)).Elem(),
|
||||||
)
|
)
|
||||||
@ -456,3 +457,72 @@ func (d *interfaceDecoder) decodeEmptyInterface(ctx *RuntimeContext, cursor, dep
|
|||||||
}
|
}
|
||||||
return cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)
|
return cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewPathDecoder() Decoder {
|
||||||
|
ifaceDecoder := &interfaceDecoder{
|
||||||
|
typ: emptyInterfaceType,
|
||||||
|
structName: "",
|
||||||
|
fieldName: "",
|
||||||
|
floatDecoder: newFloatDecoder("", "", func(p unsafe.Pointer, v float64) {
|
||||||
|
*(*interface{})(p) = v
|
||||||
|
}),
|
||||||
|
numberDecoder: newNumberDecoder("", "", func(p unsafe.Pointer, v json.Number) {
|
||||||
|
*(*interface{})(p) = v
|
||||||
|
}),
|
||||||
|
stringDecoder: newStringDecoder("", ""),
|
||||||
|
}
|
||||||
|
ifaceDecoder.sliceDecoder = newSliceDecoder(
|
||||||
|
ifaceDecoder,
|
||||||
|
emptyInterfaceType,
|
||||||
|
emptyInterfaceType.Size(),
|
||||||
|
"", "",
|
||||||
|
)
|
||||||
|
ifaceDecoder.mapDecoder = newMapDecoder(
|
||||||
|
interfaceMapType,
|
||||||
|
stringType,
|
||||||
|
ifaceDecoder.stringDecoder,
|
||||||
|
interfaceMapType.Elem(),
|
||||||
|
ifaceDecoder,
|
||||||
|
"", "",
|
||||||
|
)
|
||||||
|
return ifaceDecoder
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
truebytes = []byte("true")
|
||||||
|
falsebytes = []byte("false")
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *interfaceDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
buf := ctx.Buf
|
||||||
|
cursor = skipWhiteSpace(buf, cursor)
|
||||||
|
switch buf[cursor] {
|
||||||
|
case '{':
|
||||||
|
return d.mapDecoder.DecodePath(ctx, cursor, depth)
|
||||||
|
case '[':
|
||||||
|
return d.sliceDecoder.DecodePath(ctx, cursor, depth)
|
||||||
|
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||||
|
return d.floatDecoder.DecodePath(ctx, cursor, depth)
|
||||||
|
case '"':
|
||||||
|
return d.stringDecoder.DecodePath(ctx, cursor, depth)
|
||||||
|
case 't':
|
||||||
|
if err := validateTrue(buf, cursor); err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor += 4
|
||||||
|
return [][]byte{truebytes}, cursor, nil
|
||||||
|
case 'f':
|
||||||
|
if err := validateFalse(buf, cursor); err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor += 5
|
||||||
|
return [][]byte{falsebytes}, cursor, nil
|
||||||
|
case 'n':
|
||||||
|
if err := validateNull(buf, cursor); err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor += 4
|
||||||
|
return [][]byte{nullbytes}, cursor, nil
|
||||||
|
}
|
||||||
|
return nil, cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)
|
||||||
|
}
|
||||||
|
10
vendor/github.com/goccy/go-json/internal/decoder/invalid.go
generated
vendored
10
vendor/github.com/goccy/go-json/internal/decoder/invalid.go
generated
vendored
@ -43,3 +43,13 @@ func (d *invalidDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsa
|
|||||||
Field: d.fieldName,
|
Field: d.fieldName,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *invalidDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, &errors.UnmarshalTypeError{
|
||||||
|
Value: "object",
|
||||||
|
Type: runtime.RType2Type(d.typ),
|
||||||
|
Offset: cursor,
|
||||||
|
Struct: d.structName,
|
||||||
|
Field: d.fieldName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
93
vendor/github.com/goccy/go-json/internal/decoder/map.go
generated
vendored
93
vendor/github.com/goccy/go-json/internal/decoder/map.go
generated
vendored
@ -185,3 +185,96 @@ func (d *mapDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.P
|
|||||||
cursor++
|
cursor++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *mapDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
buf := ctx.Buf
|
||||||
|
depth++
|
||||||
|
if depth > maxDecodeNestingDepth {
|
||||||
|
return nil, 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor = skipWhiteSpace(buf, cursor)
|
||||||
|
buflen := int64(len(buf))
|
||||||
|
if buflen < 2 {
|
||||||
|
return nil, 0, errors.ErrExpected("{} for map", cursor)
|
||||||
|
}
|
||||||
|
switch buf[cursor] {
|
||||||
|
case 'n':
|
||||||
|
if err := validateNull(buf, cursor); err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor += 4
|
||||||
|
return [][]byte{nullbytes}, cursor, nil
|
||||||
|
case '{':
|
||||||
|
default:
|
||||||
|
return nil, 0, errors.ErrExpected("{ character for map value", cursor)
|
||||||
|
}
|
||||||
|
cursor++
|
||||||
|
cursor = skipWhiteSpace(buf, cursor)
|
||||||
|
if buf[cursor] == '}' {
|
||||||
|
cursor++
|
||||||
|
return nil, cursor, nil
|
||||||
|
}
|
||||||
|
keyDecoder, ok := d.keyDecoder.(*stringDecoder)
|
||||||
|
if !ok {
|
||||||
|
return nil, 0, &errors.UnmarshalTypeError{
|
||||||
|
Value: "string",
|
||||||
|
Type: reflect.TypeOf(""),
|
||||||
|
Offset: cursor,
|
||||||
|
Struct: d.structName,
|
||||||
|
Field: d.fieldName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret := [][]byte{}
|
||||||
|
for {
|
||||||
|
key, keyCursor, err := keyDecoder.decodeByte(buf, cursor)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor = skipWhiteSpace(buf, keyCursor)
|
||||||
|
if buf[cursor] != ':' {
|
||||||
|
return nil, 0, errors.ErrExpected("colon after object key", cursor)
|
||||||
|
}
|
||||||
|
cursor++
|
||||||
|
child, found, err := ctx.Option.Path.Field(string(key))
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
if child != nil {
|
||||||
|
oldPath := ctx.Option.Path.node
|
||||||
|
ctx.Option.Path.node = child
|
||||||
|
paths, c, err := d.valueDecoder.DecodePath(ctx, cursor, depth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
ctx.Option.Path.node = oldPath
|
||||||
|
ret = append(ret, paths...)
|
||||||
|
cursor = c
|
||||||
|
} else {
|
||||||
|
start := cursor
|
||||||
|
end, err := skipValue(buf, cursor, depth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
ret = append(ret, buf[start:end])
|
||||||
|
cursor = end
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c, err := skipValue(buf, cursor, depth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor = c
|
||||||
|
}
|
||||||
|
cursor = skipWhiteSpace(buf, cursor)
|
||||||
|
if buf[cursor] == '}' {
|
||||||
|
cursor++
|
||||||
|
return ret, cursor, nil
|
||||||
|
}
|
||||||
|
if buf[cursor] != ',' {
|
||||||
|
return nil, 0, errors.ErrExpected("comma after object value", cursor)
|
||||||
|
}
|
||||||
|
cursor++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
11
vendor/github.com/goccy/go-json/internal/decoder/number.go
generated
vendored
11
vendor/github.com/goccy/go-json/internal/decoder/number.go
generated
vendored
@ -51,6 +51,17 @@ func (d *numberDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsaf
|
|||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *numberDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
bytes, c, err := d.decodeByte(ctx.Buf, cursor)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
if bytes == nil {
|
||||||
|
return [][]byte{nullbytes}, c, nil
|
||||||
|
}
|
||||||
|
return [][]byte{bytes}, c, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *numberDecoder) decodeStreamByte(s *Stream) ([]byte, error) {
|
func (d *numberDecoder) decodeStreamByte(s *Stream) ([]byte, error) {
|
||||||
start := s.cursor
|
start := s.cursor
|
||||||
for {
|
for {
|
||||||
|
2
vendor/github.com/goccy/go-json/internal/decoder/option.go
generated
vendored
2
vendor/github.com/goccy/go-json/internal/decoder/option.go
generated
vendored
@ -7,9 +7,11 @@ type OptionFlags uint8
|
|||||||
const (
|
const (
|
||||||
FirstWinOption OptionFlags = 1 << iota
|
FirstWinOption OptionFlags = 1 << iota
|
||||||
ContextOption
|
ContextOption
|
||||||
|
PathOption
|
||||||
)
|
)
|
||||||
|
|
||||||
type Option struct {
|
type Option struct {
|
||||||
Flags OptionFlags
|
Flags OptionFlags
|
||||||
Context context.Context
|
Context context.Context
|
||||||
|
Path *Path
|
||||||
}
|
}
|
||||||
|
670
vendor/github.com/goccy/go-json/internal/decoder/path.go
generated
vendored
Normal file
670
vendor/github.com/goccy/go-json/internal/decoder/path.go
generated
vendored
Normal file
@ -0,0 +1,670 @@
|
|||||||
|
package decoder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/goccy/go-json/internal/errors"
|
||||||
|
"github.com/goccy/go-json/internal/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PathString string
|
||||||
|
|
||||||
|
func (s PathString) Build() (*Path, error) {
|
||||||
|
builder := new(PathBuilder)
|
||||||
|
return builder.Build([]rune(s))
|
||||||
|
}
|
||||||
|
|
||||||
|
type PathBuilder struct {
|
||||||
|
root PathNode
|
||||||
|
node PathNode
|
||||||
|
singleQuotePathSelector bool
|
||||||
|
doubleQuotePathSelector bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) Build(buf []rune) (*Path, error) {
|
||||||
|
node, err := b.build(buf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Path{
|
||||||
|
node: node,
|
||||||
|
RootSelectorOnly: node == nil,
|
||||||
|
SingleQuotePathSelector: b.singleQuotePathSelector,
|
||||||
|
DoubleQuotePathSelector: b.doubleQuotePathSelector,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) build(buf []rune) (PathNode, error) {
|
||||||
|
if len(buf) == 0 {
|
||||||
|
return nil, errors.ErrEmptyPath()
|
||||||
|
}
|
||||||
|
if buf[0] != '$' {
|
||||||
|
return nil, errors.ErrInvalidPath("JSON Path must start with a $ character")
|
||||||
|
}
|
||||||
|
if len(buf) == 1 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
buf = buf[1:]
|
||||||
|
offset, err := b.buildNext(buf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(buf) > offset {
|
||||||
|
return nil, errors.ErrInvalidPath("remain invalid path %q", buf[offset:])
|
||||||
|
}
|
||||||
|
return b.root, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) buildNextCharIfExists(buf []rune, cursor int) (int, error) {
|
||||||
|
if len(buf) > cursor {
|
||||||
|
offset, err := b.buildNext(buf[cursor:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return cursor + 1 + offset, nil
|
||||||
|
}
|
||||||
|
return cursor, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) buildNext(buf []rune) (int, error) {
|
||||||
|
switch buf[0] {
|
||||||
|
case '.':
|
||||||
|
if len(buf) == 1 {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with dot character")
|
||||||
|
}
|
||||||
|
offset, err := b.buildSelector(buf[1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return offset + 1, nil
|
||||||
|
case '[':
|
||||||
|
if len(buf) == 1 {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with left bracket character")
|
||||||
|
}
|
||||||
|
offset, err := b.buildIndex(buf[1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return offset + 1, nil
|
||||||
|
default:
|
||||||
|
return 0, errors.ErrInvalidPath("expect dot or left bracket character. but found %c character", buf[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) buildSelector(buf []rune) (int, error) {
|
||||||
|
switch buf[0] {
|
||||||
|
case '.':
|
||||||
|
if len(buf) == 1 {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with double dot character")
|
||||||
|
}
|
||||||
|
offset, err := b.buildPathRecursive(buf[1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return 1 + offset, nil
|
||||||
|
case '[', ']', '$', '*':
|
||||||
|
return 0, errors.ErrInvalidPath("found invalid path character %c after dot", buf[0])
|
||||||
|
}
|
||||||
|
for cursor := 0; cursor < len(buf); cursor++ {
|
||||||
|
switch buf[cursor] {
|
||||||
|
case '$', '*', ']':
|
||||||
|
return 0, errors.ErrInvalidPath("found %c character in field selector context", buf[cursor])
|
||||||
|
case '.':
|
||||||
|
if cursor+1 >= len(buf) {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with dot character")
|
||||||
|
}
|
||||||
|
selector := buf[:cursor]
|
||||||
|
b.addSelectorNode(string(selector))
|
||||||
|
offset, err := b.buildSelector(buf[cursor+1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return cursor + 1 + offset, nil
|
||||||
|
case '[':
|
||||||
|
if cursor+1 >= len(buf) {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with left bracket character")
|
||||||
|
}
|
||||||
|
selector := buf[:cursor]
|
||||||
|
b.addSelectorNode(string(selector))
|
||||||
|
offset, err := b.buildIndex(buf[cursor+1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return cursor + 1 + offset, nil
|
||||||
|
case '"':
|
||||||
|
if cursor+1 >= len(buf) {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with double quote character")
|
||||||
|
}
|
||||||
|
offset, err := b.buildQuoteSelector(buf[cursor+1:], DoubleQuotePathSelector)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return cursor + 1 + offset, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b.addSelectorNode(string(buf))
|
||||||
|
return len(buf), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) buildQuoteSelector(buf []rune, sel QuotePathSelector) (int, error) {
|
||||||
|
switch buf[0] {
|
||||||
|
case '[', ']', '$', '.', '*', '\'', '"':
|
||||||
|
return 0, errors.ErrInvalidPath("found invalid path character %c after quote", buf[0])
|
||||||
|
}
|
||||||
|
for cursor := 0; cursor < len(buf); cursor++ {
|
||||||
|
switch buf[cursor] {
|
||||||
|
case '\'':
|
||||||
|
if sel != SingleQuotePathSelector {
|
||||||
|
return 0, errors.ErrInvalidPath("found double quote character in field selector with single quote context")
|
||||||
|
}
|
||||||
|
if len(buf) <= cursor+1 {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with single quote character in field selector context")
|
||||||
|
}
|
||||||
|
if buf[cursor+1] != ']' {
|
||||||
|
return 0, errors.ErrInvalidPath("expect right bracket for field selector with single quote but found %c", buf[cursor+1])
|
||||||
|
}
|
||||||
|
selector := buf[:cursor]
|
||||||
|
b.addSelectorNode(string(selector))
|
||||||
|
b.singleQuotePathSelector = true
|
||||||
|
return b.buildNextCharIfExists(buf, cursor+2)
|
||||||
|
case '"':
|
||||||
|
if sel != DoubleQuotePathSelector {
|
||||||
|
return 0, errors.ErrInvalidPath("found single quote character in field selector with double quote context")
|
||||||
|
}
|
||||||
|
selector := buf[:cursor]
|
||||||
|
b.addSelectorNode(string(selector))
|
||||||
|
b.doubleQuotePathSelector = true
|
||||||
|
return b.buildNextCharIfExists(buf, cursor+1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0, errors.ErrInvalidPath("couldn't find quote character in selector quote path context")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) buildPathRecursive(buf []rune) (int, error) {
|
||||||
|
switch buf[0] {
|
||||||
|
case '.', '[', ']', '$', '*':
|
||||||
|
return 0, errors.ErrInvalidPath("found invalid path character %c after double dot", buf[0])
|
||||||
|
}
|
||||||
|
for cursor := 0; cursor < len(buf); cursor++ {
|
||||||
|
switch buf[cursor] {
|
||||||
|
case '$', '*', ']':
|
||||||
|
return 0, errors.ErrInvalidPath("found %c character in field selector context", buf[cursor])
|
||||||
|
case '.':
|
||||||
|
if cursor+1 >= len(buf) {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with dot character")
|
||||||
|
}
|
||||||
|
selector := buf[:cursor]
|
||||||
|
b.addRecursiveNode(string(selector))
|
||||||
|
offset, err := b.buildSelector(buf[cursor+1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return cursor + 1 + offset, nil
|
||||||
|
case '[':
|
||||||
|
if cursor+1 >= len(buf) {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with left bracket character")
|
||||||
|
}
|
||||||
|
selector := buf[:cursor]
|
||||||
|
b.addRecursiveNode(string(selector))
|
||||||
|
offset, err := b.buildIndex(buf[cursor+1:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return cursor + 1 + offset, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b.addRecursiveNode(string(buf))
|
||||||
|
return len(buf), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) buildIndex(buf []rune) (int, error) {
|
||||||
|
switch buf[0] {
|
||||||
|
case '.', '[', ']', '$':
|
||||||
|
return 0, errors.ErrInvalidPath("found invalid path character %c after left bracket", buf[0])
|
||||||
|
case '\'':
|
||||||
|
if len(buf) == 1 {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with single quote character")
|
||||||
|
}
|
||||||
|
offset, err := b.buildQuoteSelector(buf[1:], SingleQuotePathSelector)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return 1 + offset, nil
|
||||||
|
case '*':
|
||||||
|
if len(buf) == 1 {
|
||||||
|
return 0, errors.ErrInvalidPath("JSON Path ends with star character")
|
||||||
|
}
|
||||||
|
if buf[1] != ']' {
|
||||||
|
return 0, errors.ErrInvalidPath("expect right bracket character for index all path but found %c character", buf[1])
|
||||||
|
}
|
||||||
|
b.addIndexAllNode()
|
||||||
|
offset := len("*]")
|
||||||
|
if len(buf) > 2 {
|
||||||
|
buildOffset, err := b.buildNext(buf[2:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return offset + buildOffset, nil
|
||||||
|
}
|
||||||
|
return offset, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for cursor := 0; cursor < len(buf); cursor++ {
|
||||||
|
switch buf[cursor] {
|
||||||
|
case ']':
|
||||||
|
index, err := strconv.ParseInt(string(buf[:cursor]), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0, errors.ErrInvalidPath("%q is unexpected index path", buf[:cursor])
|
||||||
|
}
|
||||||
|
b.addIndexNode(int(index))
|
||||||
|
return b.buildNextCharIfExists(buf, cursor+1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0, errors.ErrInvalidPath("couldn't find right bracket character in index path context")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) addIndexAllNode() {
|
||||||
|
node := newPathIndexAllNode()
|
||||||
|
if b.root == nil {
|
||||||
|
b.root = node
|
||||||
|
b.node = node
|
||||||
|
} else {
|
||||||
|
b.node = b.node.chain(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) addRecursiveNode(selector string) {
|
||||||
|
node := newPathRecursiveNode(selector)
|
||||||
|
if b.root == nil {
|
||||||
|
b.root = node
|
||||||
|
b.node = node
|
||||||
|
} else {
|
||||||
|
b.node = b.node.chain(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) addSelectorNode(name string) {
|
||||||
|
node := newPathSelectorNode(name)
|
||||||
|
if b.root == nil {
|
||||||
|
b.root = node
|
||||||
|
b.node = node
|
||||||
|
} else {
|
||||||
|
b.node = b.node.chain(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PathBuilder) addIndexNode(idx int) {
|
||||||
|
node := newPathIndexNode(idx)
|
||||||
|
if b.root == nil {
|
||||||
|
b.root = node
|
||||||
|
b.node = node
|
||||||
|
} else {
|
||||||
|
b.node = b.node.chain(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type QuotePathSelector int
|
||||||
|
|
||||||
|
const (
|
||||||
|
SingleQuotePathSelector QuotePathSelector = 1
|
||||||
|
DoubleQuotePathSelector QuotePathSelector = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
type Path struct {
|
||||||
|
node PathNode
|
||||||
|
RootSelectorOnly bool
|
||||||
|
SingleQuotePathSelector bool
|
||||||
|
DoubleQuotePathSelector bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Path) Field(sel string) (PathNode, bool, error) {
|
||||||
|
if p.node == nil {
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
return p.node.Field(sel)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Path) Get(src, dst reflect.Value) error {
|
||||||
|
if p.node == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return p.node.Get(src, dst)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Path) String() string {
|
||||||
|
if p.node == nil {
|
||||||
|
return "$"
|
||||||
|
}
|
||||||
|
return p.node.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
type PathNode interface {
|
||||||
|
fmt.Stringer
|
||||||
|
Index(idx int) (PathNode, bool, error)
|
||||||
|
Field(fieldName string) (PathNode, bool, error)
|
||||||
|
Get(src, dst reflect.Value) error
|
||||||
|
chain(PathNode) PathNode
|
||||||
|
target() bool
|
||||||
|
single() bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type BasePathNode struct {
|
||||||
|
child PathNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *BasePathNode) chain(node PathNode) PathNode {
|
||||||
|
n.child = node
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *BasePathNode) target() bool {
|
||||||
|
return n.child == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *BasePathNode) single() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
type PathSelectorNode struct {
|
||||||
|
*BasePathNode
|
||||||
|
selector string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newPathSelectorNode(selector string) *PathSelectorNode {
|
||||||
|
return &PathSelectorNode{
|
||||||
|
BasePathNode: &BasePathNode{},
|
||||||
|
selector: selector,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathSelectorNode) Index(idx int) (PathNode, bool, error) {
|
||||||
|
return nil, false, &errors.PathError{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathSelectorNode) Field(fieldName string) (PathNode, bool, error) {
|
||||||
|
if n.selector == fieldName {
|
||||||
|
return n.child, true, nil
|
||||||
|
}
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathSelectorNode) Get(src, dst reflect.Value) error {
|
||||||
|
switch src.Type().Kind() {
|
||||||
|
case reflect.Map:
|
||||||
|
iter := src.MapRange()
|
||||||
|
for iter.Next() {
|
||||||
|
key, ok := iter.Key().Interface().(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid map key type %T", src.Type().Key())
|
||||||
|
}
|
||||||
|
child, found, err := n.Field(key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
if child != nil {
|
||||||
|
return child.Get(iter.Value(), dst)
|
||||||
|
}
|
||||||
|
return AssignValue(iter.Value(), dst)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case reflect.Struct:
|
||||||
|
typ := src.Type()
|
||||||
|
for i := 0; i < typ.Len(); i++ {
|
||||||
|
tag := runtime.StructTagFromField(typ.Field(i))
|
||||||
|
child, found, err := n.Field(tag.Key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
if child != nil {
|
||||||
|
return child.Get(src.Field(i), dst)
|
||||||
|
}
|
||||||
|
return AssignValue(src.Field(i), dst)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case reflect.Ptr:
|
||||||
|
return n.Get(src.Elem(), dst)
|
||||||
|
case reflect.Interface:
|
||||||
|
return n.Get(reflect.ValueOf(src.Interface()), dst)
|
||||||
|
case reflect.Float64, reflect.String, reflect.Bool:
|
||||||
|
return AssignValue(src, dst)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("failed to get %s value from %s", n.selector, src.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathSelectorNode) String() string {
|
||||||
|
s := fmt.Sprintf(".%s", n.selector)
|
||||||
|
if n.child != nil {
|
||||||
|
s += n.child.String()
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
type PathIndexNode struct {
|
||||||
|
*BasePathNode
|
||||||
|
selector int
|
||||||
|
}
|
||||||
|
|
||||||
|
func newPathIndexNode(selector int) *PathIndexNode {
|
||||||
|
return &PathIndexNode{
|
||||||
|
BasePathNode: &BasePathNode{},
|
||||||
|
selector: selector,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexNode) Index(idx int) (PathNode, bool, error) {
|
||||||
|
if n.selector == idx {
|
||||||
|
return n.child, true, nil
|
||||||
|
}
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexNode) Field(fieldName string) (PathNode, bool, error) {
|
||||||
|
return nil, false, &errors.PathError{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexNode) Get(src, dst reflect.Value) error {
|
||||||
|
switch src.Type().Kind() {
|
||||||
|
case reflect.Array, reflect.Slice:
|
||||||
|
if src.Len() > n.selector {
|
||||||
|
if n.child != nil {
|
||||||
|
return n.child.Get(src.Index(n.selector), dst)
|
||||||
|
}
|
||||||
|
return AssignValue(src.Index(n.selector), dst)
|
||||||
|
}
|
||||||
|
case reflect.Ptr:
|
||||||
|
return n.Get(src.Elem(), dst)
|
||||||
|
case reflect.Interface:
|
||||||
|
return n.Get(reflect.ValueOf(src.Interface()), dst)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("failed to get [%d] value from %s", n.selector, src.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexNode) String() string {
|
||||||
|
s := fmt.Sprintf("[%d]", n.selector)
|
||||||
|
if n.child != nil {
|
||||||
|
s += n.child.String()
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
type PathIndexAllNode struct {
|
||||||
|
*BasePathNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func newPathIndexAllNode() *PathIndexAllNode {
|
||||||
|
return &PathIndexAllNode{
|
||||||
|
BasePathNode: &BasePathNode{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexAllNode) Index(idx int) (PathNode, bool, error) {
|
||||||
|
return n.child, true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexAllNode) Field(fieldName string) (PathNode, bool, error) {
|
||||||
|
return nil, false, &errors.PathError{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexAllNode) Get(src, dst reflect.Value) error {
|
||||||
|
switch src.Type().Kind() {
|
||||||
|
case reflect.Array, reflect.Slice:
|
||||||
|
var arr []interface{}
|
||||||
|
for i := 0; i < src.Len(); i++ {
|
||||||
|
var v interface{}
|
||||||
|
rv := reflect.ValueOf(&v)
|
||||||
|
if n.child != nil {
|
||||||
|
if err := n.child.Get(src.Index(i), rv); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := AssignValue(src.Index(i), rv); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr = append(arr, v)
|
||||||
|
}
|
||||||
|
if err := AssignValue(reflect.ValueOf(arr), dst); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case reflect.Ptr:
|
||||||
|
return n.Get(src.Elem(), dst)
|
||||||
|
case reflect.Interface:
|
||||||
|
return n.Get(reflect.ValueOf(src.Interface()), dst)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("failed to get all value from %s", src.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathIndexAllNode) String() string {
|
||||||
|
s := "[*]"
|
||||||
|
if n.child != nil {
|
||||||
|
s += n.child.String()
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
type PathRecursiveNode struct {
|
||||||
|
*BasePathNode
|
||||||
|
selector string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newPathRecursiveNode(selector string) *PathRecursiveNode {
|
||||||
|
node := newPathSelectorNode(selector)
|
||||||
|
return &PathRecursiveNode{
|
||||||
|
BasePathNode: &BasePathNode{
|
||||||
|
child: node,
|
||||||
|
},
|
||||||
|
selector: selector,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathRecursiveNode) Field(fieldName string) (PathNode, bool, error) {
|
||||||
|
if n.selector == fieldName {
|
||||||
|
return n.child, true, nil
|
||||||
|
}
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathRecursiveNode) Index(_ int) (PathNode, bool, error) {
|
||||||
|
return n, true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func valueToSliceValue(v interface{}) []interface{} {
|
||||||
|
rv := reflect.ValueOf(v)
|
||||||
|
ret := []interface{}{}
|
||||||
|
if rv.Type().Kind() == reflect.Slice || rv.Type().Kind() == reflect.Array {
|
||||||
|
for i := 0; i < rv.Len(); i++ {
|
||||||
|
ret = append(ret, rv.Index(i).Interface())
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return []interface{}{v}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathRecursiveNode) Get(src, dst reflect.Value) error {
|
||||||
|
if n.child == nil {
|
||||||
|
return fmt.Errorf("failed to get by recursive path ..%s", n.selector)
|
||||||
|
}
|
||||||
|
var arr []interface{}
|
||||||
|
switch src.Type().Kind() {
|
||||||
|
case reflect.Map:
|
||||||
|
iter := src.MapRange()
|
||||||
|
for iter.Next() {
|
||||||
|
key, ok := iter.Key().Interface().(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid map key type %T", src.Type().Key())
|
||||||
|
}
|
||||||
|
child, found, err := n.Field(key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
var v interface{}
|
||||||
|
rv := reflect.ValueOf(&v)
|
||||||
|
_ = child.Get(iter.Value(), rv)
|
||||||
|
arr = append(arr, valueToSliceValue(v)...)
|
||||||
|
} else {
|
||||||
|
var v interface{}
|
||||||
|
rv := reflect.ValueOf(&v)
|
||||||
|
_ = n.Get(iter.Value(), rv)
|
||||||
|
if v != nil {
|
||||||
|
arr = append(arr, valueToSliceValue(v)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ = AssignValue(reflect.ValueOf(arr), dst)
|
||||||
|
return nil
|
||||||
|
case reflect.Struct:
|
||||||
|
typ := src.Type()
|
||||||
|
for i := 0; i < typ.Len(); i++ {
|
||||||
|
tag := runtime.StructTagFromField(typ.Field(i))
|
||||||
|
child, found, err := n.Field(tag.Key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
var v interface{}
|
||||||
|
rv := reflect.ValueOf(&v)
|
||||||
|
_ = child.Get(src.Field(i), rv)
|
||||||
|
arr = append(arr, valueToSliceValue(v)...)
|
||||||
|
} else {
|
||||||
|
var v interface{}
|
||||||
|
rv := reflect.ValueOf(&v)
|
||||||
|
_ = n.Get(src.Field(i), rv)
|
||||||
|
if v != nil {
|
||||||
|
arr = append(arr, valueToSliceValue(v)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ = AssignValue(reflect.ValueOf(arr), dst)
|
||||||
|
return nil
|
||||||
|
case reflect.Array, reflect.Slice:
|
||||||
|
for i := 0; i < src.Len(); i++ {
|
||||||
|
var v interface{}
|
||||||
|
rv := reflect.ValueOf(&v)
|
||||||
|
_ = n.Get(src.Index(i), rv)
|
||||||
|
if v != nil {
|
||||||
|
arr = append(arr, valueToSliceValue(v)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ = AssignValue(reflect.ValueOf(arr), dst)
|
||||||
|
return nil
|
||||||
|
case reflect.Ptr:
|
||||||
|
return n.Get(src.Elem(), dst)
|
||||||
|
case reflect.Interface:
|
||||||
|
return n.Get(reflect.ValueOf(src.Interface()), dst)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("failed to get %s value from %s", n.selector, src.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *PathRecursiveNode) String() string {
|
||||||
|
s := fmt.Sprintf("..%s", n.selector)
|
||||||
|
if n.child != nil {
|
||||||
|
s += n.child.String()
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
9
vendor/github.com/goccy/go-json/internal/decoder/ptr.go
generated
vendored
9
vendor/github.com/goccy/go-json/internal/decoder/ptr.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package decoder
|
package decoder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/runtime"
|
"github.com/goccy/go-json/internal/runtime"
|
||||||
@ -34,6 +35,10 @@ func (d *ptrDecoder) contentDecoder() Decoder {
|
|||||||
//go:linkname unsafe_New reflect.unsafe_New
|
//go:linkname unsafe_New reflect.unsafe_New
|
||||||
func unsafe_New(*runtime.Type) unsafe.Pointer
|
func unsafe_New(*runtime.Type) unsafe.Pointer
|
||||||
|
|
||||||
|
func UnsafeNew(t *runtime.Type) unsafe.Pointer {
|
||||||
|
return unsafe_New(t)
|
||||||
|
}
|
||||||
|
|
||||||
func (d *ptrDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {
|
func (d *ptrDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {
|
||||||
if s.skipWhiteSpace() == nul {
|
if s.skipWhiteSpace() == nul {
|
||||||
s.read()
|
s.read()
|
||||||
@ -85,3 +90,7 @@ func (d *ptrDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.P
|
|||||||
cursor = c
|
cursor = c
|
||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *ptrDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: ptr decoder does not support decode path")
|
||||||
|
}
|
||||||
|
79
vendor/github.com/goccy/go-json/internal/decoder/slice.go
generated
vendored
79
vendor/github.com/goccy/go-json/internal/decoder/slice.go
generated
vendored
@ -299,3 +299,82 @@ func (d *sliceDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *sliceDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
buf := ctx.Buf
|
||||||
|
depth++
|
||||||
|
if depth > maxDecodeNestingDepth {
|
||||||
|
return nil, 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)
|
||||||
|
}
|
||||||
|
|
||||||
|
ret := [][]byte{}
|
||||||
|
for {
|
||||||
|
switch buf[cursor] {
|
||||||
|
case ' ', '\n', '\t', '\r':
|
||||||
|
cursor++
|
||||||
|
continue
|
||||||
|
case 'n':
|
||||||
|
if err := validateNull(buf, cursor); err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor += 4
|
||||||
|
return [][]byte{nullbytes}, cursor, nil
|
||||||
|
case '[':
|
||||||
|
cursor++
|
||||||
|
cursor = skipWhiteSpace(buf, cursor)
|
||||||
|
if buf[cursor] == ']' {
|
||||||
|
cursor++
|
||||||
|
return ret, cursor, nil
|
||||||
|
}
|
||||||
|
idx := 0
|
||||||
|
for {
|
||||||
|
child, found, err := ctx.Option.Path.node.Index(idx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
if child != nil {
|
||||||
|
oldPath := ctx.Option.Path.node
|
||||||
|
ctx.Option.Path.node = child
|
||||||
|
paths, c, err := d.valueDecoder.DecodePath(ctx, cursor, depth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
ctx.Option.Path.node = oldPath
|
||||||
|
ret = append(ret, paths...)
|
||||||
|
cursor = c
|
||||||
|
} else {
|
||||||
|
start := cursor
|
||||||
|
end, err := skipValue(buf, cursor, depth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
ret = append(ret, buf[start:end])
|
||||||
|
cursor = end
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c, err := skipValue(buf, cursor, depth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
cursor = c
|
||||||
|
}
|
||||||
|
cursor = skipWhiteSpace(buf, cursor)
|
||||||
|
switch buf[cursor] {
|
||||||
|
case ']':
|
||||||
|
cursor++
|
||||||
|
return ret, cursor, nil
|
||||||
|
case ',':
|
||||||
|
idx++
|
||||||
|
default:
|
||||||
|
return nil, 0, errors.ErrInvalidCharacter(buf[cursor], "slice", cursor)
|
||||||
|
}
|
||||||
|
cursor++
|
||||||
|
}
|
||||||
|
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||||
|
return nil, 0, d.errNumber(cursor)
|
||||||
|
default:
|
||||||
|
return nil, 0, errors.ErrUnexpectedEndOfJSON("slice", cursor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
11
vendor/github.com/goccy/go-json/internal/decoder/string.go
generated
vendored
11
vendor/github.com/goccy/go-json/internal/decoder/string.go
generated
vendored
@ -60,6 +60,17 @@ func (d *stringDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsaf
|
|||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *stringDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
bytes, c, err := d.decodeByte(ctx.Buf, cursor)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
if bytes == nil {
|
||||||
|
return [][]byte{nullbytes}, c, nil
|
||||||
|
}
|
||||||
|
return [][]byte{bytes}, c, nil
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
hexToInt = [256]int{
|
hexToInt = [256]int{
|
||||||
'0': 0,
|
'0': 0,
|
||||||
|
4
vendor/github.com/goccy/go-json/internal/decoder/struct.go
generated
vendored
4
vendor/github.com/goccy/go-json/internal/decoder/struct.go
generated
vendored
@ -817,3 +817,7 @@ func (d *structDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsaf
|
|||||||
cursor++
|
cursor++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *structDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: struct decoder does not support decode path")
|
||||||
|
}
|
||||||
|
1
vendor/github.com/goccy/go-json/internal/decoder/type.go
generated
vendored
1
vendor/github.com/goccy/go-json/internal/decoder/type.go
generated
vendored
@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
type Decoder interface {
|
type Decoder interface {
|
||||||
Decode(*RuntimeContext, int64, int64, unsafe.Pointer) (int64, error)
|
Decode(*RuntimeContext, int64, int64, unsafe.Pointer) (int64, error)
|
||||||
|
DecodePath(*RuntimeContext, int64, int64) ([][]byte, int64, error)
|
||||||
DecodeStream(*Stream, int64, unsafe.Pointer) error
|
DecodeStream(*Stream, int64, unsafe.Pointer) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
vendor/github.com/goccy/go-json/internal/decoder/uint.go
generated
vendored
4
vendor/github.com/goccy/go-json/internal/decoder/uint.go
generated
vendored
@ -188,3 +188,7 @@ func (d *uintDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.
|
|||||||
d.op(p, u64)
|
d.op(p, u64)
|
||||||
return cursor, nil
|
return cursor, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *uintDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: uint decoder does not support decode path")
|
||||||
|
}
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go
generated
vendored
@ -3,6 +3,7 @@ package decoder
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/errors"
|
"github.com/goccy/go-json/internal/errors"
|
||||||
@ -97,3 +98,7 @@ func (d *unmarshalJSONDecoder) Decode(ctx *RuntimeContext, cursor, depth int64,
|
|||||||
}
|
}
|
||||||
return end, nil
|
return end, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *unmarshalJSONDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: unmarshal json decoder does not support decode path")
|
||||||
|
}
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go
generated
vendored
@ -3,6 +3,7 @@ package decoder
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding"
|
"encoding"
|
||||||
|
"fmt"
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf16"
|
"unicode/utf16"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
@ -142,6 +143,10 @@ func (d *unmarshalTextDecoder) Decode(ctx *RuntimeContext, cursor, depth int64,
|
|||||||
return end, nil
|
return end, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *unmarshalTextDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: unmarshal text decoder does not support decode path")
|
||||||
|
}
|
||||||
|
|
||||||
func unquoteBytes(s []byte) (t []byte, ok bool) {
|
func unquoteBytes(s []byte) (t []byte, ok bool) {
|
||||||
length := len(s)
|
length := len(s)
|
||||||
if length < 2 || s[0] != '"' || s[length-1] != '"' {
|
if length < 2 || s[0] != '"' || s[length-1] != '"' {
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/wrapped_string.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/wrapped_string.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package decoder
|
package decoder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@ -66,3 +67,7 @@ func (d *wrappedStringDecoder) Decode(ctx *RuntimeContext, cursor, depth int64,
|
|||||||
ctx.Buf = oldBuf
|
ctx.Buf = oldBuf
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *wrappedStringDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
|
||||||
|
return nil, 0, fmt.Errorf("json: wrapped string decoder does not support decode path")
|
||||||
|
}
|
||||||
|
2
vendor/github.com/goccy/go-json/internal/encoder/compiler.go
generated
vendored
2
vendor/github.com/goccy/go-json/internal/encoder/compiler.go
generated
vendored
@ -506,8 +506,6 @@ func (c *Compiler) listElemCode(typ *runtime.Type) (Code, error) {
|
|||||||
|
|
||||||
func (c *Compiler) mapKeyCode(typ *runtime.Type) (Code, error) {
|
func (c *Compiler) mapKeyCode(typ *runtime.Type) (Code, error) {
|
||||||
switch {
|
switch {
|
||||||
case c.implementsMarshalJSON(typ):
|
|
||||||
return c.marshalJSONCode(typ)
|
|
||||||
case c.implementsMarshalText(typ):
|
case c.implementsMarshalText(typ):
|
||||||
return c.marshalTextCode(typ)
|
return c.marshalTextCode(typ)
|
||||||
}
|
}
|
||||||
|
19
vendor/github.com/goccy/go-json/internal/errors/error.go
generated
vendored
19
vendor/github.com/goccy/go-json/internal/errors/error.go
generated
vendored
@ -162,3 +162,22 @@ func ErrInvalidBeginningOfValue(c byte, cursor int64) *SyntaxError {
|
|||||||
Offset: cursor,
|
Offset: cursor,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PathError struct {
|
||||||
|
msg string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *PathError) Error() string {
|
||||||
|
return fmt.Sprintf("json: invalid path format: %s", e.msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrInvalidPath(msg string, args ...interface{}) *PathError {
|
||||||
|
if len(args) != 0 {
|
||||||
|
return &PathError{msg: fmt.Sprintf(msg, args...)}
|
||||||
|
}
|
||||||
|
return &PathError{msg: msg}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrEmptyPath() *PathError {
|
||||||
|
return &PathError{msg: "path is empty"}
|
||||||
|
}
|
||||||
|
84
vendor/github.com/goccy/go-json/path.go
generated
vendored
Normal file
84
vendor/github.com/goccy/go-json/path.go
generated
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
package json
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/goccy/go-json/internal/decoder"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CreatePath creates JSON Path.
|
||||||
|
//
|
||||||
|
// JSON Path rule
|
||||||
|
// $ : root object or element. The JSON Path format must start with this operator, which refers to the outermost level of the JSON-formatted string.
|
||||||
|
// . : child operator. You can identify child values using dot-notation.
|
||||||
|
// .. : recursive descent.
|
||||||
|
// [] : subscript operator. If the JSON object is an array, you can use brackets to specify the array index.
|
||||||
|
// [*] : all objects/elements for array.
|
||||||
|
//
|
||||||
|
// Reserved words must be properly escaped when included in Path.
|
||||||
|
//
|
||||||
|
// Escape Rule
|
||||||
|
// single quote style escape: e.g.) `$['a.b'].c`
|
||||||
|
// double quote style escape: e.g.) `$."a.b".c`
|
||||||
|
func CreatePath(p string) (*Path, error) {
|
||||||
|
path, err := decoder.PathString(p).Build()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Path{path: path}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Path represents JSON Path.
|
||||||
|
type Path struct {
|
||||||
|
path *decoder.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
// RootSelectorOnly whether only the root selector ($) is used.
|
||||||
|
func (p *Path) RootSelectorOnly() bool {
|
||||||
|
return p.path.RootSelectorOnly
|
||||||
|
}
|
||||||
|
|
||||||
|
// UsedSingleQuotePathSelector whether single quote-based escaping was done when building the JSON Path.
|
||||||
|
func (p *Path) UsedSingleQuotePathSelector() bool {
|
||||||
|
return p.path.SingleQuotePathSelector
|
||||||
|
}
|
||||||
|
|
||||||
|
// UsedSingleQuotePathSelector whether double quote-based escaping was done when building the JSON Path.
|
||||||
|
func (p *Path) UsedDoubleQuotePathSelector() bool {
|
||||||
|
return p.path.DoubleQuotePathSelector
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract extracts a specific JSON string.
|
||||||
|
func (p *Path) Extract(data []byte, optFuncs ...DecodeOptionFunc) ([][]byte, error) {
|
||||||
|
return extractFromPath(p, data, optFuncs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathString returns original JSON Path string.
|
||||||
|
func (p *Path) PathString() string {
|
||||||
|
return p.path.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal extract and decode the value of the part corresponding to JSON Path from the input data.
|
||||||
|
func (p *Path) Unmarshal(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {
|
||||||
|
contents, err := extractFromPath(p, data, optFuncs...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
results := make([]interface{}, 0, len(contents))
|
||||||
|
for _, content := range contents {
|
||||||
|
var result interface{}
|
||||||
|
if err := Unmarshal(content, &result); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
results = append(results, result)
|
||||||
|
}
|
||||||
|
if err := decoder.AssignValue(reflect.ValueOf(results), reflect.ValueOf(v)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get extract and substitute the value of the part corresponding to JSON Path from the input value.
|
||||||
|
func (p *Path) Get(src, dst interface{}) error {
|
||||||
|
return p.path.Get(reflect.ValueOf(src), reflect.ValueOf(dst))
|
||||||
|
}
|
6
vendor/golang.org/x/net/http2/h2c/h2c.go
generated
vendored
6
vendor/golang.org/x/net/http2/h2c/h2c.go
generated
vendored
@ -109,6 +109,7 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
if http2VerboseLogs {
|
if http2VerboseLogs {
|
||||||
log.Printf("h2c: error h2c upgrade: %v", err)
|
log.Printf("h2c: error h2c upgrade: %v", err)
|
||||||
}
|
}
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
@ -167,7 +168,10 @@ func h2cUpgrade(w http.ResponseWriter, r *http.Request) (_ net.Conn, settings []
|
|||||||
return nil, nil, errors.New("h2c: connection does not support Hijack")
|
return nil, nil, errors.New("h2c: connection does not support Hijack")
|
||||||
}
|
}
|
||||||
|
|
||||||
body, _ := io.ReadAll(r.Body)
|
body, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
r.Body = io.NopCloser(bytes.NewBuffer(body))
|
r.Body = io.NopCloser(bytes.NewBuffer(body))
|
||||||
|
|
||||||
conn, rw, err := hijacker.Hijack()
|
conn, rw, err := hijacker.Hijack()
|
||||||
|
18
vendor/golang.org/x/net/http2/headermap.go
generated
vendored
18
vendor/golang.org/x/net/http2/headermap.go
generated
vendored
@ -27,7 +27,14 @@ func buildCommonHeaderMaps() {
|
|||||||
"accept-language",
|
"accept-language",
|
||||||
"accept-ranges",
|
"accept-ranges",
|
||||||
"age",
|
"age",
|
||||||
|
"access-control-allow-credentials",
|
||||||
|
"access-control-allow-headers",
|
||||||
|
"access-control-allow-methods",
|
||||||
"access-control-allow-origin",
|
"access-control-allow-origin",
|
||||||
|
"access-control-expose-headers",
|
||||||
|
"access-control-max-age",
|
||||||
|
"access-control-request-headers",
|
||||||
|
"access-control-request-method",
|
||||||
"allow",
|
"allow",
|
||||||
"authorization",
|
"authorization",
|
||||||
"cache-control",
|
"cache-control",
|
||||||
@ -53,6 +60,7 @@ func buildCommonHeaderMaps() {
|
|||||||
"link",
|
"link",
|
||||||
"location",
|
"location",
|
||||||
"max-forwards",
|
"max-forwards",
|
||||||
|
"origin",
|
||||||
"proxy-authenticate",
|
"proxy-authenticate",
|
||||||
"proxy-authorization",
|
"proxy-authorization",
|
||||||
"range",
|
"range",
|
||||||
@ -68,6 +76,8 @@ func buildCommonHeaderMaps() {
|
|||||||
"vary",
|
"vary",
|
||||||
"via",
|
"via",
|
||||||
"www-authenticate",
|
"www-authenticate",
|
||||||
|
"x-forwarded-for",
|
||||||
|
"x-forwarded-proto",
|
||||||
}
|
}
|
||||||
commonLowerHeader = make(map[string]string, len(common))
|
commonLowerHeader = make(map[string]string, len(common))
|
||||||
commonCanonHeader = make(map[string]string, len(common))
|
commonCanonHeader = make(map[string]string, len(common))
|
||||||
@ -85,3 +95,11 @@ func lowerHeader(v string) (lower string, ascii bool) {
|
|||||||
}
|
}
|
||||||
return asciiToLower(v)
|
return asciiToLower(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func canonicalHeader(v string) string {
|
||||||
|
buildCommonHeaderMapsOnce()
|
||||||
|
if s, ok := commonCanonHeader[v]; ok {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return http.CanonicalHeaderKey(v)
|
||||||
|
}
|
||||||
|
5
vendor/golang.org/x/net/http2/hpack/encode.go
generated
vendored
5
vendor/golang.org/x/net/http2/hpack/encode.go
generated
vendored
@ -116,6 +116,11 @@ func (e *Encoder) SetMaxDynamicTableSize(v uint32) {
|
|||||||
e.dynTab.setMaxSize(v)
|
e.dynTab.setMaxSize(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MaxDynamicTableSize returns the current dynamic header table size.
|
||||||
|
func (e *Encoder) MaxDynamicTableSize() (v uint32) {
|
||||||
|
return e.dynTab.maxSize
|
||||||
|
}
|
||||||
|
|
||||||
// SetMaxDynamicTableSizeLimit changes the maximum value that can be
|
// SetMaxDynamicTableSizeLimit changes the maximum value that can be
|
||||||
// specified in SetMaxDynamicTableSize to v. By default, it is set to
|
// specified in SetMaxDynamicTableSize to v. By default, it is set to
|
||||||
// 4096, which is the same size of the default dynamic header table
|
// 4096, which is the same size of the default dynamic header table
|
||||||
|
188
vendor/golang.org/x/net/http2/hpack/static_table.go
generated
vendored
Normal file
188
vendor/golang.org/x/net/http2/hpack/static_table.go
generated
vendored
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
// go generate gen.go
|
||||||
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
|
package hpack
|
||||||
|
|
||||||
|
var staticTable = &headerFieldTable{
|
||||||
|
evictCount: 0,
|
||||||
|
byName: map[string]uint64{
|
||||||
|
":authority": 1,
|
||||||
|
":method": 3,
|
||||||
|
":path": 5,
|
||||||
|
":scheme": 7,
|
||||||
|
":status": 14,
|
||||||
|
"accept-charset": 15,
|
||||||
|
"accept-encoding": 16,
|
||||||
|
"accept-language": 17,
|
||||||
|
"accept-ranges": 18,
|
||||||
|
"accept": 19,
|
||||||
|
"access-control-allow-origin": 20,
|
||||||
|
"age": 21,
|
||||||
|
"allow": 22,
|
||||||
|
"authorization": 23,
|
||||||
|
"cache-control": 24,
|
||||||
|
"content-disposition": 25,
|
||||||
|
"content-encoding": 26,
|
||||||
|
"content-language": 27,
|
||||||
|
"content-length": 28,
|
||||||
|
"content-location": 29,
|
||||||
|
"content-range": 30,
|
||||||
|
"content-type": 31,
|
||||||
|
"cookie": 32,
|
||||||
|
"date": 33,
|
||||||
|
"etag": 34,
|
||||||
|
"expect": 35,
|
||||||
|
"expires": 36,
|
||||||
|
"from": 37,
|
||||||
|
"host": 38,
|
||||||
|
"if-match": 39,
|
||||||
|
"if-modified-since": 40,
|
||||||
|
"if-none-match": 41,
|
||||||
|
"if-range": 42,
|
||||||
|
"if-unmodified-since": 43,
|
||||||
|
"last-modified": 44,
|
||||||
|
"link": 45,
|
||||||
|
"location": 46,
|
||||||
|
"max-forwards": 47,
|
||||||
|
"proxy-authenticate": 48,
|
||||||
|
"proxy-authorization": 49,
|
||||||
|
"range": 50,
|
||||||
|
"referer": 51,
|
||||||
|
"refresh": 52,
|
||||||
|
"retry-after": 53,
|
||||||
|
"server": 54,
|
||||||
|
"set-cookie": 55,
|
||||||
|
"strict-transport-security": 56,
|
||||||
|
"transfer-encoding": 57,
|
||||||
|
"user-agent": 58,
|
||||||
|
"vary": 59,
|
||||||
|
"via": 60,
|
||||||
|
"www-authenticate": 61,
|
||||||
|
},
|
||||||
|
byNameValue: map[pairNameValue]uint64{
|
||||||
|
{name: ":authority", value: ""}: 1,
|
||||||
|
{name: ":method", value: "GET"}: 2,
|
||||||
|
{name: ":method", value: "POST"}: 3,
|
||||||
|
{name: ":path", value: "/"}: 4,
|
||||||
|
{name: ":path", value: "/index.html"}: 5,
|
||||||
|
{name: ":scheme", value: "http"}: 6,
|
||||||
|
{name: ":scheme", value: "https"}: 7,
|
||||||
|
{name: ":status", value: "200"}: 8,
|
||||||
|
{name: ":status", value: "204"}: 9,
|
||||||
|
{name: ":status", value: "206"}: 10,
|
||||||
|
{name: ":status", value: "304"}: 11,
|
||||||
|
{name: ":status", value: "400"}: 12,
|
||||||
|
{name: ":status", value: "404"}: 13,
|
||||||
|
{name: ":status", value: "500"}: 14,
|
||||||
|
{name: "accept-charset", value: ""}: 15,
|
||||||
|
{name: "accept-encoding", value: "gzip, deflate"}: 16,
|
||||||
|
{name: "accept-language", value: ""}: 17,
|
||||||
|
{name: "accept-ranges", value: ""}: 18,
|
||||||
|
{name: "accept", value: ""}: 19,
|
||||||
|
{name: "access-control-allow-origin", value: ""}: 20,
|
||||||
|
{name: "age", value: ""}: 21,
|
||||||
|
{name: "allow", value: ""}: 22,
|
||||||
|
{name: "authorization", value: ""}: 23,
|
||||||
|
{name: "cache-control", value: ""}: 24,
|
||||||
|
{name: "content-disposition", value: ""}: 25,
|
||||||
|
{name: "content-encoding", value: ""}: 26,
|
||||||
|
{name: "content-language", value: ""}: 27,
|
||||||
|
{name: "content-length", value: ""}: 28,
|
||||||
|
{name: "content-location", value: ""}: 29,
|
||||||
|
{name: "content-range", value: ""}: 30,
|
||||||
|
{name: "content-type", value: ""}: 31,
|
||||||
|
{name: "cookie", value: ""}: 32,
|
||||||
|
{name: "date", value: ""}: 33,
|
||||||
|
{name: "etag", value: ""}: 34,
|
||||||
|
{name: "expect", value: ""}: 35,
|
||||||
|
{name: "expires", value: ""}: 36,
|
||||||
|
{name: "from", value: ""}: 37,
|
||||||
|
{name: "host", value: ""}: 38,
|
||||||
|
{name: "if-match", value: ""}: 39,
|
||||||
|
{name: "if-modified-since", value: ""}: 40,
|
||||||
|
{name: "if-none-match", value: ""}: 41,
|
||||||
|
{name: "if-range", value: ""}: 42,
|
||||||
|
{name: "if-unmodified-since", value: ""}: 43,
|
||||||
|
{name: "last-modified", value: ""}: 44,
|
||||||
|
{name: "link", value: ""}: 45,
|
||||||
|
{name: "location", value: ""}: 46,
|
||||||
|
{name: "max-forwards", value: ""}: 47,
|
||||||
|
{name: "proxy-authenticate", value: ""}: 48,
|
||||||
|
{name: "proxy-authorization", value: ""}: 49,
|
||||||
|
{name: "range", value: ""}: 50,
|
||||||
|
{name: "referer", value: ""}: 51,
|
||||||
|
{name: "refresh", value: ""}: 52,
|
||||||
|
{name: "retry-after", value: ""}: 53,
|
||||||
|
{name: "server", value: ""}: 54,
|
||||||
|
{name: "set-cookie", value: ""}: 55,
|
||||||
|
{name: "strict-transport-security", value: ""}: 56,
|
||||||
|
{name: "transfer-encoding", value: ""}: 57,
|
||||||
|
{name: "user-agent", value: ""}: 58,
|
||||||
|
{name: "vary", value: ""}: 59,
|
||||||
|
{name: "via", value: ""}: 60,
|
||||||
|
{name: "www-authenticate", value: ""}: 61,
|
||||||
|
},
|
||||||
|
ents: []HeaderField{
|
||||||
|
{Name: ":authority", Value: "", Sensitive: false},
|
||||||
|
{Name: ":method", Value: "GET", Sensitive: false},
|
||||||
|
{Name: ":method", Value: "POST", Sensitive: false},
|
||||||
|
{Name: ":path", Value: "/", Sensitive: false},
|
||||||
|
{Name: ":path", Value: "/index.html", Sensitive: false},
|
||||||
|
{Name: ":scheme", Value: "http", Sensitive: false},
|
||||||
|
{Name: ":scheme", Value: "https", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "200", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "204", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "206", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "304", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "400", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "404", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "500", Sensitive: false},
|
||||||
|
{Name: "accept-charset", Value: "", Sensitive: false},
|
||||||
|
{Name: "accept-encoding", Value: "gzip, deflate", Sensitive: false},
|
||||||
|
{Name: "accept-language", Value: "", Sensitive: false},
|
||||||
|
{Name: "accept-ranges", Value: "", Sensitive: false},
|
||||||
|
{Name: "accept", Value: "", Sensitive: false},
|
||||||
|
{Name: "access-control-allow-origin", Value: "", Sensitive: false},
|
||||||
|
{Name: "age", Value: "", Sensitive: false},
|
||||||
|
{Name: "allow", Value: "", Sensitive: false},
|
||||||
|
{Name: "authorization", Value: "", Sensitive: false},
|
||||||
|
{Name: "cache-control", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-disposition", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-encoding", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-language", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-length", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-location", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-range", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-type", Value: "", Sensitive: false},
|
||||||
|
{Name: "cookie", Value: "", Sensitive: false},
|
||||||
|
{Name: "date", Value: "", Sensitive: false},
|
||||||
|
{Name: "etag", Value: "", Sensitive: false},
|
||||||
|
{Name: "expect", Value: "", Sensitive: false},
|
||||||
|
{Name: "expires", Value: "", Sensitive: false},
|
||||||
|
{Name: "from", Value: "", Sensitive: false},
|
||||||
|
{Name: "host", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-match", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-modified-since", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-none-match", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-range", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-unmodified-since", Value: "", Sensitive: false},
|
||||||
|
{Name: "last-modified", Value: "", Sensitive: false},
|
||||||
|
{Name: "link", Value: "", Sensitive: false},
|
||||||
|
{Name: "location", Value: "", Sensitive: false},
|
||||||
|
{Name: "max-forwards", Value: "", Sensitive: false},
|
||||||
|
{Name: "proxy-authenticate", Value: "", Sensitive: false},
|
||||||
|
{Name: "proxy-authorization", Value: "", Sensitive: false},
|
||||||
|
{Name: "range", Value: "", Sensitive: false},
|
||||||
|
{Name: "referer", Value: "", Sensitive: false},
|
||||||
|
{Name: "refresh", Value: "", Sensitive: false},
|
||||||
|
{Name: "retry-after", Value: "", Sensitive: false},
|
||||||
|
{Name: "server", Value: "", Sensitive: false},
|
||||||
|
{Name: "set-cookie", Value: "", Sensitive: false},
|
||||||
|
{Name: "strict-transport-security", Value: "", Sensitive: false},
|
||||||
|
{Name: "transfer-encoding", Value: "", Sensitive: false},
|
||||||
|
{Name: "user-agent", Value: "", Sensitive: false},
|
||||||
|
{Name: "vary", Value: "", Sensitive: false},
|
||||||
|
{Name: "via", Value: "", Sensitive: false},
|
||||||
|
{Name: "www-authenticate", Value: "", Sensitive: false},
|
||||||
|
},
|
||||||
|
}
|
78
vendor/golang.org/x/net/http2/hpack/tables.go
generated
vendored
78
vendor/golang.org/x/net/http2/hpack/tables.go
generated
vendored
@ -96,8 +96,7 @@ func (t *headerFieldTable) evictOldest(n int) {
|
|||||||
// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic
|
// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic
|
||||||
// table, the return value i actually refers to the entry t.ents[t.len()-i].
|
// table, the return value i actually refers to the entry t.ents[t.len()-i].
|
||||||
//
|
//
|
||||||
// All tables are assumed to be a dynamic tables except for the global
|
// All tables are assumed to be a dynamic tables except for the global staticTable.
|
||||||
// staticTable pointer.
|
|
||||||
//
|
//
|
||||||
// See Section 2.3.3.
|
// See Section 2.3.3.
|
||||||
func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
|
func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
|
||||||
@ -125,81 +124,6 @@ func (t *headerFieldTable) idToIndex(id uint64) uint64 {
|
|||||||
return k + 1
|
return k + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B
|
|
||||||
var staticTable = newStaticTable()
|
|
||||||
var staticTableEntries = [...]HeaderField{
|
|
||||||
{Name: ":authority"},
|
|
||||||
{Name: ":method", Value: "GET"},
|
|
||||||
{Name: ":method", Value: "POST"},
|
|
||||||
{Name: ":path", Value: "/"},
|
|
||||||
{Name: ":path", Value: "/index.html"},
|
|
||||||
{Name: ":scheme", Value: "http"},
|
|
||||||
{Name: ":scheme", Value: "https"},
|
|
||||||
{Name: ":status", Value: "200"},
|
|
||||||
{Name: ":status", Value: "204"},
|
|
||||||
{Name: ":status", Value: "206"},
|
|
||||||
{Name: ":status", Value: "304"},
|
|
||||||
{Name: ":status", Value: "400"},
|
|
||||||
{Name: ":status", Value: "404"},
|
|
||||||
{Name: ":status", Value: "500"},
|
|
||||||
{Name: "accept-charset"},
|
|
||||||
{Name: "accept-encoding", Value: "gzip, deflate"},
|
|
||||||
{Name: "accept-language"},
|
|
||||||
{Name: "accept-ranges"},
|
|
||||||
{Name: "accept"},
|
|
||||||
{Name: "access-control-allow-origin"},
|
|
||||||
{Name: "age"},
|
|
||||||
{Name: "allow"},
|
|
||||||
{Name: "authorization"},
|
|
||||||
{Name: "cache-control"},
|
|
||||||
{Name: "content-disposition"},
|
|
||||||
{Name: "content-encoding"},
|
|
||||||
{Name: "content-language"},
|
|
||||||
{Name: "content-length"},
|
|
||||||
{Name: "content-location"},
|
|
||||||
{Name: "content-range"},
|
|
||||||
{Name: "content-type"},
|
|
||||||
{Name: "cookie"},
|
|
||||||
{Name: "date"},
|
|
||||||
{Name: "etag"},
|
|
||||||
{Name: "expect"},
|
|
||||||
{Name: "expires"},
|
|
||||||
{Name: "from"},
|
|
||||||
{Name: "host"},
|
|
||||||
{Name: "if-match"},
|
|
||||||
{Name: "if-modified-since"},
|
|
||||||
{Name: "if-none-match"},
|
|
||||||
{Name: "if-range"},
|
|
||||||
{Name: "if-unmodified-since"},
|
|
||||||
{Name: "last-modified"},
|
|
||||||
{Name: "link"},
|
|
||||||
{Name: "location"},
|
|
||||||
{Name: "max-forwards"},
|
|
||||||
{Name: "proxy-authenticate"},
|
|
||||||
{Name: "proxy-authorization"},
|
|
||||||
{Name: "range"},
|
|
||||||
{Name: "referer"},
|
|
||||||
{Name: "refresh"},
|
|
||||||
{Name: "retry-after"},
|
|
||||||
{Name: "server"},
|
|
||||||
{Name: "set-cookie"},
|
|
||||||
{Name: "strict-transport-security"},
|
|
||||||
{Name: "transfer-encoding"},
|
|
||||||
{Name: "user-agent"},
|
|
||||||
{Name: "vary"},
|
|
||||||
{Name: "via"},
|
|
||||||
{Name: "www-authenticate"},
|
|
||||||
}
|
|
||||||
|
|
||||||
func newStaticTable() *headerFieldTable {
|
|
||||||
t := &headerFieldTable{}
|
|
||||||
t.init()
|
|
||||||
for _, e := range staticTableEntries[:] {
|
|
||||||
t.addEntry(e)
|
|
||||||
}
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
var huffmanCodes = [256]uint32{
|
var huffmanCodes = [256]uint32{
|
||||||
0x1ff8,
|
0x1ff8,
|
||||||
0x7fffd8,
|
0x7fffd8,
|
||||||
|
236
vendor/golang.org/x/net/http2/server.go
generated
vendored
236
vendor/golang.org/x/net/http2/server.go
generated
vendored
@ -98,6 +98,19 @@ type Server struct {
|
|||||||
// the HTTP/2 spec's recommendations.
|
// the HTTP/2 spec's recommendations.
|
||||||
MaxConcurrentStreams uint32
|
MaxConcurrentStreams uint32
|
||||||
|
|
||||||
|
// MaxDecoderHeaderTableSize optionally specifies the http2
|
||||||
|
// SETTINGS_HEADER_TABLE_SIZE to send in the initial settings frame. It
|
||||||
|
// informs the remote endpoint of the maximum size of the header compression
|
||||||
|
// table used to decode header blocks, in octets. If zero, the default value
|
||||||
|
// of 4096 is used.
|
||||||
|
MaxDecoderHeaderTableSize uint32
|
||||||
|
|
||||||
|
// MaxEncoderHeaderTableSize optionally specifies an upper limit for the
|
||||||
|
// header compression table used for encoding request headers. Received
|
||||||
|
// SETTINGS_HEADER_TABLE_SIZE settings are capped at this limit. If zero,
|
||||||
|
// the default value of 4096 is used.
|
||||||
|
MaxEncoderHeaderTableSize uint32
|
||||||
|
|
||||||
// MaxReadFrameSize optionally specifies the largest frame
|
// MaxReadFrameSize optionally specifies the largest frame
|
||||||
// this server is willing to read. A valid value is between
|
// this server is willing to read. A valid value is between
|
||||||
// 16k and 16M, inclusive. If zero or otherwise invalid, a
|
// 16k and 16M, inclusive. If zero or otherwise invalid, a
|
||||||
@ -170,6 +183,20 @@ func (s *Server) maxConcurrentStreams() uint32 {
|
|||||||
return defaultMaxStreams
|
return defaultMaxStreams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) maxDecoderHeaderTableSize() uint32 {
|
||||||
|
if v := s.MaxDecoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) maxEncoderHeaderTableSize() uint32 {
|
||||||
|
if v := s.MaxEncoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
// maxQueuedControlFrames is the maximum number of control frames like
|
// maxQueuedControlFrames is the maximum number of control frames like
|
||||||
// SETTINGS, PING and RST_STREAM that will be queued for writing before
|
// SETTINGS, PING and RST_STREAM that will be queued for writing before
|
||||||
// the connection is closed to prevent memory exhaustion attacks.
|
// the connection is closed to prevent memory exhaustion attacks.
|
||||||
@ -394,7 +421,6 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
|||||||
advMaxStreams: s.maxConcurrentStreams(),
|
advMaxStreams: s.maxConcurrentStreams(),
|
||||||
initialStreamSendWindowSize: initialWindowSize,
|
initialStreamSendWindowSize: initialWindowSize,
|
||||||
maxFrameSize: initialMaxFrameSize,
|
maxFrameSize: initialMaxFrameSize,
|
||||||
headerTableSize: initialHeaderTableSize,
|
|
||||||
serveG: newGoroutineLock(),
|
serveG: newGoroutineLock(),
|
||||||
pushEnabled: true,
|
pushEnabled: true,
|
||||||
sawClientPreface: opts.SawClientPreface,
|
sawClientPreface: opts.SawClientPreface,
|
||||||
@ -424,12 +450,13 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
|||||||
sc.flow.add(initialWindowSize)
|
sc.flow.add(initialWindowSize)
|
||||||
sc.inflow.add(initialWindowSize)
|
sc.inflow.add(initialWindowSize)
|
||||||
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
||||||
|
sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize())
|
||||||
|
|
||||||
fr := NewFramer(sc.bw, c)
|
fr := NewFramer(sc.bw, c)
|
||||||
if s.CountError != nil {
|
if s.CountError != nil {
|
||||||
fr.countError = s.CountError
|
fr.countError = s.CountError
|
||||||
}
|
}
|
||||||
fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)
|
fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil)
|
||||||
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
||||||
fr.SetMaxReadFrameSize(s.maxReadFrameSize())
|
fr.SetMaxReadFrameSize(s.maxReadFrameSize())
|
||||||
sc.framer = fr
|
sc.framer = fr
|
||||||
@ -559,9 +586,9 @@ type serverConn struct {
|
|||||||
streams map[uint32]*stream
|
streams map[uint32]*stream
|
||||||
initialStreamSendWindowSize int32
|
initialStreamSendWindowSize int32
|
||||||
maxFrameSize int32
|
maxFrameSize int32
|
||||||
headerTableSize uint32
|
|
||||||
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
||||||
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
|
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
|
||||||
|
canonHeaderKeysSize int // canonHeader keys size in bytes
|
||||||
writingFrame bool // started writing a frame (on serve goroutine or separate)
|
writingFrame bool // started writing a frame (on serve goroutine or separate)
|
||||||
writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
|
writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
|
||||||
needsFrameFlush bool // last frame write wasn't a flush
|
needsFrameFlush bool // last frame write wasn't a flush
|
||||||
@ -622,7 +649,9 @@ type stream struct {
|
|||||||
resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
|
resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
|
||||||
gotTrailerHeader bool // HEADER frame for trailers was seen
|
gotTrailerHeader bool // HEADER frame for trailers was seen
|
||||||
wroteHeaders bool // whether we wrote headers (not status 100)
|
wroteHeaders bool // whether we wrote headers (not status 100)
|
||||||
|
readDeadline *time.Timer // nil if unused
|
||||||
writeDeadline *time.Timer // nil if unused
|
writeDeadline *time.Timer // nil if unused
|
||||||
|
closeErr error // set before cw is closed
|
||||||
|
|
||||||
trailer http.Header // accumulated trailers
|
trailer http.Header // accumulated trailers
|
||||||
reqTrailer http.Header // handler's Request.Trailer
|
reqTrailer http.Header // handler's Request.Trailer
|
||||||
@ -738,6 +767,13 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// maxCachedCanonicalHeadersKeysSize is an arbitrarily-chosen limit on the size
|
||||||
|
// of the entries in the canonHeader cache.
|
||||||
|
// This should be larger than the size of unique, uncommon header keys likely to
|
||||||
|
// be sent by the peer, while not so high as to permit unreasonable memory usage
|
||||||
|
// if the peer sends an unbounded number of unique header keys.
|
||||||
|
const maxCachedCanonicalHeadersKeysSize = 2048
|
||||||
|
|
||||||
func (sc *serverConn) canonicalHeader(v string) string {
|
func (sc *serverConn) canonicalHeader(v string) string {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
buildCommonHeaderMapsOnce()
|
buildCommonHeaderMapsOnce()
|
||||||
@ -753,14 +789,10 @@ func (sc *serverConn) canonicalHeader(v string) string {
|
|||||||
sc.canonHeader = make(map[string]string)
|
sc.canonHeader = make(map[string]string)
|
||||||
}
|
}
|
||||||
cv = http.CanonicalHeaderKey(v)
|
cv = http.CanonicalHeaderKey(v)
|
||||||
// maxCachedCanonicalHeaders is an arbitrarily-chosen limit on the number of
|
size := 100 + len(v)*2 // 100 bytes of map overhead + key + value
|
||||||
// entries in the canonHeader cache. This should be larger than the number
|
if sc.canonHeaderKeysSize+size <= maxCachedCanonicalHeadersKeysSize {
|
||||||
// of unique, uncommon header keys likely to be sent by the peer, while not
|
|
||||||
// so high as to permit unreasonable memory usage if the peer sends an unbounded
|
|
||||||
// number of unique header keys.
|
|
||||||
const maxCachedCanonicalHeaders = 32
|
|
||||||
if len(sc.canonHeader) < maxCachedCanonicalHeaders {
|
|
||||||
sc.canonHeader[v] = cv
|
sc.canonHeader[v] = cv
|
||||||
|
sc.canonHeaderKeysSize += size
|
||||||
}
|
}
|
||||||
return cv
|
return cv
|
||||||
}
|
}
|
||||||
@ -862,6 +894,7 @@ func (sc *serverConn) serve() {
|
|||||||
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
|
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
|
||||||
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
||||||
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
||||||
|
{SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()},
|
||||||
{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
|
{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -869,7 +902,9 @@ func (sc *serverConn) serve() {
|
|||||||
|
|
||||||
// Each connection starts with initialWindowSize inflow tokens.
|
// Each connection starts with initialWindowSize inflow tokens.
|
||||||
// If a higher value is configured, we add more tokens.
|
// If a higher value is configured, we add more tokens.
|
||||||
sc.sendWindowUpdate(nil)
|
if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 {
|
||||||
|
sc.sendWindowUpdate(nil, int(diff))
|
||||||
|
}
|
||||||
|
|
||||||
if err := sc.readPreface(); err != nil {
|
if err := sc.readPreface(); err != nil {
|
||||||
sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
|
sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
|
||||||
@ -946,6 +981,8 @@ func (sc *serverConn) serve() {
|
|||||||
}
|
}
|
||||||
case *startPushRequest:
|
case *startPushRequest:
|
||||||
sc.startPush(v)
|
sc.startPush(v)
|
||||||
|
case func(*serverConn):
|
||||||
|
v(sc)
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("unexpected type %T", v))
|
panic(fmt.Sprintf("unexpected type %T", v))
|
||||||
}
|
}
|
||||||
@ -1459,6 +1496,21 @@ func (sc *serverConn) processFrame(f Frame) error {
|
|||||||
sc.sawFirstSettings = true
|
sc.sawFirstSettings = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Discard frames for streams initiated after the identified last
|
||||||
|
// stream sent in a GOAWAY, or all frames after sending an error.
|
||||||
|
// We still need to return connection-level flow control for DATA frames.
|
||||||
|
// RFC 9113 Section 6.8.
|
||||||
|
if sc.inGoAway && (sc.goAwayCode != ErrCodeNo || f.Header().StreamID > sc.maxClientStreamID) {
|
||||||
|
|
||||||
|
if f, ok := f.(*DataFrame); ok {
|
||||||
|
if sc.inflow.available() < int32(f.Length) {
|
||||||
|
return sc.countError("data_flow", streamError(f.Header().StreamID, ErrCodeFlowControl))
|
||||||
|
}
|
||||||
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
switch f := f.(type) {
|
switch f := f.(type) {
|
||||||
case *SettingsFrame:
|
case *SettingsFrame:
|
||||||
return sc.processSettings(f)
|
return sc.processSettings(f)
|
||||||
@ -1501,9 +1553,6 @@ func (sc *serverConn) processPing(f *PingFrame) error {
|
|||||||
// PROTOCOL_ERROR."
|
// PROTOCOL_ERROR."
|
||||||
return sc.countError("ping_on_stream", ConnectionError(ErrCodeProtocol))
|
return sc.countError("ping_on_stream", ConnectionError(ErrCodeProtocol))
|
||||||
}
|
}
|
||||||
if sc.inGoAway && sc.goAwayCode != ErrCodeNo {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
sc.writeFrame(FrameWriteRequest{write: writePingAck{f}})
|
sc.writeFrame(FrameWriteRequest{write: writePingAck{f}})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -1565,6 +1614,9 @@ func (sc *serverConn) closeStream(st *stream, err error) {
|
|||||||
panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
|
panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
|
||||||
}
|
}
|
||||||
st.state = stateClosed
|
st.state = stateClosed
|
||||||
|
if st.readDeadline != nil {
|
||||||
|
st.readDeadline.Stop()
|
||||||
|
}
|
||||||
if st.writeDeadline != nil {
|
if st.writeDeadline != nil {
|
||||||
st.writeDeadline.Stop()
|
st.writeDeadline.Stop()
|
||||||
}
|
}
|
||||||
@ -1586,10 +1638,18 @@ func (sc *serverConn) closeStream(st *stream, err error) {
|
|||||||
if p := st.body; p != nil {
|
if p := st.body; p != nil {
|
||||||
// Return any buffered unread bytes worth of conn-level flow control.
|
// Return any buffered unread bytes worth of conn-level flow control.
|
||||||
// See golang.org/issue/16481
|
// See golang.org/issue/16481
|
||||||
sc.sendWindowUpdate(nil)
|
sc.sendWindowUpdate(nil, p.Len())
|
||||||
|
|
||||||
p.CloseWithError(err)
|
p.CloseWithError(err)
|
||||||
}
|
}
|
||||||
|
if e, ok := err.(StreamError); ok {
|
||||||
|
if e.Cause != nil {
|
||||||
|
err = e.Cause
|
||||||
|
} else {
|
||||||
|
err = errStreamClosed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
st.closeErr = err
|
||||||
st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc
|
st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc
|
||||||
sc.writeSched.CloseStream(st.id)
|
sc.writeSched.CloseStream(st.id)
|
||||||
}
|
}
|
||||||
@ -1632,7 +1692,6 @@ func (sc *serverConn) processSetting(s Setting) error {
|
|||||||
}
|
}
|
||||||
switch s.ID {
|
switch s.ID {
|
||||||
case SettingHeaderTableSize:
|
case SettingHeaderTableSize:
|
||||||
sc.headerTableSize = s.Val
|
|
||||||
sc.hpackEncoder.SetMaxDynamicTableSize(s.Val)
|
sc.hpackEncoder.SetMaxDynamicTableSize(s.Val)
|
||||||
case SettingEnablePush:
|
case SettingEnablePush:
|
||||||
sc.pushEnabled = s.Val != 0
|
sc.pushEnabled = s.Val != 0
|
||||||
@ -1686,16 +1745,6 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
|
|||||||
func (sc *serverConn) processData(f *DataFrame) error {
|
func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
id := f.Header().StreamID
|
id := f.Header().StreamID
|
||||||
if sc.inGoAway && (sc.goAwayCode != ErrCodeNo || id > sc.maxClientStreamID) {
|
|
||||||
// Discard all DATA frames if the GOAWAY is due to an
|
|
||||||
// error, or:
|
|
||||||
//
|
|
||||||
// Section 6.8: After sending a GOAWAY frame, the sender
|
|
||||||
// can discard frames for streams initiated by the
|
|
||||||
// receiver with identifiers higher than the identified
|
|
||||||
// last stream.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
data := f.Data()
|
data := f.Data()
|
||||||
state, st := sc.state(id)
|
state, st := sc.state(id)
|
||||||
@ -1734,7 +1783,7 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
|||||||
// sendWindowUpdate, which also schedules sending the
|
// sendWindowUpdate, which also schedules sending the
|
||||||
// frames.
|
// frames.
|
||||||
sc.inflow.take(int32(f.Length))
|
sc.inflow.take(int32(f.Length))
|
||||||
sc.sendWindowUpdate(nil) // conn-level
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
|
||||||
if st != nil && st.resetQueued {
|
if st != nil && st.resetQueued {
|
||||||
// Already have a stream error in flight. Don't send another.
|
// Already have a stream error in flight. Don't send another.
|
||||||
@ -1752,7 +1801,7 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
|||||||
return sc.countError("data_flow", streamError(id, ErrCodeFlowControl))
|
return sc.countError("data_flow", streamError(id, ErrCodeFlowControl))
|
||||||
}
|
}
|
||||||
sc.inflow.take(int32(f.Length))
|
sc.inflow.take(int32(f.Length))
|
||||||
sc.sendWindowUpdate(nil) // conn-level
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
|
||||||
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
|
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
|
||||||
// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
|
// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
|
||||||
@ -1770,7 +1819,7 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
|||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
wrote, err := st.body.Write(data)
|
wrote, err := st.body.Write(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc.sendWindowUpdate32(nil, int32(f.Length)-int32(wrote))
|
sc.sendWindowUpdate(nil, int(f.Length)-wrote)
|
||||||
return sc.countError("body_write_err", streamError(id, ErrCodeStreamClosed))
|
return sc.countError("body_write_err", streamError(id, ErrCodeStreamClosed))
|
||||||
}
|
}
|
||||||
if wrote != len(data) {
|
if wrote != len(data) {
|
||||||
@ -1838,19 +1887,27 @@ func (st *stream) copyTrailersToHandlerRequest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// onReadTimeout is run on its own goroutine (from time.AfterFunc)
|
||||||
|
// when the stream's ReadTimeout has fired.
|
||||||
|
func (st *stream) onReadTimeout() {
|
||||||
|
// Wrap the ErrDeadlineExceeded to avoid callers depending on us
|
||||||
|
// returning the bare error.
|
||||||
|
st.body.CloseWithError(fmt.Errorf("%w", os.ErrDeadlineExceeded))
|
||||||
|
}
|
||||||
|
|
||||||
// onWriteTimeout is run on its own goroutine (from time.AfterFunc)
|
// onWriteTimeout is run on its own goroutine (from time.AfterFunc)
|
||||||
// when the stream's WriteTimeout has fired.
|
// when the stream's WriteTimeout has fired.
|
||||||
func (st *stream) onWriteTimeout() {
|
func (st *stream) onWriteTimeout() {
|
||||||
st.sc.writeFrameFromHandler(FrameWriteRequest{write: streamError(st.id, ErrCodeInternal)})
|
st.sc.writeFrameFromHandler(FrameWriteRequest{write: StreamError{
|
||||||
|
StreamID: st.id,
|
||||||
|
Code: ErrCodeInternal,
|
||||||
|
Cause: os.ErrDeadlineExceeded,
|
||||||
|
}})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
id := f.StreamID
|
id := f.StreamID
|
||||||
if sc.inGoAway {
|
|
||||||
// Ignore.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// http://tools.ietf.org/html/rfc7540#section-5.1.1
|
// http://tools.ietf.org/html/rfc7540#section-5.1.1
|
||||||
// Streams initiated by a client MUST use odd-numbered stream
|
// Streams initiated by a client MUST use odd-numbered stream
|
||||||
// identifiers. [...] An endpoint that receives an unexpected
|
// identifiers. [...] An endpoint that receives an unexpected
|
||||||
@ -1953,6 +2010,9 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
|||||||
// (in Go 1.8), though. That's a more sane option anyway.
|
// (in Go 1.8), though. That's a more sane option anyway.
|
||||||
if sc.hs.ReadTimeout != 0 {
|
if sc.hs.ReadTimeout != 0 {
|
||||||
sc.conn.SetReadDeadline(time.Time{})
|
sc.conn.SetReadDeadline(time.Time{})
|
||||||
|
if st.body != nil {
|
||||||
|
st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
go sc.runHandler(rw, req, handler)
|
go sc.runHandler(rw, req, handler)
|
||||||
@ -2021,9 +2081,6 @@ func (sc *serverConn) checkPriority(streamID uint32, p PriorityParam) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (sc *serverConn) processPriority(f *PriorityFrame) error {
|
func (sc *serverConn) processPriority(f *PriorityFrame) error {
|
||||||
if sc.inGoAway {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil {
|
if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -2322,39 +2379,24 @@ func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) {
|
|||||||
|
|
||||||
func (sc *serverConn) noteBodyRead(st *stream, n int) {
|
func (sc *serverConn) noteBodyRead(st *stream, n int) {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
sc.sendWindowUpdate(nil) // conn-level
|
sc.sendWindowUpdate(nil, n) // conn-level
|
||||||
if st.state != stateHalfClosedRemote && st.state != stateClosed {
|
if st.state != stateHalfClosedRemote && st.state != stateClosed {
|
||||||
// Don't send this WINDOW_UPDATE if the stream is closed
|
// Don't send this WINDOW_UPDATE if the stream is closed
|
||||||
// remotely.
|
// remotely.
|
||||||
sc.sendWindowUpdate(st)
|
sc.sendWindowUpdate(st, n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// st may be nil for conn-level
|
// st may be nil for conn-level
|
||||||
func (sc *serverConn) sendWindowUpdate(st *stream) {
|
func (sc *serverConn) sendWindowUpdate(st *stream, n int) {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
|
|
||||||
var n int32
|
|
||||||
if st == nil {
|
|
||||||
if avail, windowSize := sc.inflow.available(), sc.srv.initialConnRecvWindowSize(); avail > windowSize/2 {
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
n = windowSize - avail
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if avail, windowSize := st.inflow.available(), sc.srv.initialStreamRecvWindowSize(); avail > windowSize/2 {
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
n = windowSize - avail
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// "The legal range for the increment to the flow control
|
// "The legal range for the increment to the flow control
|
||||||
// window is 1 to 2^31-1 (2,147,483,647) octets."
|
// window is 1 to 2^31-1 (2,147,483,647) octets."
|
||||||
// A Go Read call on 64-bit machines could in theory read
|
// A Go Read call on 64-bit machines could in theory read
|
||||||
// a larger Read than this. Very unlikely, but we handle it here
|
// a larger Read than this. Very unlikely, but we handle it here
|
||||||
// rather than elsewhere for now.
|
// rather than elsewhere for now.
|
||||||
const maxUint31 = 1<<31 - 1
|
const maxUint31 = 1<<31 - 1
|
||||||
for n >= maxUint31 {
|
for n > maxUint31 {
|
||||||
sc.sendWindowUpdate32(st, maxUint31)
|
sc.sendWindowUpdate32(st, maxUint31)
|
||||||
n -= maxUint31
|
n -= maxUint31
|
||||||
}
|
}
|
||||||
@ -2474,7 +2516,15 @@ type responseWriterState struct {
|
|||||||
|
|
||||||
type chunkWriter struct{ rws *responseWriterState }
|
type chunkWriter struct{ rws *responseWriterState }
|
||||||
|
|
||||||
func (cw chunkWriter) Write(p []byte) (n int, err error) { return cw.rws.writeChunk(p) }
|
func (cw chunkWriter) Write(p []byte) (n int, err error) {
|
||||||
|
n, err = cw.rws.writeChunk(p)
|
||||||
|
if err == errStreamClosed {
|
||||||
|
// If writing failed because the stream has been closed,
|
||||||
|
// return the reason it was closed.
|
||||||
|
err = cw.rws.stream.closeErr
|
||||||
|
}
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) > 0 }
|
func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) > 0 }
|
||||||
|
|
||||||
@ -2668,23 +2718,85 @@ func (rws *responseWriterState) promoteUndeclaredTrailers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
|
||||||
|
st := w.rws.stream
|
||||||
|
if !deadline.IsZero() && deadline.Before(time.Now()) {
|
||||||
|
// If we're setting a deadline in the past, reset the stream immediately
|
||||||
|
// so writes after SetWriteDeadline returns will fail.
|
||||||
|
st.onReadTimeout()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
w.rws.conn.sendServeMsg(func(sc *serverConn) {
|
||||||
|
if st.readDeadline != nil {
|
||||||
|
if !st.readDeadline.Stop() {
|
||||||
|
// Deadline already exceeded, or stream has been closed.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if deadline.IsZero() {
|
||||||
|
st.readDeadline = nil
|
||||||
|
} else if st.readDeadline == nil {
|
||||||
|
st.readDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onReadTimeout)
|
||||||
|
} else {
|
||||||
|
st.readDeadline.Reset(deadline.Sub(time.Now()))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
|
||||||
|
st := w.rws.stream
|
||||||
|
if !deadline.IsZero() && deadline.Before(time.Now()) {
|
||||||
|
// If we're setting a deadline in the past, reset the stream immediately
|
||||||
|
// so writes after SetWriteDeadline returns will fail.
|
||||||
|
st.onWriteTimeout()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
w.rws.conn.sendServeMsg(func(sc *serverConn) {
|
||||||
|
if st.writeDeadline != nil {
|
||||||
|
if !st.writeDeadline.Stop() {
|
||||||
|
// Deadline already exceeded, or stream has been closed.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if deadline.IsZero() {
|
||||||
|
st.writeDeadline = nil
|
||||||
|
} else if st.writeDeadline == nil {
|
||||||
|
st.writeDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onWriteTimeout)
|
||||||
|
} else {
|
||||||
|
st.writeDeadline.Reset(deadline.Sub(time.Now()))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *responseWriter) Flush() {
|
func (w *responseWriter) Flush() {
|
||||||
|
w.FlushError()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *responseWriter) FlushError() error {
|
||||||
rws := w.rws
|
rws := w.rws
|
||||||
if rws == nil {
|
if rws == nil {
|
||||||
panic("Header called after Handler finished")
|
panic("Header called after Handler finished")
|
||||||
}
|
}
|
||||||
|
var err error
|
||||||
if rws.bw.Buffered() > 0 {
|
if rws.bw.Buffered() > 0 {
|
||||||
if err := rws.bw.Flush(); err != nil {
|
err = rws.bw.Flush()
|
||||||
// Ignore the error. The frame writer already knows.
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// The bufio.Writer won't call chunkWriter.Write
|
// The bufio.Writer won't call chunkWriter.Write
|
||||||
// (writeChunk with zero bytes, so we have to do it
|
// (writeChunk with zero bytes, so we have to do it
|
||||||
// ourselves to force the HTTP response header and/or
|
// ourselves to force the HTTP response header and/or
|
||||||
// final DATA frame (with END_STREAM) to be sent.
|
// final DATA frame (with END_STREAM) to be sent.
|
||||||
rws.writeChunk(nil)
|
_, err = chunkWriter{rws}.Write(nil)
|
||||||
|
if err == nil {
|
||||||
|
select {
|
||||||
|
case <-rws.stream.cw:
|
||||||
|
err = rws.stream.closeErr
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *responseWriter) CloseNotify() <-chan bool {
|
func (w *responseWriter) CloseNotify() <-chan bool {
|
||||||
|
113
vendor/golang.org/x/net/http2/transport.go
generated
vendored
113
vendor/golang.org/x/net/http2/transport.go
generated
vendored
@ -16,6 +16,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/fs"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
mathrand "math/rand"
|
mathrand "math/rand"
|
||||||
@ -117,6 +118,28 @@ type Transport struct {
|
|||||||
// to mean no limit.
|
// to mean no limit.
|
||||||
MaxHeaderListSize uint32
|
MaxHeaderListSize uint32
|
||||||
|
|
||||||
|
// MaxReadFrameSize is the http2 SETTINGS_MAX_FRAME_SIZE to send in the
|
||||||
|
// initial settings frame. It is the size in bytes of the largest frame
|
||||||
|
// payload that the sender is willing to receive. If 0, no setting is
|
||||||
|
// sent, and the value is provided by the peer, which should be 16384
|
||||||
|
// according to the spec:
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc7540#section-6.5.2.
|
||||||
|
// Values are bounded in the range 16k to 16M.
|
||||||
|
MaxReadFrameSize uint32
|
||||||
|
|
||||||
|
// MaxDecoderHeaderTableSize optionally specifies the http2
|
||||||
|
// SETTINGS_HEADER_TABLE_SIZE to send in the initial settings frame. It
|
||||||
|
// informs the remote endpoint of the maximum size of the header compression
|
||||||
|
// table used to decode header blocks, in octets. If zero, the default value
|
||||||
|
// of 4096 is used.
|
||||||
|
MaxDecoderHeaderTableSize uint32
|
||||||
|
|
||||||
|
// MaxEncoderHeaderTableSize optionally specifies an upper limit for the
|
||||||
|
// header compression table used for encoding request headers. Received
|
||||||
|
// SETTINGS_HEADER_TABLE_SIZE settings are capped at this limit. If zero,
|
||||||
|
// the default value of 4096 is used.
|
||||||
|
MaxEncoderHeaderTableSize uint32
|
||||||
|
|
||||||
// StrictMaxConcurrentStreams controls whether the server's
|
// StrictMaxConcurrentStreams controls whether the server's
|
||||||
// SETTINGS_MAX_CONCURRENT_STREAMS should be respected
|
// SETTINGS_MAX_CONCURRENT_STREAMS should be respected
|
||||||
// globally. If false, new TCP connections are created to the
|
// globally. If false, new TCP connections are created to the
|
||||||
@ -170,6 +193,19 @@ func (t *Transport) maxHeaderListSize() uint32 {
|
|||||||
return t.MaxHeaderListSize
|
return t.MaxHeaderListSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transport) maxFrameReadSize() uint32 {
|
||||||
|
if t.MaxReadFrameSize == 0 {
|
||||||
|
return 0 // use the default provided by the peer
|
||||||
|
}
|
||||||
|
if t.MaxReadFrameSize < minMaxFrameSize {
|
||||||
|
return minMaxFrameSize
|
||||||
|
}
|
||||||
|
if t.MaxReadFrameSize > maxFrameSize {
|
||||||
|
return maxFrameSize
|
||||||
|
}
|
||||||
|
return t.MaxReadFrameSize
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transport) disableCompression() bool {
|
func (t *Transport) disableCompression() bool {
|
||||||
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
||||||
}
|
}
|
||||||
@ -292,10 +328,11 @@ type ClientConn struct {
|
|||||||
lastActive time.Time
|
lastActive time.Time
|
||||||
lastIdle time.Time // time last idle
|
lastIdle time.Time // time last idle
|
||||||
// Settings from peer: (also guarded by wmu)
|
// Settings from peer: (also guarded by wmu)
|
||||||
maxFrameSize uint32
|
maxFrameSize uint32
|
||||||
maxConcurrentStreams uint32
|
maxConcurrentStreams uint32
|
||||||
peerMaxHeaderListSize uint64
|
peerMaxHeaderListSize uint64
|
||||||
initialWindowSize uint32
|
peerMaxHeaderTableSize uint32
|
||||||
|
initialWindowSize uint32
|
||||||
|
|
||||||
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
|
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
|
||||||
// Write to reqHeaderMu to lock it, read from it to unlock.
|
// Write to reqHeaderMu to lock it, read from it to unlock.
|
||||||
@ -501,6 +538,15 @@ func authorityAddr(scheme string, authority string) (addr string) {
|
|||||||
return net.JoinHostPort(host, port)
|
return net.JoinHostPort(host, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var retryBackoffHook func(time.Duration) *time.Timer
|
||||||
|
|
||||||
|
func backoffNewTimer(d time.Duration) *time.Timer {
|
||||||
|
if retryBackoffHook != nil {
|
||||||
|
return retryBackoffHook(d)
|
||||||
|
}
|
||||||
|
return time.NewTimer(d)
|
||||||
|
}
|
||||||
|
|
||||||
// RoundTripOpt is like RoundTrip, but takes options.
|
// RoundTripOpt is like RoundTrip, but takes options.
|
||||||
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
||||||
if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) {
|
if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) {
|
||||||
@ -526,11 +572,14 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
|
|||||||
}
|
}
|
||||||
backoff := float64(uint(1) << (uint(retry) - 1))
|
backoff := float64(uint(1) << (uint(retry) - 1))
|
||||||
backoff += backoff * (0.1 * mathrand.Float64())
|
backoff += backoff * (0.1 * mathrand.Float64())
|
||||||
|
d := time.Second * time.Duration(backoff)
|
||||||
|
timer := backoffNewTimer(d)
|
||||||
select {
|
select {
|
||||||
case <-time.After(time.Second * time.Duration(backoff)):
|
case <-timer.C:
|
||||||
t.vlogf("RoundTrip retrying after failure: %v", err)
|
t.vlogf("RoundTrip retrying after failure: %v", err)
|
||||||
continue
|
continue
|
||||||
case <-req.Context().Done():
|
case <-req.Context().Done():
|
||||||
|
timer.Stop()
|
||||||
err = req.Context().Err()
|
err = req.Context().Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -668,6 +717,20 @@ func (t *Transport) expectContinueTimeout() time.Duration {
|
|||||||
return t.t1.ExpectContinueTimeout
|
return t.t1.ExpectContinueTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transport) maxDecoderHeaderTableSize() uint32 {
|
||||||
|
if v := t.MaxDecoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Transport) maxEncoderHeaderTableSize() uint32 {
|
||||||
|
if v := t.MaxEncoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
||||||
return t.newClientConn(c, t.disableKeepAlives())
|
return t.newClientConn(c, t.disableKeepAlives())
|
||||||
}
|
}
|
||||||
@ -708,15 +771,19 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||||||
})
|
})
|
||||||
cc.br = bufio.NewReader(c)
|
cc.br = bufio.NewReader(c)
|
||||||
cc.fr = NewFramer(cc.bw, cc.br)
|
cc.fr = NewFramer(cc.bw, cc.br)
|
||||||
|
if t.maxFrameReadSize() != 0 {
|
||||||
|
cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize())
|
||||||
|
}
|
||||||
if t.CountError != nil {
|
if t.CountError != nil {
|
||||||
cc.fr.countError = t.CountError
|
cc.fr.countError = t.CountError
|
||||||
}
|
}
|
||||||
cc.fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)
|
maxHeaderTableSize := t.maxDecoderHeaderTableSize()
|
||||||
|
cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil)
|
||||||
cc.fr.MaxHeaderListSize = t.maxHeaderListSize()
|
cc.fr.MaxHeaderListSize = t.maxHeaderListSize()
|
||||||
|
|
||||||
// TODO: SetMaxDynamicTableSize, SetMaxDynamicTableSizeLimit on
|
|
||||||
// henc in response to SETTINGS frames?
|
|
||||||
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
||||||
|
cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize())
|
||||||
|
cc.peerMaxHeaderTableSize = initialHeaderTableSize
|
||||||
|
|
||||||
if t.AllowHTTP {
|
if t.AllowHTTP {
|
||||||
cc.nextStreamID = 3
|
cc.nextStreamID = 3
|
||||||
@ -731,9 +798,15 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||||||
{ID: SettingEnablePush, Val: 0},
|
{ID: SettingEnablePush, Val: 0},
|
||||||
{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
|
{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
|
||||||
}
|
}
|
||||||
|
if max := t.maxFrameReadSize(); max != 0 {
|
||||||
|
initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max})
|
||||||
|
}
|
||||||
if max := t.maxHeaderListSize(); max != 0 {
|
if max := t.maxHeaderListSize(); max != 0 {
|
||||||
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
||||||
}
|
}
|
||||||
|
if maxHeaderTableSize != initialHeaderTableSize {
|
||||||
|
initialSettings = append(initialSettings, Setting{ID: SettingHeaderTableSize, Val: maxHeaderTableSize})
|
||||||
|
}
|
||||||
|
|
||||||
cc.bw.Write(clientPreface)
|
cc.bw.Write(clientPreface)
|
||||||
cc.fr.WriteSettings(initialSettings...)
|
cc.fr.WriteSettings(initialSettings...)
|
||||||
@ -1075,7 +1148,7 @@ var errRequestCanceled = errors.New("net/http: request canceled")
|
|||||||
func commaSeparatedTrailers(req *http.Request) (string, error) {
|
func commaSeparatedTrailers(req *http.Request) (string, error) {
|
||||||
keys := make([]string, 0, len(req.Trailer))
|
keys := make([]string, 0, len(req.Trailer))
|
||||||
for k := range req.Trailer {
|
for k := range req.Trailer {
|
||||||
k = http.CanonicalHeaderKey(k)
|
k = canonicalHeader(k)
|
||||||
switch k {
|
switch k {
|
||||||
case "Transfer-Encoding", "Trailer", "Content-Length":
|
case "Transfer-Encoding", "Trailer", "Content-Length":
|
||||||
return "", fmt.Errorf("invalid Trailer key %q", k)
|
return "", fmt.Errorf("invalid Trailer key %q", k)
|
||||||
@ -1612,7 +1685,7 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) {
|
|||||||
|
|
||||||
var sawEOF bool
|
var sawEOF bool
|
||||||
for !sawEOF {
|
for !sawEOF {
|
||||||
n, err := body.Read(buf[:len(buf)])
|
n, err := body.Read(buf)
|
||||||
if hasContentLen {
|
if hasContentLen {
|
||||||
remainLen -= int64(n)
|
remainLen -= int64(n)
|
||||||
if remainLen == 0 && err == nil {
|
if remainLen == 0 && err == nil {
|
||||||
@ -1915,7 +1988,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
|
|||||||
|
|
||||||
// Header list size is ok. Write the headers.
|
// Header list size is ok. Write the headers.
|
||||||
enumerateHeaders(func(name, value string) {
|
enumerateHeaders(func(name, value string) {
|
||||||
name, ascii := asciiToLower(name)
|
name, ascii := lowerHeader(name)
|
||||||
if !ascii {
|
if !ascii {
|
||||||
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
||||||
// field names have to be ASCII characters (just as in HTTP/1.x).
|
// field names have to be ASCII characters (just as in HTTP/1.x).
|
||||||
@ -1968,7 +2041,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for k, vv := range trailer {
|
for k, vv := range trailer {
|
||||||
lowKey, ascii := asciiToLower(k)
|
lowKey, ascii := lowerHeader(k)
|
||||||
if !ascii {
|
if !ascii {
|
||||||
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
||||||
// field names have to be ASCII characters (just as in HTTP/1.x).
|
// field names have to be ASCII characters (just as in HTTP/1.x).
|
||||||
@ -2301,7 +2374,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
|||||||
Status: status + " " + http.StatusText(statusCode),
|
Status: status + " " + http.StatusText(statusCode),
|
||||||
}
|
}
|
||||||
for _, hf := range regularFields {
|
for _, hf := range regularFields {
|
||||||
key := http.CanonicalHeaderKey(hf.Name)
|
key := canonicalHeader(hf.Name)
|
||||||
if key == "Trailer" {
|
if key == "Trailer" {
|
||||||
t := res.Trailer
|
t := res.Trailer
|
||||||
if t == nil {
|
if t == nil {
|
||||||
@ -2309,7 +2382,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
|||||||
res.Trailer = t
|
res.Trailer = t
|
||||||
}
|
}
|
||||||
foreachHeaderElement(hf.Value, func(v string) {
|
foreachHeaderElement(hf.Value, func(v string) {
|
||||||
t[http.CanonicalHeaderKey(v)] = nil
|
t[canonicalHeader(v)] = nil
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
vv := header[key]
|
vv := header[key]
|
||||||
@ -2414,7 +2487,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr
|
|||||||
|
|
||||||
trailer := make(http.Header)
|
trailer := make(http.Header)
|
||||||
for _, hf := range f.RegularFields() {
|
for _, hf := range f.RegularFields() {
|
||||||
key := http.CanonicalHeaderKey(hf.Name)
|
key := canonicalHeader(hf.Name)
|
||||||
trailer[key] = append(trailer[key], hf.Value)
|
trailer[key] = append(trailer[key], hf.Value)
|
||||||
}
|
}
|
||||||
cs.trailer = trailer
|
cs.trailer = trailer
|
||||||
@ -2760,8 +2833,10 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error {
|
|||||||
cc.cond.Broadcast()
|
cc.cond.Broadcast()
|
||||||
|
|
||||||
cc.initialWindowSize = s.Val
|
cc.initialWindowSize = s.Val
|
||||||
|
case SettingHeaderTableSize:
|
||||||
|
cc.henc.SetMaxDynamicTableSize(s.Val)
|
||||||
|
cc.peerMaxHeaderTableSize = s.Val
|
||||||
default:
|
default:
|
||||||
// TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably.
|
|
||||||
cc.vlogf("Unhandled Setting: %v", s)
|
cc.vlogf("Unhandled Setting: %v", s)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -2985,7 +3060,11 @@ func (gz *gzipReader) Read(p []byte) (n int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gz *gzipReader) Close() error {
|
func (gz *gzipReader) Close() error {
|
||||||
return gz.body.Close()
|
if err := gz.body.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
gz.zerr = fs.ErrClosed
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type errorReader struct{ err error }
|
type errorReader struct{ err error }
|
||||||
|
8
vendor/golang.org/x/sys/execabs/execabs_go119.go
generated
vendored
8
vendor/golang.org/x/sys/execabs/execabs_go119.go
generated
vendored
@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
package execabs
|
package execabs
|
||||||
|
|
||||||
import "strings"
|
import (
|
||||||
|
"errors"
|
||||||
|
"os/exec"
|
||||||
|
)
|
||||||
|
|
||||||
func isGo119ErrDot(err error) bool {
|
func isGo119ErrDot(err error) bool {
|
||||||
// TODO: return errors.Is(err, exec.ErrDot)
|
return errors.Is(err, exec.ErrDot)
|
||||||
return strings.Contains(err.Error(), "current directory")
|
|
||||||
}
|
}
|
||||||
|
14
vendor/golang.org/x/sys/unix/sockcmsg_unix.go
generated
vendored
14
vendor/golang.org/x/sys/unix/sockcmsg_unix.go
generated
vendored
@ -52,6 +52,20 @@ func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
|
|||||||
return msgs, nil
|
return msgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header,
|
||||||
|
// message data (a slice of b), and the remainder of b after that single message.
|
||||||
|
// When there are no remaining messages, len(remainder) == 0.
|
||||||
|
func ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) {
|
||||||
|
h, dbuf, err := socketControlMessageHeaderAndData(b)
|
||||||
|
if err != nil {
|
||||||
|
return Cmsghdr{}, nil, nil, err
|
||||||
|
}
|
||||||
|
if i := cmsgAlignOf(int(h.Len)); i < len(b) {
|
||||||
|
remainder = b[i:]
|
||||||
|
}
|
||||||
|
return *h, dbuf, remainder, nil
|
||||||
|
}
|
||||||
|
|
||||||
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
||||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
||||||
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
||||||
|
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
@ -1554,6 +1554,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
|||||||
var iova [1]Iovec
|
var iova [1]Iovec
|
||||||
iova[0].Base = &dummy
|
iova[0].Base = &dummy
|
||||||
iova[0].SetLen(1)
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg.Control = &oob[0]
|
msg.Control = &oob[0]
|
||||||
|
1
vendor/golang.org/x/sys/windows/syscall_windows.go
generated
vendored
1
vendor/golang.org/x/sys/windows/syscall_windows.go
generated
vendored
@ -367,6 +367,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|||||||
//sys IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode
|
//sys IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode
|
||||||
//sys IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible
|
//sys IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible
|
||||||
//sys GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo
|
//sys GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo
|
||||||
|
//sys GetLargePageMinimum() (size uintptr)
|
||||||
|
|
||||||
// Volume Management Functions
|
// Volume Management Functions
|
||||||
//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW
|
//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW
|
||||||
|
7
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
7
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
@ -252,6 +252,7 @@ var (
|
|||||||
procGetFileType = modkernel32.NewProc("GetFileType")
|
procGetFileType = modkernel32.NewProc("GetFileType")
|
||||||
procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW")
|
procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW")
|
||||||
procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW")
|
procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW")
|
||||||
|
procGetLargePageMinimum = modkernel32.NewProc("GetLargePageMinimum")
|
||||||
procGetLastError = modkernel32.NewProc("GetLastError")
|
procGetLastError = modkernel32.NewProc("GetLastError")
|
||||||
procGetLogicalDriveStringsW = modkernel32.NewProc("GetLogicalDriveStringsW")
|
procGetLogicalDriveStringsW = modkernel32.NewProc("GetLogicalDriveStringsW")
|
||||||
procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives")
|
procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives")
|
||||||
@ -2180,6 +2181,12 @@ func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetLargePageMinimum() (size uintptr) {
|
||||||
|
r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0)
|
||||||
|
size = uintptr(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func GetLastError() (lasterr error) {
|
func GetLastError() (lasterr error) {
|
||||||
r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0)
|
r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0)
|
||||||
if r0 != 0 {
|
if r0 != 0 {
|
||||||
|
12
vendor/golang.org/x/text/unicode/bidi/trieval.go
generated
vendored
12
vendor/golang.org/x/text/unicode/bidi/trieval.go
generated
vendored
@ -37,18 +37,6 @@ const (
|
|||||||
unknownClass = ^Class(0)
|
unknownClass = ^Class(0)
|
||||||
)
|
)
|
||||||
|
|
||||||
var controlToClass = map[rune]Class{
|
|
||||||
0x202D: LRO, // LeftToRightOverride,
|
|
||||||
0x202E: RLO, // RightToLeftOverride,
|
|
||||||
0x202A: LRE, // LeftToRightEmbedding,
|
|
||||||
0x202B: RLE, // RightToLeftEmbedding,
|
|
||||||
0x202C: PDF, // PopDirectionalFormat,
|
|
||||||
0x2066: LRI, // LeftToRightIsolate,
|
|
||||||
0x2067: RLI, // RightToLeftIsolate,
|
|
||||||
0x2068: FSI, // FirstStrongIsolate,
|
|
||||||
0x2069: PDI, // PopDirectionalIsolate,
|
|
||||||
}
|
|
||||||
|
|
||||||
// A trie entry has the following bits:
|
// A trie entry has the following bits:
|
||||||
// 7..5 XOR mask for brackets
|
// 7..5 XOR mask for brackets
|
||||||
// 4 1: Bracket open, 0: Bracket close
|
// 4 1: Bracket open, 0: Bracket close
|
||||||
|
20
vendor/golang.org/x/time/rate/rate.go
generated
vendored
20
vendor/golang.org/x/time/rate/rate.go
generated
vendored
@ -83,7 +83,7 @@ func (lim *Limiter) Burst() int {
|
|||||||
// TokensAt returns the number of tokens available at time t.
|
// TokensAt returns the number of tokens available at time t.
|
||||||
func (lim *Limiter) TokensAt(t time.Time) float64 {
|
func (lim *Limiter) TokensAt(t time.Time) float64 {
|
||||||
lim.mu.Lock()
|
lim.mu.Lock()
|
||||||
_, _, tokens := lim.advance(t) // does not mutute lim
|
_, tokens := lim.advance(t) // does not mutate lim
|
||||||
lim.mu.Unlock()
|
lim.mu.Unlock()
|
||||||
return tokens
|
return tokens
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ func (r *Reservation) CancelAt(t time.Time) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// advance time to now
|
// advance time to now
|
||||||
t, _, tokens := r.lim.advance(t)
|
t, tokens := r.lim.advance(t)
|
||||||
// calculate new number of tokens
|
// calculate new number of tokens
|
||||||
tokens += restoreTokens
|
tokens += restoreTokens
|
||||||
if burst := float64(r.lim.burst); tokens > burst {
|
if burst := float64(r.lim.burst); tokens > burst {
|
||||||
@ -304,7 +304,7 @@ func (lim *Limiter) SetLimitAt(t time.Time, newLimit Limit) {
|
|||||||
lim.mu.Lock()
|
lim.mu.Lock()
|
||||||
defer lim.mu.Unlock()
|
defer lim.mu.Unlock()
|
||||||
|
|
||||||
t, _, tokens := lim.advance(t)
|
t, tokens := lim.advance(t)
|
||||||
|
|
||||||
lim.last = t
|
lim.last = t
|
||||||
lim.tokens = tokens
|
lim.tokens = tokens
|
||||||
@ -321,7 +321,7 @@ func (lim *Limiter) SetBurstAt(t time.Time, newBurst int) {
|
|||||||
lim.mu.Lock()
|
lim.mu.Lock()
|
||||||
defer lim.mu.Unlock()
|
defer lim.mu.Unlock()
|
||||||
|
|
||||||
t, _, tokens := lim.advance(t)
|
t, tokens := lim.advance(t)
|
||||||
|
|
||||||
lim.last = t
|
lim.last = t
|
||||||
lim.tokens = tokens
|
lim.tokens = tokens
|
||||||
@ -356,7 +356,7 @@ func (lim *Limiter) reserveN(t time.Time, n int, maxFutureReserve time.Duration)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
t, last, tokens := lim.advance(t)
|
t, tokens := lim.advance(t)
|
||||||
|
|
||||||
// Calculate the remaining number of tokens resulting from the request.
|
// Calculate the remaining number of tokens resulting from the request.
|
||||||
tokens -= float64(n)
|
tokens -= float64(n)
|
||||||
@ -379,15 +379,11 @@ func (lim *Limiter) reserveN(t time.Time, n int, maxFutureReserve time.Duration)
|
|||||||
if ok {
|
if ok {
|
||||||
r.tokens = n
|
r.tokens = n
|
||||||
r.timeToAct = t.Add(waitDuration)
|
r.timeToAct = t.Add(waitDuration)
|
||||||
}
|
|
||||||
|
|
||||||
// Update state
|
// Update state
|
||||||
if ok {
|
|
||||||
lim.last = t
|
lim.last = t
|
||||||
lim.tokens = tokens
|
lim.tokens = tokens
|
||||||
lim.lastEvent = r.timeToAct
|
lim.lastEvent = r.timeToAct
|
||||||
} else {
|
|
||||||
lim.last = last
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return r
|
return r
|
||||||
@ -396,7 +392,7 @@ func (lim *Limiter) reserveN(t time.Time, n int, maxFutureReserve time.Duration)
|
|||||||
// advance calculates and returns an updated state for lim resulting from the passage of time.
|
// advance calculates and returns an updated state for lim resulting from the passage of time.
|
||||||
// lim is not changed.
|
// lim is not changed.
|
||||||
// advance requires that lim.mu is held.
|
// advance requires that lim.mu is held.
|
||||||
func (lim *Limiter) advance(t time.Time) (newT time.Time, newLast time.Time, newTokens float64) {
|
func (lim *Limiter) advance(t time.Time) (newT time.Time, newTokens float64) {
|
||||||
last := lim.last
|
last := lim.last
|
||||||
if t.Before(last) {
|
if t.Before(last) {
|
||||||
last = t
|
last = t
|
||||||
@ -409,7 +405,7 @@ func (lim *Limiter) advance(t time.Time) (newT time.Time, newLast time.Time, new
|
|||||||
if burst := float64(lim.burst); tokens > burst {
|
if burst := float64(lim.burst); tokens > burst {
|
||||||
tokens = burst
|
tokens = burst
|
||||||
}
|
}
|
||||||
return t, last, tokens
|
return t, tokens
|
||||||
}
|
}
|
||||||
|
|
||||||
// durationFromTokens is a unit conversion function from the number of tokens to the duration
|
// durationFromTokens is a unit conversion function from the number of tokens to the duration
|
||||||
|
67
vendor/golang.org/x/time/rate/sometimes.go
generated
vendored
Normal file
67
vendor/golang.org/x/time/rate/sometimes.go
generated
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// Copyright 2022 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package rate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Sometimes will perform an action occasionally. The First, Every, and
|
||||||
|
// Interval fields govern the behavior of Do, which performs the action.
|
||||||
|
// A zero Sometimes value will perform an action exactly once.
|
||||||
|
//
|
||||||
|
// # Example: logging with rate limiting
|
||||||
|
//
|
||||||
|
// var sometimes = rate.Sometimes{First: 3, Interval: 10*time.Second}
|
||||||
|
// func Spammy() {
|
||||||
|
// sometimes.Do(func() { log.Info("here I am!") })
|
||||||
|
// }
|
||||||
|
type Sometimes struct {
|
||||||
|
First int // if non-zero, the first N calls to Do will run f.
|
||||||
|
Every int // if non-zero, every Nth call to Do will run f.
|
||||||
|
Interval time.Duration // if non-zero and Interval has elapsed since f's last run, Do will run f.
|
||||||
|
|
||||||
|
mu sync.Mutex
|
||||||
|
count int // number of Do calls
|
||||||
|
last time.Time // last time f was run
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do runs the function f as allowed by First, Every, and Interval.
|
||||||
|
//
|
||||||
|
// The model is a union (not intersection) of filters. The first call to Do
|
||||||
|
// always runs f. Subsequent calls to Do run f if allowed by First or Every or
|
||||||
|
// Interval.
|
||||||
|
//
|
||||||
|
// A non-zero First:N causes the first N Do(f) calls to run f.
|
||||||
|
//
|
||||||
|
// A non-zero Every:M causes every Mth Do(f) call, starting with the first, to
|
||||||
|
// run f.
|
||||||
|
//
|
||||||
|
// A non-zero Interval causes Do(f) to run f if Interval has elapsed since
|
||||||
|
// Do last ran f.
|
||||||
|
//
|
||||||
|
// Specifying multiple filters produces the union of these execution streams.
|
||||||
|
// For example, specifying both First:N and Every:M causes the first N Do(f)
|
||||||
|
// calls and every Mth Do(f) call, starting with the first, to run f. See
|
||||||
|
// Examples for more.
|
||||||
|
//
|
||||||
|
// If Do is called multiple times simultaneously, the calls will block and run
|
||||||
|
// serially. Therefore, Do is intended for lightweight operations.
|
||||||
|
//
|
||||||
|
// Because a call to Do may block until f returns, if f causes Do to be called,
|
||||||
|
// it will deadlock.
|
||||||
|
func (s *Sometimes) Do(f func()) {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
if s.count == 0 ||
|
||||||
|
(s.First > 0 && s.count < s.First) ||
|
||||||
|
(s.Every > 0 && s.count%s.Every == 0) ||
|
||||||
|
(s.Interval > 0 && time.Since(s.last) >= s.Interval) {
|
||||||
|
f()
|
||||||
|
s.last = time.Now()
|
||||||
|
}
|
||||||
|
s.count++
|
||||||
|
}
|
2
vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
generated
vendored
2
vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
generated
vendored
@ -30,7 +30,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
"golang.org/x/tools/go/internal/gcimporter"
|
"golang.org/x/tools/internal/gcimporter"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Find returns the name of an object (.o) or archive (.a) file
|
// Find returns the name of an object (.o) or archive (.a) file
|
||||||
|
13
vendor/golang.org/x/tools/go/packages/golist.go
generated
vendored
13
vendor/golang.org/x/tools/go/packages/golist.go
generated
vendored
@ -604,17 +604,12 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse
|
|||||||
|
|
||||||
// Work around https://golang.org/issue/28749:
|
// Work around https://golang.org/issue/28749:
|
||||||
// cmd/go puts assembly, C, and C++ files in CompiledGoFiles.
|
// cmd/go puts assembly, C, and C++ files in CompiledGoFiles.
|
||||||
// Filter out any elements of CompiledGoFiles that are also in OtherFiles.
|
// Remove files from CompiledGoFiles that are non-go files
|
||||||
// We have to keep this workaround in place until go1.12 is a distant memory.
|
// (or are not files that look like they are from the cache).
|
||||||
if len(pkg.OtherFiles) > 0 {
|
if len(pkg.CompiledGoFiles) > 0 {
|
||||||
other := make(map[string]bool, len(pkg.OtherFiles))
|
|
||||||
for _, f := range pkg.OtherFiles {
|
|
||||||
other[f] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
out := pkg.CompiledGoFiles[:0]
|
out := pkg.CompiledGoFiles[:0]
|
||||||
for _, f := range pkg.CompiledGoFiles {
|
for _, f := range pkg.CompiledGoFiles {
|
||||||
if other[f] {
|
if ext := filepath.Ext(f); ext != ".go" && ext != "" { // ext == "" means the file is from the cache, so probably cgo-processed file
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
out = append(out, f)
|
out = append(out, f)
|
||||||
|
6
vendor/golang.org/x/tools/go/packages/packages.go
generated
vendored
6
vendor/golang.org/x/tools/go/packages/packages.go
generated
vendored
@ -303,6 +303,9 @@ type Package struct {
|
|||||||
// of the package, or while parsing or type-checking its files.
|
// of the package, or while parsing or type-checking its files.
|
||||||
Errors []Error
|
Errors []Error
|
||||||
|
|
||||||
|
// TypeErrors contains the subset of errors produced during type checking.
|
||||||
|
TypeErrors []types.Error
|
||||||
|
|
||||||
// GoFiles lists the absolute file paths of the package's Go source files.
|
// GoFiles lists the absolute file paths of the package's Go source files.
|
||||||
GoFiles []string
|
GoFiles []string
|
||||||
|
|
||||||
@ -911,6 +914,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
|
|||||||
|
|
||||||
case types.Error:
|
case types.Error:
|
||||||
// from type checker
|
// from type checker
|
||||||
|
lpkg.TypeErrors = append(lpkg.TypeErrors, err)
|
||||||
errs = append(errs, Error{
|
errs = append(errs, Error{
|
||||||
Pos: err.Fset.Position(err.Pos).String(),
|
Pos: err.Fset.Position(err.Pos).String(),
|
||||||
Msg: err.Msg,
|
Msg: err.Msg,
|
||||||
@ -1017,7 +1021,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
|
|||||||
tc := &types.Config{
|
tc := &types.Config{
|
||||||
Importer: importer,
|
Importer: importer,
|
||||||
|
|
||||||
// Type-check bodies of functions only in non-initial packages.
|
// Type-check bodies of functions only in initial packages.
|
||||||
// Example: for import graph A->B->C and initial packages {A,C},
|
// Example: for import graph A->B->C and initial packages {A,C},
|
||||||
// we can ignore function bodies in B.
|
// we can ignore function bodies in B.
|
||||||
IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial,
|
IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial,
|
||||||
|
@ -12,7 +12,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"go/token"
|
"go/token"
|
||||||
"go/types"
|
"go/types"
|
||||||
@ -145,7 +144,7 @@ func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error)
|
|||||||
objcount := 0
|
objcount := 0
|
||||||
scope := pkg.Scope()
|
scope := pkg.Scope()
|
||||||
for _, name := range scope.Names() {
|
for _, name := range scope.Names() {
|
||||||
if !ast.IsExported(name) {
|
if !token.IsExported(name) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if trace {
|
if trace {
|
||||||
@ -482,7 +481,7 @@ func (p *exporter) method(m *types.Func) {
|
|||||||
|
|
||||||
p.pos(m)
|
p.pos(m)
|
||||||
p.string(m.Name())
|
p.string(m.Name())
|
||||||
if m.Name() != "_" && !ast.IsExported(m.Name()) {
|
if m.Name() != "_" && !token.IsExported(m.Name()) {
|
||||||
p.pkg(m.Pkg(), false)
|
p.pkg(m.Pkg(), false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,7 +500,7 @@ func (p *exporter) fieldName(f *types.Var) {
|
|||||||
// 3) field name doesn't match base type name (alias name)
|
// 3) field name doesn't match base type name (alias name)
|
||||||
bname := basetypeName(f.Type())
|
bname := basetypeName(f.Type())
|
||||||
if name == bname {
|
if name == bname {
|
||||||
if ast.IsExported(name) {
|
if token.IsExported(name) {
|
||||||
name = "" // 1) we don't need to know the field name or package
|
name = "" // 1) we don't need to know the field name or package
|
||||||
} else {
|
} else {
|
||||||
name = "?" // 2) use unexported name "?" to force package export
|
name = "?" // 2) use unexported name "?" to force package export
|
||||||
@ -514,7 +513,7 @@ func (p *exporter) fieldName(f *types.Var) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.string(name)
|
p.string(name)
|
||||||
if name != "" && !ast.IsExported(name) {
|
if name != "" && !token.IsExported(name) {
|
||||||
p.pkg(f.Pkg(), false)
|
p.pkg(f.Pkg(), false)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,10 +9,11 @@
|
|||||||
// Package gcimporter provides various functions for reading
|
// Package gcimporter provides various functions for reading
|
||||||
// gc-generated object files that can be used to implement the
|
// gc-generated object files that can be used to implement the
|
||||||
// Importer interface defined by the Go 1.5 standard library package.
|
// Importer interface defined by the Go 1.5 standard library package.
|
||||||
package gcimporter // import "golang.org/x/tools/go/internal/gcimporter"
|
package gcimporter // import "golang.org/x/tools/internal/gcimporter"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/build"
|
"go/build"
|
||||||
@ -22,10 +23,12 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"text/scanner"
|
"text/scanner"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,6 +41,47 @@ const (
|
|||||||
trace = false
|
trace = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var exportMap sync.Map // package dir → func() (string, bool)
|
||||||
|
|
||||||
|
// lookupGorootExport returns the location of the export data
|
||||||
|
// (normally found in the build cache, but located in GOROOT/pkg
|
||||||
|
// in prior Go releases) for the package located in pkgDir.
|
||||||
|
//
|
||||||
|
// (We use the package's directory instead of its import path
|
||||||
|
// mainly to simplify handling of the packages in src/vendor
|
||||||
|
// and cmd/vendor.)
|
||||||
|
func lookupGorootExport(pkgDir string) (string, bool) {
|
||||||
|
f, ok := exportMap.Load(pkgDir)
|
||||||
|
if !ok {
|
||||||
|
var (
|
||||||
|
listOnce sync.Once
|
||||||
|
exportPath string
|
||||||
|
)
|
||||||
|
f, _ = exportMap.LoadOrStore(pkgDir, func() (string, bool) {
|
||||||
|
listOnce.Do(func() {
|
||||||
|
cmd := exec.Command("go", "list", "-export", "-f", "{{.Export}}", pkgDir)
|
||||||
|
cmd.Dir = build.Default.GOROOT
|
||||||
|
var output []byte
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
exports := strings.Split(string(bytes.TrimSpace(output)), "\n")
|
||||||
|
if len(exports) != 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
exportPath = exports[0]
|
||||||
|
})
|
||||||
|
|
||||||
|
return exportPath, exportPath != ""
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return f.(func() (string, bool))()
|
||||||
|
}
|
||||||
|
|
||||||
var pkgExts = [...]string{".a", ".o"}
|
var pkgExts = [...]string{".a", ".o"}
|
||||||
|
|
||||||
// FindPkg returns the filename and unique package id for an import
|
// FindPkg returns the filename and unique package id for an import
|
||||||
@ -60,11 +104,18 @@ func FindPkg(path, srcDir string) (filename, id string) {
|
|||||||
}
|
}
|
||||||
bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary)
|
bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary)
|
||||||
if bp.PkgObj == "" {
|
if bp.PkgObj == "" {
|
||||||
id = path // make sure we have an id to print in error message
|
var ok bool
|
||||||
return
|
if bp.Goroot && bp.Dir != "" {
|
||||||
|
filename, ok = lookupGorootExport(bp.Dir)
|
||||||
|
}
|
||||||
|
if !ok {
|
||||||
|
id = path // make sure we have an id to print in error message
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
noext = strings.TrimSuffix(bp.PkgObj, ".a")
|
||||||
|
id = bp.ImportPath
|
||||||
}
|
}
|
||||||
noext = strings.TrimSuffix(bp.PkgObj, ".a")
|
|
||||||
id = bp.ImportPath
|
|
||||||
|
|
||||||
case build.IsLocalImport(path):
|
case build.IsLocalImport(path):
|
||||||
// "./x" -> "/this/directory/x.ext", "/this/directory/x"
|
// "./x" -> "/this/directory/x.ext", "/this/directory/x"
|
||||||
@ -85,6 +136,12 @@ func FindPkg(path, srcDir string) (filename, id string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if filename != "" {
|
||||||
|
if f, err := os.Stat(filename); err == nil && !f.IsDir() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// try extensions
|
// try extensions
|
||||||
for _, ext := range pkgExts {
|
for _, ext := range pkgExts {
|
||||||
filename = noext + ext
|
filename = noext + ext
|
@ -12,7 +12,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"go/token"
|
"go/token"
|
||||||
"go/types"
|
"go/types"
|
||||||
@ -26,6 +25,41 @@ import (
|
|||||||
"golang.org/x/tools/internal/typeparams"
|
"golang.org/x/tools/internal/typeparams"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// IExportShallow encodes "shallow" export data for the specified package.
|
||||||
|
//
|
||||||
|
// No promises are made about the encoding other than that it can be
|
||||||
|
// decoded by the same version of IIExportShallow. If you plan to save
|
||||||
|
// export data in the file system, be sure to include a cryptographic
|
||||||
|
// digest of the executable in the key to avoid version skew.
|
||||||
|
func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) {
|
||||||
|
// In principle this operation can only fail if out.Write fails,
|
||||||
|
// but that's impossible for bytes.Buffer---and as a matter of
|
||||||
|
// fact iexportCommon doesn't even check for I/O errors.
|
||||||
|
// TODO(adonovan): handle I/O errors properly.
|
||||||
|
// TODO(adonovan): use byte slices throughout, avoiding copying.
|
||||||
|
const bundle, shallow = false, true
|
||||||
|
var out bytes.Buffer
|
||||||
|
err := iexportCommon(&out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg})
|
||||||
|
return out.Bytes(), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IImportShallow decodes "shallow" types.Package data encoded by IExportShallow
|
||||||
|
// in the same executable. This function cannot import data from
|
||||||
|
// cmd/compile or gcexportdata.Write.
|
||||||
|
func IImportShallow(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string, insert InsertType) (*types.Package, error) {
|
||||||
|
const bundle = false
|
||||||
|
pkgs, err := iimportCommon(fset, imports, data, bundle, path, insert)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return pkgs[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertType is the type of a function that creates a types.TypeName
|
||||||
|
// object for a named type and inserts it into the scope of the
|
||||||
|
// specified Package.
|
||||||
|
type InsertType = func(pkg *types.Package, name string)
|
||||||
|
|
||||||
// Current bundled export format version. Increase with each format change.
|
// Current bundled export format version. Increase with each format change.
|
||||||
// 0: initial implementation
|
// 0: initial implementation
|
||||||
const bundleVersion = 0
|
const bundleVersion = 0
|
||||||
@ -36,15 +70,17 @@ const bundleVersion = 0
|
|||||||
// The package path of the top-level package will not be recorded,
|
// The package path of the top-level package will not be recorded,
|
||||||
// so that calls to IImportData can override with a provided package path.
|
// so that calls to IImportData can override with a provided package path.
|
||||||
func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
|
func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
|
||||||
return iexportCommon(out, fset, false, iexportVersion, []*types.Package{pkg})
|
const bundle, shallow = false, false
|
||||||
|
return iexportCommon(out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg})
|
||||||
}
|
}
|
||||||
|
|
||||||
// IExportBundle writes an indexed export bundle for pkgs to out.
|
// IExportBundle writes an indexed export bundle for pkgs to out.
|
||||||
func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
|
func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
|
||||||
return iexportCommon(out, fset, true, iexportVersion, pkgs)
|
const bundle, shallow = true, false
|
||||||
|
return iexportCommon(out, fset, bundle, shallow, iexportVersion, pkgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func iexportCommon(out io.Writer, fset *token.FileSet, bundle bool, version int, pkgs []*types.Package) (err error) {
|
func iexportCommon(out io.Writer, fset *token.FileSet, bundle, shallow bool, version int, pkgs []*types.Package) (err error) {
|
||||||
if !debug {
|
if !debug {
|
||||||
defer func() {
|
defer func() {
|
||||||
if e := recover(); e != nil {
|
if e := recover(); e != nil {
|
||||||
@ -61,6 +97,7 @@ func iexportCommon(out io.Writer, fset *token.FileSet, bundle bool, version int,
|
|||||||
p := iexporter{
|
p := iexporter{
|
||||||
fset: fset,
|
fset: fset,
|
||||||
version: version,
|
version: version,
|
||||||
|
shallow: shallow,
|
||||||
allPkgs: map[*types.Package]bool{},
|
allPkgs: map[*types.Package]bool{},
|
||||||
stringIndex: map[string]uint64{},
|
stringIndex: map[string]uint64{},
|
||||||
declIndex: map[types.Object]uint64{},
|
declIndex: map[types.Object]uint64{},
|
||||||
@ -82,7 +119,7 @@ func iexportCommon(out io.Writer, fset *token.FileSet, bundle bool, version int,
|
|||||||
for _, pkg := range pkgs {
|
for _, pkg := range pkgs {
|
||||||
scope := pkg.Scope()
|
scope := pkg.Scope()
|
||||||
for _, name := range scope.Names() {
|
for _, name := range scope.Names() {
|
||||||
if ast.IsExported(name) {
|
if token.IsExported(name) {
|
||||||
p.pushDecl(scope.Lookup(name))
|
p.pushDecl(scope.Lookup(name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,7 +242,8 @@ type iexporter struct {
|
|||||||
out *bytes.Buffer
|
out *bytes.Buffer
|
||||||
version int
|
version int
|
||||||
|
|
||||||
localpkg *types.Package
|
shallow bool // don't put types from other packages in the index
|
||||||
|
localpkg *types.Package // (nil in bundle mode)
|
||||||
|
|
||||||
// allPkgs tracks all packages that have been referenced by
|
// allPkgs tracks all packages that have been referenced by
|
||||||
// the export data, so we can ensure to include them in the
|
// the export data, so we can ensure to include them in the
|
||||||
@ -256,6 +294,11 @@ func (p *iexporter) pushDecl(obj types.Object) {
|
|||||||
panic("cannot export package unsafe")
|
panic("cannot export package unsafe")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shallow export data: don't index decls from other packages.
|
||||||
|
if p.shallow && obj.Pkg() != p.localpkg {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if _, ok := p.declIndex[obj]; ok {
|
if _, ok := p.declIndex[obj]; ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -497,7 +540,7 @@ func (w *exportWriter) pkg(pkg *types.Package) {
|
|||||||
w.string(w.exportPath(pkg))
|
w.string(w.exportPath(pkg))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *exportWriter) qualifiedIdent(obj types.Object) {
|
func (w *exportWriter) qualifiedType(obj *types.TypeName) {
|
||||||
name := w.p.exportName(obj)
|
name := w.p.exportName(obj)
|
||||||
|
|
||||||
// Ensure any referenced declarations are written out too.
|
// Ensure any referenced declarations are written out too.
|
||||||
@ -556,11 +599,11 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.startType(definedType)
|
w.startType(definedType)
|
||||||
w.qualifiedIdent(t.Obj())
|
w.qualifiedType(t.Obj())
|
||||||
|
|
||||||
case *typeparams.TypeParam:
|
case *typeparams.TypeParam:
|
||||||
w.startType(typeParamType)
|
w.startType(typeParamType)
|
||||||
w.qualifiedIdent(t.Obj())
|
w.qualifiedType(t.Obj())
|
||||||
|
|
||||||
case *types.Pointer:
|
case *types.Pointer:
|
||||||
w.startType(pointerType)
|
w.startType(pointerType)
|
||||||
@ -602,14 +645,17 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) {
|
|||||||
|
|
||||||
case *types.Struct:
|
case *types.Struct:
|
||||||
w.startType(structType)
|
w.startType(structType)
|
||||||
w.setPkg(pkg, true)
|
|
||||||
|
|
||||||
n := t.NumFields()
|
n := t.NumFields()
|
||||||
|
if n > 0 {
|
||||||
|
w.setPkg(t.Field(0).Pkg(), true) // qualifying package for field objects
|
||||||
|
} else {
|
||||||
|
w.setPkg(pkg, true)
|
||||||
|
}
|
||||||
w.uint64(uint64(n))
|
w.uint64(uint64(n))
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
f := t.Field(i)
|
f := t.Field(i)
|
||||||
w.pos(f.Pos())
|
w.pos(f.Pos())
|
||||||
w.string(f.Name())
|
w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg
|
||||||
w.typ(f.Type(), pkg)
|
w.typ(f.Type(), pkg)
|
||||||
w.bool(f.Anonymous())
|
w.bool(f.Anonymous())
|
||||||
w.string(t.Tag(i)) // note (or tag)
|
w.string(t.Tag(i)) // note (or tag)
|
@ -85,7 +85,7 @@ const (
|
|||||||
// If the export data version is not recognized or the format is otherwise
|
// If the export data version is not recognized or the format is otherwise
|
||||||
// compromised, an error is returned.
|
// compromised, an error is returned.
|
||||||
func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) {
|
func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) {
|
||||||
pkgs, err := iimportCommon(fset, imports, data, false, path)
|
pkgs, err := iimportCommon(fset, imports, data, false, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, nil, err
|
return 0, nil, err
|
||||||
}
|
}
|
||||||
@ -94,10 +94,10 @@ func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []
|
|||||||
|
|
||||||
// IImportBundle imports a set of packages from the serialized package bundle.
|
// IImportBundle imports a set of packages from the serialized package bundle.
|
||||||
func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) {
|
func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) {
|
||||||
return iimportCommon(fset, imports, data, true, "")
|
return iimportCommon(fset, imports, data, true, "", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data []byte, bundle bool, path string) (pkgs []*types.Package, err error) {
|
func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) {
|
||||||
const currentVersion = iexportVersionCurrent
|
const currentVersion = iexportVersionCurrent
|
||||||
version := int64(-1)
|
version := int64(-1)
|
||||||
if !debug {
|
if !debug {
|
||||||
@ -147,6 +147,7 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data
|
|||||||
p := iimporter{
|
p := iimporter{
|
||||||
version: int(version),
|
version: int(version),
|
||||||
ipath: path,
|
ipath: path,
|
||||||
|
insert: insert,
|
||||||
|
|
||||||
stringData: stringData,
|
stringData: stringData,
|
||||||
stringCache: make(map[uint64]string),
|
stringCache: make(map[uint64]string),
|
||||||
@ -187,11 +188,18 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data
|
|||||||
} else if pkg.Name() != pkgName {
|
} else if pkg.Name() != pkgName {
|
||||||
errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path)
|
errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path)
|
||||||
}
|
}
|
||||||
|
if i == 0 && !bundle {
|
||||||
|
p.localpkg = pkg
|
||||||
|
}
|
||||||
|
|
||||||
p.pkgCache[pkgPathOff] = pkg
|
p.pkgCache[pkgPathOff] = pkg
|
||||||
|
|
||||||
|
// Read index for package.
|
||||||
nameIndex := make(map[string]uint64)
|
nameIndex := make(map[string]uint64)
|
||||||
for nSyms := r.uint64(); nSyms > 0; nSyms-- {
|
nSyms := r.uint64()
|
||||||
|
// In shallow mode we don't expect an index for other packages.
|
||||||
|
assert(nSyms == 0 || p.localpkg == pkg || p.insert == nil)
|
||||||
|
for ; nSyms > 0; nSyms-- {
|
||||||
name := p.stringAt(r.uint64())
|
name := p.stringAt(r.uint64())
|
||||||
nameIndex[name] = r.uint64()
|
nameIndex[name] = r.uint64()
|
||||||
}
|
}
|
||||||
@ -267,6 +275,9 @@ type iimporter struct {
|
|||||||
version int
|
version int
|
||||||
ipath string
|
ipath string
|
||||||
|
|
||||||
|
localpkg *types.Package
|
||||||
|
insert func(pkg *types.Package, name string) // "shallow" mode only
|
||||||
|
|
||||||
stringData []byte
|
stringData []byte
|
||||||
stringCache map[uint64]string
|
stringCache map[uint64]string
|
||||||
pkgCache map[uint64]*types.Package
|
pkgCache map[uint64]*types.Package
|
||||||
@ -310,6 +321,13 @@ func (p *iimporter) doDecl(pkg *types.Package, name string) {
|
|||||||
|
|
||||||
off, ok := p.pkgIndex[pkg][name]
|
off, ok := p.pkgIndex[pkg][name]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
// In "shallow" mode, call back to the application to
|
||||||
|
// find the object and insert it into the package scope.
|
||||||
|
if p.insert != nil {
|
||||||
|
assert(pkg != p.localpkg)
|
||||||
|
p.insert(pkg, name) // "can't fail"
|
||||||
|
return
|
||||||
|
}
|
||||||
errorf("%v.%v not in index", pkg, name)
|
errorf("%v.%v not in index", pkg, name)
|
||||||
}
|
}
|
||||||
|
|
@ -21,3 +21,17 @@ func additionalPredeclared() []types.Type {
|
|||||||
types.Universe.Lookup("any").Type(),
|
types.Universe.Lookup("any").Type(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See cmd/compile/internal/types.SplitVargenSuffix.
|
||||||
|
func splitVargenSuffix(name string) (base, suffix string) {
|
||||||
|
i := len(name)
|
||||||
|
for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' {
|
||||||
|
i--
|
||||||
|
}
|
||||||
|
const dot = "·"
|
||||||
|
if i >= len(dot) && name[i-len(dot):i] == dot {
|
||||||
|
i -= len(dot)
|
||||||
|
return name[:i], name[i:]
|
||||||
|
}
|
||||||
|
return name, ""
|
||||||
|
}
|
@ -14,7 +14,7 @@ import (
|
|||||||
"go/types"
|
"go/types"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/tools/go/internal/pkgbits"
|
"golang.org/x/tools/internal/pkgbits"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A pkgReader holds the shared state for reading a unified IR package
|
// A pkgReader holds the shared state for reading a unified IR package
|
||||||
@ -158,6 +158,17 @@ func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pk
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pr *pkgReader) tempReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
|
||||||
|
return &reader{
|
||||||
|
Decoder: pr.TempDecoder(k, idx, marker),
|
||||||
|
p: pr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pr *pkgReader) retireReader(r *reader) {
|
||||||
|
pr.RetireDecoder(&r.Decoder)
|
||||||
|
}
|
||||||
|
|
||||||
// @@@ Positions
|
// @@@ Positions
|
||||||
|
|
||||||
func (r *reader) pos() token.Pos {
|
func (r *reader) pos() token.Pos {
|
||||||
@ -182,26 +193,29 @@ func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) string {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
r := pr.newReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase)
|
var filename string
|
||||||
|
{
|
||||||
|
r := pr.tempReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase)
|
||||||
|
|
||||||
// Within types2, position bases have a lot more details (e.g.,
|
// Within types2, position bases have a lot more details (e.g.,
|
||||||
// keeping track of where //line directives appeared exactly).
|
// keeping track of where //line directives appeared exactly).
|
||||||
//
|
//
|
||||||
// For go/types, we just track the file name.
|
// For go/types, we just track the file name.
|
||||||
|
|
||||||
filename := r.String()
|
filename = r.String()
|
||||||
|
|
||||||
if r.Bool() { // file base
|
if r.Bool() { // file base
|
||||||
// Was: "b = token.NewTrimmedFileBase(filename, true)"
|
// Was: "b = token.NewTrimmedFileBase(filename, true)"
|
||||||
} else { // line base
|
} else { // line base
|
||||||
pos := r.pos()
|
pos := r.pos()
|
||||||
line := r.Uint()
|
line := r.Uint()
|
||||||
col := r.Uint()
|
col := r.Uint()
|
||||||
|
|
||||||
// Was: "b = token.NewLineBase(pos, filename, true, line, col)"
|
// Was: "b = token.NewLineBase(pos, filename, true, line, col)"
|
||||||
_, _, _ = pos, line, col
|
_, _, _ = pos, line, col
|
||||||
|
}
|
||||||
|
pr.retireReader(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
b := filename
|
b := filename
|
||||||
pr.posBases[idx] = b
|
pr.posBases[idx] = b
|
||||||
return b
|
return b
|
||||||
@ -259,22 +273,22 @@ func (r *reader) doPkg() *types.Package {
|
|||||||
// packages rooted from pkgs.
|
// packages rooted from pkgs.
|
||||||
func flattenImports(pkgs []*types.Package) []*types.Package {
|
func flattenImports(pkgs []*types.Package) []*types.Package {
|
||||||
var res []*types.Package
|
var res []*types.Package
|
||||||
|
seen := make(map[*types.Package]struct{})
|
||||||
seen := make(map[*types.Package]bool)
|
|
||||||
var add func(pkg *types.Package)
|
|
||||||
add = func(pkg *types.Package) {
|
|
||||||
if seen[pkg] {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
seen[pkg] = true
|
|
||||||
res = append(res, pkg)
|
|
||||||
for _, imp := range pkg.Imports() {
|
|
||||||
add(imp)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pkg := range pkgs {
|
for _, pkg := range pkgs {
|
||||||
add(pkg)
|
if _, ok := seen[pkg]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
seen[pkg] = struct{}{}
|
||||||
|
res = append(res, pkg)
|
||||||
|
|
||||||
|
// pkg.Imports() is already flattened.
|
||||||
|
for _, pkg := range pkg.Imports() {
|
||||||
|
if _, ok := seen[pkg]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
seen[pkg] = struct{}{}
|
||||||
|
res = append(res, pkg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
@ -307,12 +321,15 @@ func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types.Type {
|
|||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
||||||
r := pr.newReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx)
|
var typ types.Type
|
||||||
r.dict = dict
|
{
|
||||||
|
r := pr.tempReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx)
|
||||||
typ := r.doTyp()
|
r.dict = dict
|
||||||
assert(typ != nil)
|
|
||||||
|
|
||||||
|
typ = r.doTyp()
|
||||||
|
assert(typ != nil)
|
||||||
|
pr.retireReader(r)
|
||||||
|
}
|
||||||
// See comment in pkgReader.typIdx explaining how this happens.
|
// See comment in pkgReader.typIdx explaining how this happens.
|
||||||
if prev := *where; prev != nil {
|
if prev := *where; prev != nil {
|
||||||
return prev
|
return prev
|
||||||
@ -478,18 +495,30 @@ func (r *reader) obj() (types.Object, []types.Type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) {
|
func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) {
|
||||||
rname := pr.newReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
|
|
||||||
|
|
||||||
objPkg, objName := rname.qualifiedIdent()
|
var objPkg *types.Package
|
||||||
assert(objName != "")
|
var objName string
|
||||||
|
var tag pkgbits.CodeObj
|
||||||
|
{
|
||||||
|
rname := pr.tempReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
|
||||||
|
|
||||||
tag := pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj))
|
objPkg, objName = rname.qualifiedIdent()
|
||||||
|
assert(objName != "")
|
||||||
|
|
||||||
|
tag = pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj))
|
||||||
|
pr.retireReader(rname)
|
||||||
|
}
|
||||||
|
|
||||||
if tag == pkgbits.ObjStub {
|
if tag == pkgbits.ObjStub {
|
||||||
assert(objPkg == nil || objPkg == types.Unsafe)
|
assert(objPkg == nil || objPkg == types.Unsafe)
|
||||||
return objPkg, objName
|
return objPkg, objName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ignore local types promoted to global scope (#55110).
|
||||||
|
if _, suffix := splitVargenSuffix(objName); suffix != "" {
|
||||||
|
return objPkg, objName
|
||||||
|
}
|
||||||
|
|
||||||
if objPkg.Scope().Lookup(objName) == nil {
|
if objPkg.Scope().Lookup(objName) == nil {
|
||||||
dict := pr.objDictIdx(idx)
|
dict := pr.objDictIdx(idx)
|
||||||
|
|
||||||
@ -583,25 +612,28 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict {
|
func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict {
|
||||||
r := pr.newReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
|
|
||||||
|
|
||||||
var dict readerDict
|
var dict readerDict
|
||||||
|
|
||||||
if implicits := r.Len(); implicits != 0 {
|
{
|
||||||
errorf("unexpected object with %v implicit type parameter(s)", implicits)
|
r := pr.tempReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
|
||||||
}
|
if implicits := r.Len(); implicits != 0 {
|
||||||
|
errorf("unexpected object with %v implicit type parameter(s)", implicits)
|
||||||
|
}
|
||||||
|
|
||||||
dict.bounds = make([]typeInfo, r.Len())
|
dict.bounds = make([]typeInfo, r.Len())
|
||||||
for i := range dict.bounds {
|
for i := range dict.bounds {
|
||||||
dict.bounds[i] = r.typInfo()
|
dict.bounds[i] = r.typInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
dict.derived = make([]derivedInfo, r.Len())
|
dict.derived = make([]derivedInfo, r.Len())
|
||||||
dict.derivedTypes = make([]types.Type, len(dict.derived))
|
dict.derivedTypes = make([]types.Type, len(dict.derived))
|
||||||
for i := range dict.derived {
|
for i := range dict.derived {
|
||||||
dict.derived[i] = derivedInfo{r.Reloc(pkgbits.RelocType), r.Bool()}
|
dict.derived[i] = derivedInfo{r.Reloc(pkgbits.RelocType), r.Bool()}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pr.retireReader(r)
|
||||||
|
}
|
||||||
// function references follow, but reader doesn't need those
|
// function references follow, but reader doesn't need those
|
||||||
|
|
||||||
return &dict
|
return &dict
|
21
vendor/golang.org/x/tools/internal/gocommand/version.go
generated
vendored
21
vendor/golang.org/x/tools/internal/gocommand/version.go
generated
vendored
@ -7,6 +7,7 @@ package gocommand
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -56,3 +57,23 @@ func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) {
|
|||||||
}
|
}
|
||||||
return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags)
|
return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GoVersionString reports the go version string as shown in `go version` command output.
|
||||||
|
// When `go version` outputs in non-standard form, this returns an empty string.
|
||||||
|
func GoVersionString(ctx context.Context, inv Invocation, r *Runner) (string, error) {
|
||||||
|
inv.Verb = "version"
|
||||||
|
goVersion, err := r.Run(ctx, inv)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return parseGoVersionOutput(goVersion.Bytes()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseGoVersionOutput(data []byte) string {
|
||||||
|
re := regexp.MustCompile(`^go version (go\S+|devel \S+)`)
|
||||||
|
m := re.FindSubmatch(data)
|
||||||
|
if len(m) != 2 {
|
||||||
|
return "" // unrecognized version
|
||||||
|
}
|
||||||
|
return string(m[1])
|
||||||
|
}
|
||||||
|
@ -6,6 +6,7 @@ package pkgbits
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"go/token"
|
"go/token"
|
||||||
@ -52,6 +53,8 @@ type PkgDecoder struct {
|
|||||||
// For example, section K's end positions start at elemEndsEnds[K-1]
|
// For example, section K's end positions start at elemEndsEnds[K-1]
|
||||||
// (or 0, if K==0) and end at elemEndsEnds[K].
|
// (or 0, if K==0) and end at elemEndsEnds[K].
|
||||||
elemEndsEnds [numRelocs]uint32
|
elemEndsEnds [numRelocs]uint32
|
||||||
|
|
||||||
|
scratchRelocEnt []RelocEnt
|
||||||
}
|
}
|
||||||
|
|
||||||
// PkgPath returns the package path for the package
|
// PkgPath returns the package path for the package
|
||||||
@ -165,6 +168,21 @@ func (pr *PkgDecoder) NewDecoder(k RelocKind, idx Index, marker SyncMarker) Deco
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TempDecoder returns a Decoder for the given (section, index) pair,
|
||||||
|
// and decodes the given SyncMarker from the element bitstream.
|
||||||
|
// If possible the Decoder should be RetireDecoder'd when it is no longer
|
||||||
|
// needed, this will avoid heap allocations.
|
||||||
|
func (pr *PkgDecoder) TempDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
|
||||||
|
r := pr.TempDecoderRaw(k, idx)
|
||||||
|
r.Sync(marker)
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pr *PkgDecoder) RetireDecoder(d *Decoder) {
|
||||||
|
pr.scratchRelocEnt = d.Relocs
|
||||||
|
d.Relocs = nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewDecoderRaw returns a Decoder for the given (section, index) pair.
|
// NewDecoderRaw returns a Decoder for the given (section, index) pair.
|
||||||
//
|
//
|
||||||
// Most callers should use NewDecoder instead.
|
// Most callers should use NewDecoder instead.
|
||||||
@ -188,6 +206,30 @@ func (pr *PkgDecoder) NewDecoderRaw(k RelocKind, idx Index) Decoder {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pr *PkgDecoder) TempDecoderRaw(k RelocKind, idx Index) Decoder {
|
||||||
|
r := Decoder{
|
||||||
|
common: pr,
|
||||||
|
k: k,
|
||||||
|
Idx: idx,
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Data.Reset(pr.DataIdx(k, idx))
|
||||||
|
r.Sync(SyncRelocs)
|
||||||
|
l := r.Len()
|
||||||
|
if cap(pr.scratchRelocEnt) >= l {
|
||||||
|
r.Relocs = pr.scratchRelocEnt[:l]
|
||||||
|
pr.scratchRelocEnt = nil
|
||||||
|
} else {
|
||||||
|
r.Relocs = make([]RelocEnt, l)
|
||||||
|
}
|
||||||
|
for i := range r.Relocs {
|
||||||
|
r.Sync(SyncReloc)
|
||||||
|
r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
// A Decoder provides methods for decoding an individual element's
|
// A Decoder provides methods for decoding an individual element's
|
||||||
// bitstream data.
|
// bitstream data.
|
||||||
type Decoder struct {
|
type Decoder struct {
|
||||||
@ -207,11 +249,39 @@ func (r *Decoder) checkErr(err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Decoder) rawUvarint() uint64 {
|
func (r *Decoder) rawUvarint() uint64 {
|
||||||
x, err := binary.ReadUvarint(&r.Data)
|
x, err := readUvarint(&r.Data)
|
||||||
r.checkErr(err)
|
r.checkErr(err)
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// readUvarint is a type-specialized copy of encoding/binary.ReadUvarint.
|
||||||
|
// This avoids the interface conversion and thus has better escape properties,
|
||||||
|
// which flows up the stack.
|
||||||
|
func readUvarint(r *strings.Reader) (uint64, error) {
|
||||||
|
var x uint64
|
||||||
|
var s uint
|
||||||
|
for i := 0; i < binary.MaxVarintLen64; i++ {
|
||||||
|
b, err := r.ReadByte()
|
||||||
|
if err != nil {
|
||||||
|
if i > 0 && err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
return x, err
|
||||||
|
}
|
||||||
|
if b < 0x80 {
|
||||||
|
if i == binary.MaxVarintLen64-1 && b > 1 {
|
||||||
|
return x, overflow
|
||||||
|
}
|
||||||
|
return x | uint64(b)<<s, nil
|
||||||
|
}
|
||||||
|
x |= uint64(b&0x7f) << s
|
||||||
|
s += 7
|
||||||
|
}
|
||||||
|
return x, overflow
|
||||||
|
}
|
||||||
|
|
||||||
|
var overflow = errors.New("pkgbits: readUvarint overflows a 64-bit integer")
|
||||||
|
|
||||||
func (r *Decoder) rawVarint() int64 {
|
func (r *Decoder) rawVarint() int64 {
|
||||||
ux := r.rawUvarint()
|
ux := r.rawUvarint()
|
||||||
|
|
||||||
@ -410,8 +480,12 @@ func (r *Decoder) bigFloat() *big.Float {
|
|||||||
// PeekPkgPath returns the package path for the specified package
|
// PeekPkgPath returns the package path for the specified package
|
||||||
// index.
|
// index.
|
||||||
func (pr *PkgDecoder) PeekPkgPath(idx Index) string {
|
func (pr *PkgDecoder) PeekPkgPath(idx Index) string {
|
||||||
r := pr.NewDecoder(RelocPkg, idx, SyncPkgDef)
|
var path string
|
||||||
path := r.String()
|
{
|
||||||
|
r := pr.TempDecoder(RelocPkg, idx, SyncPkgDef)
|
||||||
|
path = r.String()
|
||||||
|
pr.RetireDecoder(&r)
|
||||||
|
}
|
||||||
if path == "" {
|
if path == "" {
|
||||||
path = pr.pkgPath
|
path = pr.pkgPath
|
||||||
}
|
}
|
||||||
@ -421,14 +495,23 @@ func (pr *PkgDecoder) PeekPkgPath(idx Index) string {
|
|||||||
// PeekObj returns the package path, object name, and CodeObj for the
|
// PeekObj returns the package path, object name, and CodeObj for the
|
||||||
// specified object index.
|
// specified object index.
|
||||||
func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) {
|
func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) {
|
||||||
r := pr.NewDecoder(RelocName, idx, SyncObject1)
|
var ridx Index
|
||||||
r.Sync(SyncSym)
|
var name string
|
||||||
r.Sync(SyncPkg)
|
var rcode int
|
||||||
path := pr.PeekPkgPath(r.Reloc(RelocPkg))
|
{
|
||||||
name := r.String()
|
r := pr.TempDecoder(RelocName, idx, SyncObject1)
|
||||||
|
r.Sync(SyncSym)
|
||||||
|
r.Sync(SyncPkg)
|
||||||
|
ridx = r.Reloc(RelocPkg)
|
||||||
|
name = r.String()
|
||||||
|
rcode = r.Code(SyncCodeObj)
|
||||||
|
pr.RetireDecoder(&r)
|
||||||
|
}
|
||||||
|
|
||||||
|
path := pr.PeekPkgPath(ridx)
|
||||||
assert(name != "")
|
assert(name != "")
|
||||||
|
|
||||||
tag := CodeObj(r.Code(SyncCodeObj))
|
tag := CodeObj(rcode)
|
||||||
|
|
||||||
return path, name, tag
|
return path, name, tag
|
||||||
}
|
}
|
38
vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
generated
vendored
38
vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
generated
vendored
@ -30,6 +30,12 @@ type ErrorCode int
|
|||||||
// convention that "bad" implies a problem with syntax, and "invalid" implies a
|
// convention that "bad" implies a problem with syntax, and "invalid" implies a
|
||||||
// problem with types.
|
// problem with types.
|
||||||
|
|
||||||
|
const (
|
||||||
|
// InvalidSyntaxTree occurs if an invalid syntax tree is provided
|
||||||
|
// to the type checker. It should never happen.
|
||||||
|
InvalidSyntaxTree ErrorCode = -1
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
_ ErrorCode = iota
|
_ ErrorCode = iota
|
||||||
|
|
||||||
@ -153,12 +159,12 @@ const (
|
|||||||
|
|
||||||
/* decls > var (+ other variable assignment codes) */
|
/* decls > var (+ other variable assignment codes) */
|
||||||
|
|
||||||
// UntypedNil occurs when the predeclared (untyped) value nil is used to
|
// UntypedNilUse occurs when the predeclared (untyped) value nil is used to
|
||||||
// initialize a variable declared without an explicit type.
|
// initialize a variable declared without an explicit type.
|
||||||
//
|
//
|
||||||
// Example:
|
// Example:
|
||||||
// var x = nil
|
// var x = nil
|
||||||
UntypedNil
|
UntypedNilUse
|
||||||
|
|
||||||
// WrongAssignCount occurs when the number of values on the right-hand side
|
// WrongAssignCount occurs when the number of values on the right-hand side
|
||||||
// of an assignment or or initialization expression does not match the number
|
// of an assignment or or initialization expression does not match the number
|
||||||
@ -1523,4 +1529,32 @@ const (
|
|||||||
// Example:
|
// Example:
|
||||||
// type T[P any] struct{ *P }
|
// type T[P any] struct{ *P }
|
||||||
MisplacedTypeParam
|
MisplacedTypeParam
|
||||||
|
|
||||||
|
// InvalidUnsafeSliceData occurs when unsafe.SliceData is called with
|
||||||
|
// an argument that is not of slice type. It also occurs if it is used
|
||||||
|
// in a package compiled for a language version before go1.20.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var x int
|
||||||
|
// var _ = unsafe.SliceData(x)
|
||||||
|
InvalidUnsafeSliceData
|
||||||
|
|
||||||
|
// InvalidUnsafeString occurs when unsafe.String is called with
|
||||||
|
// a length argument that is not of integer type, negative, or
|
||||||
|
// out of bounds. It also occurs if it is used in a package
|
||||||
|
// compiled for a language version before go1.20.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var b [10]byte
|
||||||
|
// var _ = unsafe.String(&b[0], -1)
|
||||||
|
InvalidUnsafeString
|
||||||
|
|
||||||
|
// InvalidUnsafeStringData occurs if it is used in a package
|
||||||
|
// compiled for a language version before go1.20.
|
||||||
|
_ // not used anymore
|
||||||
|
|
||||||
)
|
)
|
||||||
|
26
vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
generated
vendored
26
vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
generated
vendored
@ -8,6 +8,7 @@ func _() {
|
|||||||
// An "invalid array index" compiler error signifies that the constant values have changed.
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
// Re-run the stringer command to generate them again.
|
// Re-run the stringer command to generate them again.
|
||||||
var x [1]struct{}
|
var x [1]struct{}
|
||||||
|
_ = x[InvalidSyntaxTree - -1]
|
||||||
_ = x[Test-1]
|
_ = x[Test-1]
|
||||||
_ = x[BlankPkgName-2]
|
_ = x[BlankPkgName-2]
|
||||||
_ = x[MismatchedPkgName-3]
|
_ = x[MismatchedPkgName-3]
|
||||||
@ -23,7 +24,7 @@ func _() {
|
|||||||
_ = x[InvalidConstInit-13]
|
_ = x[InvalidConstInit-13]
|
||||||
_ = x[InvalidConstVal-14]
|
_ = x[InvalidConstVal-14]
|
||||||
_ = x[InvalidConstType-15]
|
_ = x[InvalidConstType-15]
|
||||||
_ = x[UntypedNil-16]
|
_ = x[UntypedNilUse-16]
|
||||||
_ = x[WrongAssignCount-17]
|
_ = x[WrongAssignCount-17]
|
||||||
_ = x[UnassignableOperand-18]
|
_ = x[UnassignableOperand-18]
|
||||||
_ = x[NoNewVar-19]
|
_ = x[NoNewVar-19]
|
||||||
@ -152,16 +153,27 @@ func _() {
|
|||||||
_ = x[MisplacedConstraintIface-142]
|
_ = x[MisplacedConstraintIface-142]
|
||||||
_ = x[InvalidMethodTypeParams-143]
|
_ = x[InvalidMethodTypeParams-143]
|
||||||
_ = x[MisplacedTypeParam-144]
|
_ = x[MisplacedTypeParam-144]
|
||||||
|
_ = x[InvalidUnsafeSliceData-145]
|
||||||
|
_ = x[InvalidUnsafeString-146]
|
||||||
}
|
}
|
||||||
|
|
||||||
const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParam"
|
const (
|
||||||
|
_ErrorCode_name_0 = "InvalidSyntaxTree"
|
||||||
|
_ErrorCode_name_1 = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilUseWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParamInvalidUnsafeSliceDataInvalidUnsafeString"
|
||||||
|
)
|
||||||
|
|
||||||
var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903, 1910, 1922, 1938, 1956, 1974, 1989, 2006, 2025, 2039, 2059, 2071, 2095, 2118, 2136}
|
var (
|
||||||
|
_ErrorCode_index_1 = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 218, 234, 253, 261, 277, 295, 312, 330, 354, 362, 377, 393, 411, 428, 443, 450, 461, 484, 499, 511, 522, 537, 551, 566, 581, 594, 603, 617, 632, 643, 658, 667, 683, 703, 721, 740, 752, 771, 790, 806, 823, 842, 856, 867, 882, 895, 910, 926, 940, 956, 971, 988, 1006, 1021, 1031, 1041, 1058, 1080, 1094, 1108, 1128, 1146, 1166, 1184, 1207, 1223, 1238, 1251, 1261, 1273, 1284, 1298, 1311, 1322, 1332, 1347, 1358, 1369, 1382, 1398, 1415, 1439, 1456, 1471, 1481, 1490, 1503, 1519, 1535, 1546, 1561, 1577, 1591, 1607, 1621, 1638, 1658, 1671, 1687, 1701, 1718, 1735, 1752, 1767, 1781, 1795, 1806, 1818, 1831, 1848, 1861, 1872, 1885, 1897, 1906, 1913, 1925, 1941, 1959, 1977, 1992, 2009, 2028, 2042, 2062, 2074, 2098, 2121, 2139, 2161, 2180}
|
||||||
|
)
|
||||||
|
|
||||||
func (i ErrorCode) String() string {
|
func (i ErrorCode) String() string {
|
||||||
i -= 1
|
switch {
|
||||||
if i < 0 || i >= ErrorCode(len(_ErrorCode_index)-1) {
|
case i == -1:
|
||||||
return "ErrorCode(" + strconv.FormatInt(int64(i+1), 10) + ")"
|
return _ErrorCode_name_0
|
||||||
|
case 1 <= i && i <= 146:
|
||||||
|
i -= 1
|
||||||
|
return _ErrorCode_name_1[_ErrorCode_index_1[i]:_ErrorCode_index_1[i+1]]
|
||||||
|
default:
|
||||||
|
return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
}
|
}
|
||||||
return _ErrorCode_name[_ErrorCode_index[i]:_ErrorCode_index[i+1]]
|
|
||||||
}
|
}
|
||||||
|
28
vendor/modules.txt
vendored
28
vendor/modules.txt
vendored
@ -1,7 +1,7 @@
|
|||||||
# github.com/cenkalti/backoff/v4 v4.1.3
|
# github.com/cenkalti/backoff/v4 v4.2.0
|
||||||
## explicit; go 1.13
|
## explicit; go 1.18
|
||||||
github.com/cenkalti/backoff/v4
|
github.com/cenkalti/backoff/v4
|
||||||
# github.com/go-acme/lego/v4 v4.9.0
|
# github.com/go-acme/lego/v4 v4.9.1
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/go-acme/lego/v4/acme
|
github.com/go-acme/lego/v4/acme
|
||||||
github.com/go-acme/lego/v4/acme/api
|
github.com/go-acme/lego/v4/acme/api
|
||||||
@ -21,7 +21,7 @@ github.com/go-acme/lego/v4/platform/config/env
|
|||||||
github.com/go-acme/lego/v4/platform/wait
|
github.com/go-acme/lego/v4/platform/wait
|
||||||
github.com/go-acme/lego/v4/providers/dns/ovh
|
github.com/go-acme/lego/v4/providers/dns/ovh
|
||||||
github.com/go-acme/lego/v4/registration
|
github.com/go-acme/lego/v4/registration
|
||||||
# github.com/goccy/go-json v0.9.11
|
# github.com/goccy/go-json v0.10.0
|
||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
github.com/goccy/go-json
|
github.com/goccy/go-json
|
||||||
github.com/goccy/go-json/internal/decoder
|
github.com/goccy/go-json/internal/decoder
|
||||||
@ -100,17 +100,17 @@ github.com/valyala/bytebufferpool
|
|||||||
# github.com/valyala/fasttemplate v1.2.2
|
# github.com/valyala/fasttemplate v1.2.2
|
||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
github.com/valyala/fasttemplate
|
github.com/valyala/fasttemplate
|
||||||
# golang.org/x/crypto v0.1.0
|
# golang.org/x/crypto v0.4.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/crypto/acme
|
golang.org/x/crypto/acme
|
||||||
golang.org/x/crypto/acme/autocert
|
golang.org/x/crypto/acme/autocert
|
||||||
golang.org/x/crypto/ed25519
|
golang.org/x/crypto/ed25519
|
||||||
golang.org/x/crypto/ocsp
|
golang.org/x/crypto/ocsp
|
||||||
golang.org/x/crypto/pbkdf2
|
golang.org/x/crypto/pbkdf2
|
||||||
# golang.org/x/mod v0.6.0
|
# golang.org/x/mod v0.7.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/net v0.1.0
|
# golang.org/x/net v0.4.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/net/bpf
|
golang.org/x/net/bpf
|
||||||
golang.org/x/net/http/httpguts
|
golang.org/x/net/http/httpguts
|
||||||
@ -122,38 +122,36 @@ golang.org/x/net/internal/iana
|
|||||||
golang.org/x/net/internal/socket
|
golang.org/x/net/internal/socket
|
||||||
golang.org/x/net/ipv4
|
golang.org/x/net/ipv4
|
||||||
golang.org/x/net/ipv6
|
golang.org/x/net/ipv6
|
||||||
# golang.org/x/sys v0.1.0
|
# golang.org/x/sys v0.3.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/sys/execabs
|
golang.org/x/sys/execabs
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
# golang.org/x/text v0.4.0
|
# golang.org/x/text v0.5.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/text/secure/bidirule
|
golang.org/x/text/secure/bidirule
|
||||||
golang.org/x/text/transform
|
golang.org/x/text/transform
|
||||||
golang.org/x/text/unicode/bidi
|
golang.org/x/text/unicode/bidi
|
||||||
golang.org/x/text/unicode/norm
|
golang.org/x/text/unicode/norm
|
||||||
# golang.org/x/time v0.1.0
|
# golang.org/x/time v0.3.0
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/time/rate
|
golang.org/x/time/rate
|
||||||
# golang.org/x/tools v0.2.0
|
# golang.org/x/tools v0.4.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/tools/go/gcexportdata
|
golang.org/x/tools/go/gcexportdata
|
||||||
golang.org/x/tools/go/internal/gcimporter
|
|
||||||
golang.org/x/tools/go/internal/packagesdriver
|
golang.org/x/tools/go/internal/packagesdriver
|
||||||
golang.org/x/tools/go/internal/pkgbits
|
|
||||||
golang.org/x/tools/go/packages
|
golang.org/x/tools/go/packages
|
||||||
golang.org/x/tools/internal/event
|
golang.org/x/tools/internal/event
|
||||||
golang.org/x/tools/internal/event/core
|
golang.org/x/tools/internal/event/core
|
||||||
golang.org/x/tools/internal/event/keys
|
golang.org/x/tools/internal/event/keys
|
||||||
golang.org/x/tools/internal/event/label
|
golang.org/x/tools/internal/event/label
|
||||||
|
golang.org/x/tools/internal/gcimporter
|
||||||
golang.org/x/tools/internal/gocommand
|
golang.org/x/tools/internal/gocommand
|
||||||
golang.org/x/tools/internal/packagesinternal
|
golang.org/x/tools/internal/packagesinternal
|
||||||
|
golang.org/x/tools/internal/pkgbits
|
||||||
golang.org/x/tools/internal/typeparams
|
golang.org/x/tools/internal/typeparams
|
||||||
golang.org/x/tools/internal/typesinternal
|
golang.org/x/tools/internal/typesinternal
|
||||||
# golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
|
|
||||||
## explicit; go 1.17
|
|
||||||
# gopkg.in/ini.v1 v1.67.0
|
# gopkg.in/ini.v1 v1.67.0
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/ini.v1
|
gopkg.in/ini.v1
|
||||||
|
Loading…
Reference in New Issue
Block a user