Bump golang.org/x/oauth2
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.0.0-20220411215720-9780585627b5 to 0.17.0. - [Commits](https://github.com/golang/oauth2/commits/v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]>
This commit is contained in:
@@ -9,7 +9,7 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.4.0
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
|
golang.org/x/oauth2 v0.17.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -23,7 +23,7 @@ require (
|
|||||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
||||||
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||||
@@ -34,13 +34,13 @@ require (
|
|||||||
github.com/skeema/knownhosts v1.2.1 // indirect
|
github.com/skeema/knownhosts v1.2.1 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
||||||
golang.org/x/crypto v0.17.0 // indirect
|
golang.org/x/crypto v0.19.0 // indirect
|
||||||
golang.org/x/mod v0.12.0 // indirect
|
golang.org/x/mod v0.12.0 // indirect
|
||||||
golang.org/x/net v0.19.0 // indirect
|
golang.org/x/net v0.21.0 // indirect
|
||||||
golang.org/x/sys v0.15.0 // indirect
|
golang.org/x/sys v0.17.0 // indirect
|
||||||
golang.org/x/tools v0.13.0 // indirect
|
golang.org/x/tools v0.13.0 // indirect
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/protobuf v1.28.0 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,40 +1,5 @@
|
|||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
|
||||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
|
||||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
|
||||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
|
||||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
|
||||||
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
|
|
||||||
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
|
|
||||||
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
|
|
||||||
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
|
|
||||||
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
|
|
||||||
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
|
||||||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
|
||||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
|
||||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
|
||||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
|
||||||
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
|
||||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
|
||||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
|
||||||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
|
||||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
|
||||||
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
|
|
||||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
|
||||||
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
|
|
||||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
|
||||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
|
||||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
|
||||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
|
||||||
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
|
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
|
||||||
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
||||||
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
||||||
@@ -45,15 +10,9 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW
|
|||||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
||||||
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
|
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
|
||||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
|
||||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
|
||||||
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
|
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
|
||||||
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
||||||
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
|
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
|
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
||||||
@@ -64,10 +23,6 @@ github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcej
|
|||||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
|
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
|
||||||
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
||||||
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
|
||||||
github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
|
github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
|
||||||
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
|
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
|
||||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
||||||
@@ -78,47 +33,12 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj
|
|||||||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
||||||
github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
|
github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
|
||||||
github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY=
|
github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
|
||||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
|
||||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
|
|
||||||
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
|
||||||
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
|
||||||
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
|
||||||
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
|
||||||
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
|
||||||
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
|
|
||||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
|
||||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
|
||||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
|
||||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
|
||||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
|
||||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
|
||||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
|
||||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
||||||
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
||||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
||||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
||||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
@@ -127,32 +47,14 @@ github.com/google/go-github/v43 v43.0.0 h1:y+GL7LIsAIF2NZlJ46ZoC/D1W1ivZasT0lnWH
|
|||||||
github.com/google/go-github/v43 v43.0.0/go.mod h1:ZkTvvmCXBvsfPpTHXnH/d2hP9Y0cTbvN9kr5xqyXOIc=
|
github.com/google/go-github/v43 v43.0.0/go.mod h1:ZkTvvmCXBvsfPpTHXnH/d2hP9Y0cTbvN9kr5xqyXOIc=
|
||||||
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
||||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
|
||||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
|
||||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
|
||||||
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
|
||||||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
|
||||||
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
|
||||||
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
|
||||||
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
|
||||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
|
||||||
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
||||||
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
|
||||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
|
||||||
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
|
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
|
||||||
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
@@ -168,8 +70,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
|||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
|
||||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
@@ -189,145 +89,41 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
|
|||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
|
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
|
||||||
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
|
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
|
||||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
|
||||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
|
||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
|
||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
|
||||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
|
||||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
||||||
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
|
||||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
|
||||||
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
|
|
||||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
|
||||||
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
|
||||||
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
|
||||||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
|
||||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
|
||||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
|
||||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
|
||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
|
||||||
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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
|
||||||
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
|
||||||
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
|
||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
|
||||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
|
|
||||||
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
|
||||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
|
||||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
|
||||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
|
||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
|
||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
|
||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
|
||||||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
|
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
|
||||||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.12.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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
|
||||||
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
|
||||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
|
||||||
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
|
||||||
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
|
||||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
|
||||||
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-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
|
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
|
||||||
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
|
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
|
||||||
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/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-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@@ -335,18 +131,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
|
||||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
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/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
|
golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U=
|
||||||
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
|
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
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=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
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.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
@@ -356,142 +150,24 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
|||||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
|
||||||
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=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
|
||||||
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
|
||||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
|
||||||
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
|
||||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
|
||||||
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
|
||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
|
||||||
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
|
||||||
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
|
|
||||||
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
|
||||||
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
|
||||||
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
|
||||||
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
|
||||||
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
|
||||||
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
|
||||||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
|
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
|
||||||
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||||
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-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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
|
||||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
|
||||||
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
|
||||||
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
|
||||||
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
|
||||||
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
|
||||||
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
|
||||||
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
|
||||||
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
|
||||||
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
|
||||||
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
|
||||||
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
|
||||||
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
|
||||||
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
|
||||||
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
|
|
||||||
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
|
||||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
|
||||||
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
|
||||||
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
||||||
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
|
||||||
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
|
|
||||||
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
|
||||||
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
|
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
|
||||||
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
|
||||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
|
||||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
|
||||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
|
||||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
|
||||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
|
||||||
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
|
||||||
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
|
||||||
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
|
||||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
|
||||||
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
|
||||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
|
||||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
|
||||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
|
||||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
|
||||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
|
||||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
|
||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
||||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
|
||||||
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
||||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
@@ -499,13 +175,3 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
|
||||||
|
|||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
// Copyright 2019 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.
|
|
||||||
|
|
||||||
//go:build !go1.13
|
|
||||||
|
|
||||||
package poly1305
|
|
||||||
|
|
||||||
// Generic fallbacks for the math/bits intrinsics, copied from
|
|
||||||
// src/math/bits/bits.go. They were added in Go 1.12, but Add64 and Sum64 had
|
|
||||||
// variable time fallbacks until Go 1.13.
|
|
||||||
|
|
||||||
func bitsAdd64(x, y, carry uint64) (sum, carryOut uint64) {
|
|
||||||
sum = x + y + carry
|
|
||||||
carryOut = ((x & y) | ((x | y) &^ sum)) >> 63
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func bitsSub64(x, y, borrow uint64) (diff, borrowOut uint64) {
|
|
||||||
diff = x - y - borrow
|
|
||||||
borrowOut = ((^x & y) | (^(x ^ y) & diff)) >> 63
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func bitsMul64(x, y uint64) (hi, lo uint64) {
|
|
||||||
const mask32 = 1<<32 - 1
|
|
||||||
x0 := x & mask32
|
|
||||||
x1 := x >> 32
|
|
||||||
y0 := y & mask32
|
|
||||||
y1 := y >> 32
|
|
||||||
w0 := x0 * y0
|
|
||||||
t := x1*y0 + w0>>32
|
|
||||||
w1 := t & mask32
|
|
||||||
w2 := t >> 32
|
|
||||||
w1 += x0 * y1
|
|
||||||
hi = x1*y1 + w2 + w1>>32
|
|
||||||
lo = x * y
|
|
||||||
return
|
|
||||||
}
|
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
// Copyright 2019 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.
|
|
||||||
|
|
||||||
//go:build go1.13
|
|
||||||
|
|
||||||
package poly1305
|
|
||||||
|
|
||||||
import "math/bits"
|
|
||||||
|
|
||||||
func bitsAdd64(x, y, carry uint64) (sum, carryOut uint64) {
|
|
||||||
return bits.Add64(x, y, carry)
|
|
||||||
}
|
|
||||||
|
|
||||||
func bitsSub64(x, y, borrow uint64) (diff, borrowOut uint64) {
|
|
||||||
return bits.Sub64(x, y, borrow)
|
|
||||||
}
|
|
||||||
|
|
||||||
func bitsMul64(x, y uint64) (hi, lo uint64) {
|
|
||||||
return bits.Mul64(x, y)
|
|
||||||
}
|
|
||||||
+23
-20
@@ -7,7 +7,10 @@
|
|||||||
|
|
||||||
package poly1305
|
package poly1305
|
||||||
|
|
||||||
import "encoding/binary"
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"math/bits"
|
||||||
|
)
|
||||||
|
|
||||||
// Poly1305 [RFC 7539] is a relatively simple algorithm: the authentication tag
|
// Poly1305 [RFC 7539] is a relatively simple algorithm: the authentication tag
|
||||||
// for a 64 bytes message is approximately
|
// for a 64 bytes message is approximately
|
||||||
@@ -114,13 +117,13 @@ type uint128 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func mul64(a, b uint64) uint128 {
|
func mul64(a, b uint64) uint128 {
|
||||||
hi, lo := bitsMul64(a, b)
|
hi, lo := bits.Mul64(a, b)
|
||||||
return uint128{lo, hi}
|
return uint128{lo, hi}
|
||||||
}
|
}
|
||||||
|
|
||||||
func add128(a, b uint128) uint128 {
|
func add128(a, b uint128) uint128 {
|
||||||
lo, c := bitsAdd64(a.lo, b.lo, 0)
|
lo, c := bits.Add64(a.lo, b.lo, 0)
|
||||||
hi, c := bitsAdd64(a.hi, b.hi, c)
|
hi, c := bits.Add64(a.hi, b.hi, c)
|
||||||
if c != 0 {
|
if c != 0 {
|
||||||
panic("poly1305: unexpected overflow")
|
panic("poly1305: unexpected overflow")
|
||||||
}
|
}
|
||||||
@@ -155,8 +158,8 @@ func updateGeneric(state *macState, msg []byte) {
|
|||||||
// hide leading zeroes. For full chunks, that's 1 << 128, so we can just
|
// hide leading zeroes. For full chunks, that's 1 << 128, so we can just
|
||||||
// add 1 to the most significant (2¹²⁸) limb, h2.
|
// add 1 to the most significant (2¹²⁸) limb, h2.
|
||||||
if len(msg) >= TagSize {
|
if len(msg) >= TagSize {
|
||||||
h0, c = bitsAdd64(h0, binary.LittleEndian.Uint64(msg[0:8]), 0)
|
h0, c = bits.Add64(h0, binary.LittleEndian.Uint64(msg[0:8]), 0)
|
||||||
h1, c = bitsAdd64(h1, binary.LittleEndian.Uint64(msg[8:16]), c)
|
h1, c = bits.Add64(h1, binary.LittleEndian.Uint64(msg[8:16]), c)
|
||||||
h2 += c + 1
|
h2 += c + 1
|
||||||
|
|
||||||
msg = msg[TagSize:]
|
msg = msg[TagSize:]
|
||||||
@@ -165,8 +168,8 @@ func updateGeneric(state *macState, msg []byte) {
|
|||||||
copy(buf[:], msg)
|
copy(buf[:], msg)
|
||||||
buf[len(msg)] = 1
|
buf[len(msg)] = 1
|
||||||
|
|
||||||
h0, c = bitsAdd64(h0, binary.LittleEndian.Uint64(buf[0:8]), 0)
|
h0, c = bits.Add64(h0, binary.LittleEndian.Uint64(buf[0:8]), 0)
|
||||||
h1, c = bitsAdd64(h1, binary.LittleEndian.Uint64(buf[8:16]), c)
|
h1, c = bits.Add64(h1, binary.LittleEndian.Uint64(buf[8:16]), c)
|
||||||
h2 += c
|
h2 += c
|
||||||
|
|
||||||
msg = nil
|
msg = nil
|
||||||
@@ -219,9 +222,9 @@ func updateGeneric(state *macState, msg []byte) {
|
|||||||
m3 := h2r1
|
m3 := h2r1
|
||||||
|
|
||||||
t0 := m0.lo
|
t0 := m0.lo
|
||||||
t1, c := bitsAdd64(m1.lo, m0.hi, 0)
|
t1, c := bits.Add64(m1.lo, m0.hi, 0)
|
||||||
t2, c := bitsAdd64(m2.lo, m1.hi, c)
|
t2, c := bits.Add64(m2.lo, m1.hi, c)
|
||||||
t3, _ := bitsAdd64(m3.lo, m2.hi, c)
|
t3, _ := bits.Add64(m3.lo, m2.hi, c)
|
||||||
|
|
||||||
// Now we have the result as 4 64-bit limbs, and we need to reduce it
|
// Now we have the result as 4 64-bit limbs, and we need to reduce it
|
||||||
// modulo 2¹³⁰ - 5. The special shape of this Crandall prime lets us do
|
// modulo 2¹³⁰ - 5. The special shape of this Crandall prime lets us do
|
||||||
@@ -243,14 +246,14 @@ func updateGeneric(state *macState, msg []byte) {
|
|||||||
|
|
||||||
// To add c * 5 to h, we first add cc = c * 4, and then add (cc >> 2) = c.
|
// To add c * 5 to h, we first add cc = c * 4, and then add (cc >> 2) = c.
|
||||||
|
|
||||||
h0, c = bitsAdd64(h0, cc.lo, 0)
|
h0, c = bits.Add64(h0, cc.lo, 0)
|
||||||
h1, c = bitsAdd64(h1, cc.hi, c)
|
h1, c = bits.Add64(h1, cc.hi, c)
|
||||||
h2 += c
|
h2 += c
|
||||||
|
|
||||||
cc = shiftRightBy2(cc)
|
cc = shiftRightBy2(cc)
|
||||||
|
|
||||||
h0, c = bitsAdd64(h0, cc.lo, 0)
|
h0, c = bits.Add64(h0, cc.lo, 0)
|
||||||
h1, c = bitsAdd64(h1, cc.hi, c)
|
h1, c = bits.Add64(h1, cc.hi, c)
|
||||||
h2 += c
|
h2 += c
|
||||||
|
|
||||||
// h2 is at most 3 + 1 + 1 = 5, making the whole of h at most
|
// h2 is at most 3 + 1 + 1 = 5, making the whole of h at most
|
||||||
@@ -287,9 +290,9 @@ func finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) {
|
|||||||
// in constant time, we compute t = h - (2¹³⁰ - 5), and select h as the
|
// in constant time, we compute t = h - (2¹³⁰ - 5), and select h as the
|
||||||
// result if the subtraction underflows, and t otherwise.
|
// result if the subtraction underflows, and t otherwise.
|
||||||
|
|
||||||
hMinusP0, b := bitsSub64(h0, p0, 0)
|
hMinusP0, b := bits.Sub64(h0, p0, 0)
|
||||||
hMinusP1, b := bitsSub64(h1, p1, b)
|
hMinusP1, b := bits.Sub64(h1, p1, b)
|
||||||
_, b = bitsSub64(h2, p2, b)
|
_, b = bits.Sub64(h2, p2, b)
|
||||||
|
|
||||||
// h = h if h < p else h - p
|
// h = h if h < p else h - p
|
||||||
h0 = select64(b, h0, hMinusP0)
|
h0 = select64(b, h0, hMinusP0)
|
||||||
@@ -301,8 +304,8 @@ func finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) {
|
|||||||
//
|
//
|
||||||
// by just doing a wide addition with the 128 low bits of h and discarding
|
// by just doing a wide addition with the 128 low bits of h and discarding
|
||||||
// the overflow.
|
// the overflow.
|
||||||
h0, c := bitsAdd64(h0, s[0], 0)
|
h0, c := bits.Add64(h0, s[0], 0)
|
||||||
h1, _ = bitsAdd64(h1, s[1], c)
|
h1, _ = bits.Add64(h1, s[1], c)
|
||||||
|
|
||||||
binary.LittleEndian.PutUint64(out[0:8], h0)
|
binary.LittleEndian.PutUint64(out[0:8], h0)
|
||||||
binary.LittleEndian.PutUint64(out[8:16], h1)
|
binary.LittleEndian.PutUint64(out[8:16], h1)
|
||||||
|
|||||||
-71
@@ -1,71 +0,0 @@
|
|||||||
// Copyright 2016 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 ctxhttp provides helper functions for performing context-aware HTTP requests.
|
|
||||||
package ctxhttp // import "golang.org/x/net/context/ctxhttp"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"net/url"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Do sends an HTTP request with the provided http.Client and returns
|
|
||||||
// an HTTP response.
|
|
||||||
//
|
|
||||||
// If the client is nil, http.DefaultClient is used.
|
|
||||||
//
|
|
||||||
// The provided ctx must be non-nil. If it is canceled or times out,
|
|
||||||
// ctx.Err() will be returned.
|
|
||||||
func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
|
|
||||||
if client == nil {
|
|
||||||
client = http.DefaultClient
|
|
||||||
}
|
|
||||||
resp, err := client.Do(req.WithContext(ctx))
|
|
||||||
// If we got an error, and the context has been canceled,
|
|
||||||
// the context's error is probably more useful.
|
|
||||||
if err != nil {
|
|
||||||
select {
|
|
||||||
case <-ctx.Done():
|
|
||||||
err = ctx.Err()
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get issues a GET request via the Do function.
|
|
||||||
func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
|
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return Do(ctx, client, req)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Head issues a HEAD request via the Do function.
|
|
||||||
func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
|
|
||||||
req, err := http.NewRequest("HEAD", url, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return Do(ctx, client, req)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Post issues a POST request via the Do function.
|
|
||||||
func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) {
|
|
||||||
req, err := http.NewRequest("POST", url, body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
req.Header.Set("Content-Type", bodyType)
|
|
||||||
return Do(ctx, client, req)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PostForm issues a POST request via the Do function.
|
|
||||||
func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) {
|
|
||||||
return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
|
|
||||||
}
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
# This source code refers to The Go Authors for copyright purposes.
|
|
||||||
# The master list of authors is in the main Go distribution,
|
|
||||||
# visible at http://tip.golang.org/AUTHORS.
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
# This source code was written by the Go contributors.
|
|
||||||
# The master list of contributors is in the main Go distribution,
|
|
||||||
# visible at http://tip.golang.org/CONTRIBUTORS.
|
|
||||||
+8
-4
@@ -19,7 +19,7 @@ See pkg.go.dev for further documentation and examples.
|
|||||||
* [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2)
|
* [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2)
|
||||||
* [pkg.go.dev/golang.org/x/oauth2/google](https://pkg.go.dev/golang.org/x/oauth2/google)
|
* [pkg.go.dev/golang.org/x/oauth2/google](https://pkg.go.dev/golang.org/x/oauth2/google)
|
||||||
|
|
||||||
## Policy for new packages
|
## Policy for new endpoints
|
||||||
|
|
||||||
We no longer accept new provider-specific packages in this repo if all
|
We no longer accept new provider-specific packages in this repo if all
|
||||||
they do is add a single endpoint variable. If you just want to add a
|
they do is add a single endpoint variable. If you just want to add a
|
||||||
@@ -29,8 +29,12 @@ package.
|
|||||||
|
|
||||||
## Report Issues / Send Patches
|
## Report Issues / Send Patches
|
||||||
|
|
||||||
This repository uses Gerrit for code changes. To learn how to submit changes to
|
|
||||||
this repository, see https://golang.org/doc/contribute.html.
|
|
||||||
|
|
||||||
The main issue tracker for the oauth2 repository is located at
|
The main issue tracker for the oauth2 repository is located at
|
||||||
https://github.com/golang/oauth2/issues.
|
https://github.com/golang/oauth2/issues.
|
||||||
|
|
||||||
|
This repository uses Gerrit for code changes. To learn how to submit changes to
|
||||||
|
this repository, see https://golang.org/doc/contribute.html. In particular:
|
||||||
|
|
||||||
|
* Excluding trivial changes, all contributions should be connected to an existing issue.
|
||||||
|
* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted.
|
||||||
|
* The code owners are listed at [dev.golang.org/owners](https://dev.golang.org/owners#:~:text=x/oauth2).
|
||||||
|
|||||||
+198
@@ -0,0 +1,198 @@
|
|||||||
|
package oauth2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/oauth2/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc8628#section-3.5
|
||||||
|
const (
|
||||||
|
errAuthorizationPending = "authorization_pending"
|
||||||
|
errSlowDown = "slow_down"
|
||||||
|
errAccessDenied = "access_denied"
|
||||||
|
errExpiredToken = "expired_token"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DeviceAuthResponse describes a successful RFC 8628 Device Authorization Response
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc8628#section-3.2
|
||||||
|
type DeviceAuthResponse struct {
|
||||||
|
// DeviceCode
|
||||||
|
DeviceCode string `json:"device_code"`
|
||||||
|
// UserCode is the code the user should enter at the verification uri
|
||||||
|
UserCode string `json:"user_code"`
|
||||||
|
// VerificationURI is where user should enter the user code
|
||||||
|
VerificationURI string `json:"verification_uri"`
|
||||||
|
// VerificationURIComplete (if populated) includes the user code in the verification URI. This is typically shown to the user in non-textual form, such as a QR code.
|
||||||
|
VerificationURIComplete string `json:"verification_uri_complete,omitempty"`
|
||||||
|
// Expiry is when the device code and user code expire
|
||||||
|
Expiry time.Time `json:"expires_in,omitempty"`
|
||||||
|
// Interval is the duration in seconds that Poll should wait between requests
|
||||||
|
Interval int64 `json:"interval,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d DeviceAuthResponse) MarshalJSON() ([]byte, error) {
|
||||||
|
type Alias DeviceAuthResponse
|
||||||
|
var expiresIn int64
|
||||||
|
if !d.Expiry.IsZero() {
|
||||||
|
expiresIn = int64(time.Until(d.Expiry).Seconds())
|
||||||
|
}
|
||||||
|
return json.Marshal(&struct {
|
||||||
|
ExpiresIn int64 `json:"expires_in,omitempty"`
|
||||||
|
*Alias
|
||||||
|
}{
|
||||||
|
ExpiresIn: expiresIn,
|
||||||
|
Alias: (*Alias)(&d),
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DeviceAuthResponse) UnmarshalJSON(data []byte) error {
|
||||||
|
type Alias DeviceAuthResponse
|
||||||
|
aux := &struct {
|
||||||
|
ExpiresIn int64 `json:"expires_in"`
|
||||||
|
// workaround misspelling of verification_uri
|
||||||
|
VerificationURL string `json:"verification_url"`
|
||||||
|
*Alias
|
||||||
|
}{
|
||||||
|
Alias: (*Alias)(c),
|
||||||
|
}
|
||||||
|
if err := json.Unmarshal(data, &aux); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if aux.ExpiresIn != 0 {
|
||||||
|
c.Expiry = time.Now().UTC().Add(time.Second * time.Duration(aux.ExpiresIn))
|
||||||
|
}
|
||||||
|
if c.VerificationURI == "" {
|
||||||
|
c.VerificationURI = aux.VerificationURL
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeviceAuth returns a device auth struct which contains a device code
|
||||||
|
// and authorization information provided for users to enter on another device.
|
||||||
|
func (c *Config) DeviceAuth(ctx context.Context, opts ...AuthCodeOption) (*DeviceAuthResponse, error) {
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc8628#section-3.1
|
||||||
|
v := url.Values{
|
||||||
|
"client_id": {c.ClientID},
|
||||||
|
}
|
||||||
|
if len(c.Scopes) > 0 {
|
||||||
|
v.Set("scope", strings.Join(c.Scopes, " "))
|
||||||
|
}
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt.setValue(v)
|
||||||
|
}
|
||||||
|
return retrieveDeviceAuth(ctx, c, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func retrieveDeviceAuth(ctx context.Context, c *Config, v url.Values) (*DeviceAuthResponse, error) {
|
||||||
|
if c.Endpoint.DeviceAuthURL == "" {
|
||||||
|
return nil, errors.New("endpoint missing DeviceAuthURL")
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", c.Endpoint.DeviceAuthURL, strings.NewReader(v.Encode()))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
req.Header.Set("Accept", "application/json")
|
||||||
|
|
||||||
|
t := time.Now()
|
||||||
|
r, err := internal.ContextClient(ctx).Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("oauth2: cannot auth device: %v", err)
|
||||||
|
}
|
||||||
|
if code := r.StatusCode; code < 200 || code > 299 {
|
||||||
|
return nil, &RetrieveError{
|
||||||
|
Response: r,
|
||||||
|
Body: body,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
da := &DeviceAuthResponse{}
|
||||||
|
err = json.Unmarshal(body, &da)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("unmarshal %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !da.Expiry.IsZero() {
|
||||||
|
// Make a small adjustment to account for time taken by the request
|
||||||
|
da.Expiry = da.Expiry.Add(-time.Since(t))
|
||||||
|
}
|
||||||
|
|
||||||
|
return da, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeviceAccessToken polls the server to exchange a device code for a token.
|
||||||
|
func (c *Config) DeviceAccessToken(ctx context.Context, da *DeviceAuthResponse, opts ...AuthCodeOption) (*Token, error) {
|
||||||
|
if !da.Expiry.IsZero() {
|
||||||
|
var cancel context.CancelFunc
|
||||||
|
ctx, cancel = context.WithDeadline(ctx, da.Expiry)
|
||||||
|
defer cancel()
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc8628#section-3.4
|
||||||
|
v := url.Values{
|
||||||
|
"client_id": {c.ClientID},
|
||||||
|
"grant_type": {"urn:ietf:params:oauth:grant-type:device_code"},
|
||||||
|
"device_code": {da.DeviceCode},
|
||||||
|
}
|
||||||
|
if len(c.Scopes) > 0 {
|
||||||
|
v.Set("scope", strings.Join(c.Scopes, " "))
|
||||||
|
}
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt.setValue(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// "If no value is provided, clients MUST use 5 as the default."
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc8628#section-3.2
|
||||||
|
interval := da.Interval
|
||||||
|
if interval == 0 {
|
||||||
|
interval = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
ticker := time.NewTicker(time.Duration(interval) * time.Second)
|
||||||
|
defer ticker.Stop()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return nil, ctx.Err()
|
||||||
|
case <-ticker.C:
|
||||||
|
tok, err := retrieveToken(ctx, c, v)
|
||||||
|
if err == nil {
|
||||||
|
return tok, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
e, ok := err.(*RetrieveError)
|
||||||
|
if !ok {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch e.ErrorCode {
|
||||||
|
case errSlowDown:
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc8628#section-3.5
|
||||||
|
// "the interval MUST be increased by 5 seconds for this and all subsequent requests"
|
||||||
|
interval += 5
|
||||||
|
ticker.Reset(time.Duration(interval) * time.Second)
|
||||||
|
case errAuthorizationPending:
|
||||||
|
// Do nothing.
|
||||||
|
case errAccessDenied, errExpiredToken:
|
||||||
|
fallthrough
|
||||||
|
default:
|
||||||
|
return tok, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
-1
@@ -3,7 +3,6 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build appengine
|
//go:build appengine
|
||||||
// +build appengine
|
|
||||||
|
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
// ParseKey converts the binary contents of a private key file
|
// ParseKey converts the binary contents of a private key file
|
||||||
// to an *rsa.PrivateKey. It detects whether the private key is in a
|
// to an *rsa.PrivateKey. It detects whether the private key is in a
|
||||||
// PEM container or not. If so, it extracts the the private key
|
// PEM container or not. If so, it extracts the private key
|
||||||
// from PEM container before conversion. It only supports PEM
|
// from PEM container before conversion. It only supports PEM
|
||||||
// containers with no passphrase.
|
// containers with no passphrase.
|
||||||
func ParseKey(key []byte) (*rsa.PrivateKey, error) {
|
func ParseKey(key []byte) (*rsa.PrivateKey, error) {
|
||||||
|
|||||||
+96
-38
@@ -18,9 +18,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/net/context/ctxhttp"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Token represents the credentials used to authorize
|
// Token represents the credentials used to authorize
|
||||||
@@ -57,12 +56,18 @@ type Token struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// tokenJSON is the struct representing the HTTP response from OAuth2
|
// tokenJSON is the struct representing the HTTP response from OAuth2
|
||||||
// providers returning a token in JSON form.
|
// providers returning a token or error in JSON form.
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc6749#section-5.1
|
||||||
type tokenJSON struct {
|
type tokenJSON struct {
|
||||||
AccessToken string `json:"access_token"`
|
AccessToken string `json:"access_token"`
|
||||||
TokenType string `json:"token_type"`
|
TokenType string `json:"token_type"`
|
||||||
RefreshToken string `json:"refresh_token"`
|
RefreshToken string `json:"refresh_token"`
|
||||||
ExpiresIn expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number
|
ExpiresIn expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number
|
||||||
|
// error fields
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc6749#section-5.2
|
||||||
|
ErrorCode string `json:"error"`
|
||||||
|
ErrorDescription string `json:"error_description"`
|
||||||
|
ErrorURI string `json:"error_uri"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *tokenJSON) expiry() (t time.Time) {
|
func (e *tokenJSON) expiry() (t time.Time) {
|
||||||
@@ -111,41 +116,60 @@ const (
|
|||||||
AuthStyleInHeader AuthStyle = 2
|
AuthStyleInHeader AuthStyle = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
// authStyleCache is the set of tokenURLs we've successfully used via
|
// LazyAuthStyleCache is a backwards compatibility compromise to let Configs
|
||||||
|
// have a lazily-initialized AuthStyleCache.
|
||||||
|
//
|
||||||
|
// The two users of this, oauth2.Config and oauth2/clientcredentials.Config,
|
||||||
|
// both would ideally just embed an unexported AuthStyleCache but because both
|
||||||
|
// were historically allowed to be copied by value we can't retroactively add an
|
||||||
|
// uncopyable Mutex to them.
|
||||||
|
//
|
||||||
|
// We could use an atomic.Pointer, but that was added recently enough (in Go
|
||||||
|
// 1.18) that we'd break Go 1.17 users where the tests as of 2023-08-03
|
||||||
|
// still pass. By using an atomic.Value, it supports both Go 1.17 and
|
||||||
|
// copying by value, even if that's not ideal.
|
||||||
|
type LazyAuthStyleCache struct {
|
||||||
|
v atomic.Value // of *AuthStyleCache
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lc *LazyAuthStyleCache) Get() *AuthStyleCache {
|
||||||
|
if c, ok := lc.v.Load().(*AuthStyleCache); ok {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
c := new(AuthStyleCache)
|
||||||
|
if !lc.v.CompareAndSwap(nil, c) {
|
||||||
|
c = lc.v.Load().(*AuthStyleCache)
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
// AuthStyleCache is the set of tokenURLs we've successfully used via
|
||||||
// RetrieveToken and which style auth we ended up using.
|
// RetrieveToken and which style auth we ended up using.
|
||||||
// It's called a cache, but it doesn't (yet?) shrink. It's expected that
|
// It's called a cache, but it doesn't (yet?) shrink. It's expected that
|
||||||
// the set of OAuth2 servers a program contacts over time is fixed and
|
// the set of OAuth2 servers a program contacts over time is fixed and
|
||||||
// small.
|
// small.
|
||||||
var authStyleCache struct {
|
type AuthStyleCache struct {
|
||||||
sync.Mutex
|
mu sync.Mutex
|
||||||
m map[string]AuthStyle // keyed by tokenURL
|
m map[string]AuthStyle // keyed by tokenURL
|
||||||
}
|
|
||||||
|
|
||||||
// ResetAuthCache resets the global authentication style cache used
|
|
||||||
// for AuthStyleUnknown token requests.
|
|
||||||
func ResetAuthCache() {
|
|
||||||
authStyleCache.Lock()
|
|
||||||
defer authStyleCache.Unlock()
|
|
||||||
authStyleCache.m = nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// lookupAuthStyle reports which auth style we last used with tokenURL
|
// lookupAuthStyle reports which auth style we last used with tokenURL
|
||||||
// when calling RetrieveToken and whether we have ever done so.
|
// when calling RetrieveToken and whether we have ever done so.
|
||||||
func lookupAuthStyle(tokenURL string) (style AuthStyle, ok bool) {
|
func (c *AuthStyleCache) lookupAuthStyle(tokenURL string) (style AuthStyle, ok bool) {
|
||||||
authStyleCache.Lock()
|
c.mu.Lock()
|
||||||
defer authStyleCache.Unlock()
|
defer c.mu.Unlock()
|
||||||
style, ok = authStyleCache.m[tokenURL]
|
style, ok = c.m[tokenURL]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// setAuthStyle adds an entry to authStyleCache, documented above.
|
// setAuthStyle adds an entry to authStyleCache, documented above.
|
||||||
func setAuthStyle(tokenURL string, v AuthStyle) {
|
func (c *AuthStyleCache) setAuthStyle(tokenURL string, v AuthStyle) {
|
||||||
authStyleCache.Lock()
|
c.mu.Lock()
|
||||||
defer authStyleCache.Unlock()
|
defer c.mu.Unlock()
|
||||||
if authStyleCache.m == nil {
|
if c.m == nil {
|
||||||
authStyleCache.m = make(map[string]AuthStyle)
|
c.m = make(map[string]AuthStyle)
|
||||||
}
|
}
|
||||||
authStyleCache.m[tokenURL] = v
|
c.m[tokenURL] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
// newTokenRequest returns a new *http.Request to retrieve a new token
|
// newTokenRequest returns a new *http.Request to retrieve a new token
|
||||||
@@ -185,10 +209,10 @@ func cloneURLValues(v url.Values) url.Values {
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, v url.Values, authStyle AuthStyle) (*Token, error) {
|
func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, v url.Values, authStyle AuthStyle, styleCache *AuthStyleCache) (*Token, error) {
|
||||||
needsAuthStyleProbe := authStyle == 0
|
needsAuthStyleProbe := authStyle == 0
|
||||||
if needsAuthStyleProbe {
|
if needsAuthStyleProbe {
|
||||||
if style, ok := lookupAuthStyle(tokenURL); ok {
|
if style, ok := styleCache.lookupAuthStyle(tokenURL); ok {
|
||||||
authStyle = style
|
authStyle = style
|
||||||
needsAuthStyleProbe = false
|
needsAuthStyleProbe = false
|
||||||
} else {
|
} else {
|
||||||
@@ -218,7 +242,7 @@ func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string,
|
|||||||
token, err = doTokenRoundTrip(ctx, req)
|
token, err = doTokenRoundTrip(ctx, req)
|
||||||
}
|
}
|
||||||
if needsAuthStyleProbe && err == nil {
|
if needsAuthStyleProbe && err == nil {
|
||||||
setAuthStyle(tokenURL, authStyle)
|
styleCache.setAuthStyle(tokenURL, authStyle)
|
||||||
}
|
}
|
||||||
// Don't overwrite `RefreshToken` with an empty value
|
// Don't overwrite `RefreshToken` with an empty value
|
||||||
// if this was a token refreshing request.
|
// if this was a token refreshing request.
|
||||||
@@ -229,7 +253,7 @@ func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
|
func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
|
||||||
r, err := ctxhttp.Do(ctx, ContextClient(ctx), req)
|
r, err := ContextClient(ctx).Do(req.WithContext(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -238,21 +262,29 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err)
|
return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err)
|
||||||
}
|
}
|
||||||
if code := r.StatusCode; code < 200 || code > 299 {
|
|
||||||
return nil, &RetrieveError{
|
failureStatus := r.StatusCode < 200 || r.StatusCode > 299
|
||||||
Response: r,
|
retrieveError := &RetrieveError{
|
||||||
Body: body,
|
Response: r,
|
||||||
}
|
Body: body,
|
||||||
|
// attempt to populate error detail below
|
||||||
}
|
}
|
||||||
|
|
||||||
var token *Token
|
var token *Token
|
||||||
content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type"))
|
content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type"))
|
||||||
switch content {
|
switch content {
|
||||||
case "application/x-www-form-urlencoded", "text/plain":
|
case "application/x-www-form-urlencoded", "text/plain":
|
||||||
|
// some endpoints return a query string
|
||||||
vals, err := url.ParseQuery(string(body))
|
vals, err := url.ParseQuery(string(body))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
if failureStatus {
|
||||||
|
return nil, retrieveError
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("oauth2: cannot parse response: %v", err)
|
||||||
}
|
}
|
||||||
|
retrieveError.ErrorCode = vals.Get("error")
|
||||||
|
retrieveError.ErrorDescription = vals.Get("error_description")
|
||||||
|
retrieveError.ErrorURI = vals.Get("error_uri")
|
||||||
token = &Token{
|
token = &Token{
|
||||||
AccessToken: vals.Get("access_token"),
|
AccessToken: vals.Get("access_token"),
|
||||||
TokenType: vals.Get("token_type"),
|
TokenType: vals.Get("token_type"),
|
||||||
@@ -267,8 +299,14 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
|
|||||||
default:
|
default:
|
||||||
var tj tokenJSON
|
var tj tokenJSON
|
||||||
if err = json.Unmarshal(body, &tj); err != nil {
|
if err = json.Unmarshal(body, &tj); err != nil {
|
||||||
return nil, err
|
if failureStatus {
|
||||||
|
return nil, retrieveError
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("oauth2: cannot parse json: %v", err)
|
||||||
}
|
}
|
||||||
|
retrieveError.ErrorCode = tj.ErrorCode
|
||||||
|
retrieveError.ErrorDescription = tj.ErrorDescription
|
||||||
|
retrieveError.ErrorURI = tj.ErrorURI
|
||||||
token = &Token{
|
token = &Token{
|
||||||
AccessToken: tj.AccessToken,
|
AccessToken: tj.AccessToken,
|
||||||
TokenType: tj.TokenType,
|
TokenType: tj.TokenType,
|
||||||
@@ -278,17 +316,37 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
|
|||||||
}
|
}
|
||||||
json.Unmarshal(body, &token.Raw) // no error checks for optional fields
|
json.Unmarshal(body, &token.Raw) // no error checks for optional fields
|
||||||
}
|
}
|
||||||
|
// according to spec, servers should respond status 400 in error case
|
||||||
|
// https://www.rfc-editor.org/rfc/rfc6749#section-5.2
|
||||||
|
// but some unorthodox servers respond 200 in error case
|
||||||
|
if failureStatus || retrieveError.ErrorCode != "" {
|
||||||
|
return nil, retrieveError
|
||||||
|
}
|
||||||
if token.AccessToken == "" {
|
if token.AccessToken == "" {
|
||||||
return nil, errors.New("oauth2: server response missing access_token")
|
return nil, errors.New("oauth2: server response missing access_token")
|
||||||
}
|
}
|
||||||
return token, nil
|
return token, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mirrors oauth2.RetrieveError
|
||||||
type RetrieveError struct {
|
type RetrieveError struct {
|
||||||
Response *http.Response
|
Response *http.Response
|
||||||
Body []byte
|
Body []byte
|
||||||
|
ErrorCode string
|
||||||
|
ErrorDescription string
|
||||||
|
ErrorURI string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RetrieveError) Error() string {
|
func (r *RetrieveError) Error() string {
|
||||||
|
if r.ErrorCode != "" {
|
||||||
|
s := fmt.Sprintf("oauth2: %q", r.ErrorCode)
|
||||||
|
if r.ErrorDescription != "" {
|
||||||
|
s += fmt.Sprintf(" %q", r.ErrorDescription)
|
||||||
|
}
|
||||||
|
if r.ErrorURI != "" {
|
||||||
|
s += fmt.Sprintf(" %q", r.ErrorURI)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body)
|
return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body)
|
||||||
}
|
}
|
||||||
|
|||||||
+52
-12
@@ -16,6 +16,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"golang.org/x/oauth2/internal"
|
"golang.org/x/oauth2/internal"
|
||||||
)
|
)
|
||||||
@@ -57,6 +58,10 @@ type Config struct {
|
|||||||
|
|
||||||
// Scope specifies optional requested permissions.
|
// Scope specifies optional requested permissions.
|
||||||
Scopes []string
|
Scopes []string
|
||||||
|
|
||||||
|
// authStyleCache caches which auth style to use when Endpoint.AuthStyle is
|
||||||
|
// the zero value (AuthStyleAutoDetect).
|
||||||
|
authStyleCache internal.LazyAuthStyleCache
|
||||||
}
|
}
|
||||||
|
|
||||||
// A TokenSource is anything that can return a token.
|
// A TokenSource is anything that can return a token.
|
||||||
@@ -70,8 +75,9 @@ type TokenSource interface {
|
|||||||
// Endpoint represents an OAuth 2.0 provider's authorization and token
|
// Endpoint represents an OAuth 2.0 provider's authorization and token
|
||||||
// endpoint URLs.
|
// endpoint URLs.
|
||||||
type Endpoint struct {
|
type Endpoint struct {
|
||||||
AuthURL string
|
AuthURL string
|
||||||
TokenURL string
|
DeviceAuthURL string
|
||||||
|
TokenURL string
|
||||||
|
|
||||||
// AuthStyle optionally specifies how the endpoint wants the
|
// AuthStyle optionally specifies how the endpoint wants the
|
||||||
// client ID & client secret sent. The zero value means to
|
// client ID & client secret sent. The zero value means to
|
||||||
@@ -138,15 +144,19 @@ func SetAuthURLParam(key, value string) AuthCodeOption {
|
|||||||
// AuthCodeURL returns a URL to OAuth 2.0 provider's consent page
|
// AuthCodeURL returns a URL to OAuth 2.0 provider's consent page
|
||||||
// that asks for permissions for the required scopes explicitly.
|
// that asks for permissions for the required scopes explicitly.
|
||||||
//
|
//
|
||||||
// State is a token to protect the user from CSRF attacks. You must
|
// State is an opaque value used by the client to maintain state between the
|
||||||
// always provide a non-empty string and validate that it matches the
|
// request and callback. The authorization server includes this value when
|
||||||
// the state query parameter on your redirect callback.
|
// redirecting the user agent back to the client.
|
||||||
// See http://tools.ietf.org/html/rfc6749#section-10.12 for more info.
|
|
||||||
//
|
//
|
||||||
// Opts may include AccessTypeOnline or AccessTypeOffline, as well
|
// Opts may include AccessTypeOnline or AccessTypeOffline, as well
|
||||||
// as ApprovalForce.
|
// as ApprovalForce.
|
||||||
// It can also be used to pass the PKCE challenge.
|
//
|
||||||
// See https://www.oauth.com/oauth2-servers/pkce/ for more info.
|
// To protect against CSRF attacks, opts should include a PKCE challenge
|
||||||
|
// (S256ChallengeOption). Not all servers support PKCE. An alternative is to
|
||||||
|
// generate a random state parameter and verify it after exchange.
|
||||||
|
// See https://datatracker.ietf.org/doc/html/rfc6749#section-10.12 (predating
|
||||||
|
// PKCE), https://www.oauth.com/oauth2-servers/pkce/ and
|
||||||
|
// https://www.ietf.org/archive/id/draft-ietf-oauth-v2-1-09.html#name-cross-site-request-forgery (describing both approaches)
|
||||||
func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string {
|
func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
buf.WriteString(c.Endpoint.AuthURL)
|
buf.WriteString(c.Endpoint.AuthURL)
|
||||||
@@ -161,7 +171,6 @@ func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string {
|
|||||||
v.Set("scope", strings.Join(c.Scopes, " "))
|
v.Set("scope", strings.Join(c.Scopes, " "))
|
||||||
}
|
}
|
||||||
if state != "" {
|
if state != "" {
|
||||||
// TODO(light): Docs say never to omit state; don't allow empty.
|
|
||||||
v.Set("state", state)
|
v.Set("state", state)
|
||||||
}
|
}
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
@@ -206,10 +215,11 @@ func (c *Config) PasswordCredentialsToken(ctx context.Context, username, passwor
|
|||||||
// The provided context optionally controls which HTTP client is used. See the HTTPClient variable.
|
// The provided context optionally controls which HTTP client is used. See the HTTPClient variable.
|
||||||
//
|
//
|
||||||
// The code will be in the *http.Request.FormValue("code"). Before
|
// The code will be in the *http.Request.FormValue("code"). Before
|
||||||
// calling Exchange, be sure to validate FormValue("state").
|
// calling Exchange, be sure to validate FormValue("state") if you are
|
||||||
|
// using it to protect against CSRF attacks.
|
||||||
//
|
//
|
||||||
// Opts may include the PKCE verifier code if previously used in AuthCodeURL.
|
// If using PKCE to protect against CSRF attacks, opts should include a
|
||||||
// See https://www.oauth.com/oauth2-servers/pkce/ for more info.
|
// VerifierOption.
|
||||||
func (c *Config) Exchange(ctx context.Context, code string, opts ...AuthCodeOption) (*Token, error) {
|
func (c *Config) Exchange(ctx context.Context, code string, opts ...AuthCodeOption) (*Token, error) {
|
||||||
v := url.Values{
|
v := url.Values{
|
||||||
"grant_type": {"authorization_code"},
|
"grant_type": {"authorization_code"},
|
||||||
@@ -290,6 +300,8 @@ type reuseTokenSource struct {
|
|||||||
|
|
||||||
mu sync.Mutex // guards t
|
mu sync.Mutex // guards t
|
||||||
t *Token
|
t *Token
|
||||||
|
|
||||||
|
expiryDelta time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// Token returns the current token if it's still valid, else will
|
// Token returns the current token if it's still valid, else will
|
||||||
@@ -305,6 +317,7 @@ func (s *reuseTokenSource) Token() (*Token, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
t.expiryDelta = s.expiryDelta
|
||||||
s.t = t
|
s.t = t
|
||||||
return t, nil
|
return t, nil
|
||||||
}
|
}
|
||||||
@@ -379,3 +392,30 @@ func ReuseTokenSource(t *Token, src TokenSource) TokenSource {
|
|||||||
new: src,
|
new: src,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReuseTokenSource returns a TokenSource that acts in the same manner as the
|
||||||
|
// TokenSource returned by ReuseTokenSource, except the expiry buffer is
|
||||||
|
// configurable. The expiration time of a token is calculated as
|
||||||
|
// t.Expiry.Add(-earlyExpiry).
|
||||||
|
func ReuseTokenSourceWithExpiry(t *Token, src TokenSource, earlyExpiry time.Duration) TokenSource {
|
||||||
|
// Don't wrap a reuseTokenSource in itself. That would work,
|
||||||
|
// but cause an unnecessary number of mutex operations.
|
||||||
|
// Just build the equivalent one.
|
||||||
|
if rt, ok := src.(*reuseTokenSource); ok {
|
||||||
|
if t == nil {
|
||||||
|
// Just use it directly, but set the expiryDelta to earlyExpiry,
|
||||||
|
// so the behavior matches what the user expects.
|
||||||
|
rt.expiryDelta = earlyExpiry
|
||||||
|
return rt
|
||||||
|
}
|
||||||
|
src = rt.new
|
||||||
|
}
|
||||||
|
if t != nil {
|
||||||
|
t.expiryDelta = earlyExpiry
|
||||||
|
}
|
||||||
|
return &reuseTokenSource{
|
||||||
|
t: t,
|
||||||
|
new: src,
|
||||||
|
expiryDelta: earlyExpiry,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
// Copyright 2023 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 oauth2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/base64"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
codeChallengeKey = "code_challenge"
|
||||||
|
codeChallengeMethodKey = "code_challenge_method"
|
||||||
|
codeVerifierKey = "code_verifier"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateVerifier generates a PKCE code verifier with 32 octets of randomness.
|
||||||
|
// This follows recommendations in RFC 7636.
|
||||||
|
//
|
||||||
|
// A fresh verifier should be generated for each authorization.
|
||||||
|
// S256ChallengeOption(verifier) should then be passed to Config.AuthCodeURL
|
||||||
|
// (or Config.DeviceAccess) and VerifierOption(verifier) to Config.Exchange
|
||||||
|
// (or Config.DeviceAccessToken).
|
||||||
|
func GenerateVerifier() string {
|
||||||
|
// "RECOMMENDED that the output of a suitable random number generator be
|
||||||
|
// used to create a 32-octet sequence. The octet sequence is then
|
||||||
|
// base64url-encoded to produce a 43-octet URL-safe string to use as the
|
||||||
|
// code verifier."
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc7636#section-4.1
|
||||||
|
data := make([]byte, 32)
|
||||||
|
if _, err := rand.Read(data); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return base64.RawURLEncoding.EncodeToString(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// VerifierOption returns a PKCE code verifier AuthCodeOption. It should be
|
||||||
|
// passed to Config.Exchange or Config.DeviceAccessToken only.
|
||||||
|
func VerifierOption(verifier string) AuthCodeOption {
|
||||||
|
return setParam{k: codeVerifierKey, v: verifier}
|
||||||
|
}
|
||||||
|
|
||||||
|
// S256ChallengeFromVerifier returns a PKCE code challenge derived from verifier with method S256.
|
||||||
|
//
|
||||||
|
// Prefer to use S256ChallengeOption where possible.
|
||||||
|
func S256ChallengeFromVerifier(verifier string) string {
|
||||||
|
sha := sha256.Sum256([]byte(verifier))
|
||||||
|
return base64.RawURLEncoding.EncodeToString(sha[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// S256ChallengeOption derives a PKCE code challenge derived from verifier with
|
||||||
|
// method S256. It should be passed to Config.AuthCodeURL or Config.DeviceAccess
|
||||||
|
// only.
|
||||||
|
func S256ChallengeOption(verifier string) AuthCodeOption {
|
||||||
|
return challengeOption{
|
||||||
|
challenge_method: "S256",
|
||||||
|
challenge: S256ChallengeFromVerifier(verifier),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type challengeOption struct{ challenge_method, challenge string }
|
||||||
|
|
||||||
|
func (p challengeOption) setValue(m url.Values) {
|
||||||
|
m.Set(codeChallengeMethodKey, p.challenge_method)
|
||||||
|
m.Set(codeChallengeKey, p.challenge)
|
||||||
|
}
|
||||||
+31
-4
@@ -16,10 +16,10 @@ import (
|
|||||||
"golang.org/x/oauth2/internal"
|
"golang.org/x/oauth2/internal"
|
||||||
)
|
)
|
||||||
|
|
||||||
// expiryDelta determines how earlier a token should be considered
|
// defaultExpiryDelta determines how earlier a token should be considered
|
||||||
// expired than its actual expiration time. It is used to avoid late
|
// expired than its actual expiration time. It is used to avoid late
|
||||||
// expirations due to client-server time mismatches.
|
// expirations due to client-server time mismatches.
|
||||||
const expiryDelta = 10 * time.Second
|
const defaultExpiryDelta = 10 * time.Second
|
||||||
|
|
||||||
// Token represents the credentials used to authorize
|
// Token represents the credentials used to authorize
|
||||||
// the requests to access protected resources on the OAuth 2.0
|
// the requests to access protected resources on the OAuth 2.0
|
||||||
@@ -52,6 +52,11 @@ type Token struct {
|
|||||||
// raw optionally contains extra metadata from the server
|
// raw optionally contains extra metadata from the server
|
||||||
// when updating a token.
|
// when updating a token.
|
||||||
raw interface{}
|
raw interface{}
|
||||||
|
|
||||||
|
// expiryDelta is used to calculate when a token is considered
|
||||||
|
// expired, by subtracting from Expiry. If zero, defaultExpiryDelta
|
||||||
|
// is used.
|
||||||
|
expiryDelta time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type returns t.TokenType if non-empty, else "Bearer".
|
// Type returns t.TokenType if non-empty, else "Bearer".
|
||||||
@@ -127,6 +132,11 @@ func (t *Token) expired() bool {
|
|||||||
if t.Expiry.IsZero() {
|
if t.Expiry.IsZero() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expiryDelta := defaultExpiryDelta
|
||||||
|
if t.expiryDelta != 0 {
|
||||||
|
expiryDelta = t.expiryDelta
|
||||||
|
}
|
||||||
return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow())
|
return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,7 +164,7 @@ func tokenFromInternal(t *internal.Token) *Token {
|
|||||||
// This token is then mapped from *internal.Token into an *oauth2.Token which is returned along
|
// This token is then mapped from *internal.Token into an *oauth2.Token which is returned along
|
||||||
// with an error..
|
// with an error..
|
||||||
func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) {
|
func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) {
|
||||||
tk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v, internal.AuthStyle(c.Endpoint.AuthStyle))
|
tk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v, internal.AuthStyle(c.Endpoint.AuthStyle), c.authStyleCache.Get())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if rErr, ok := err.(*internal.RetrieveError); ok {
|
if rErr, ok := err.(*internal.RetrieveError); ok {
|
||||||
return nil, (*RetrieveError)(rErr)
|
return nil, (*RetrieveError)(rErr)
|
||||||
@@ -165,14 +175,31 @@ func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RetrieveError is the error returned when the token endpoint returns a
|
// RetrieveError is the error returned when the token endpoint returns a
|
||||||
// non-2XX HTTP status code.
|
// non-2XX HTTP status code or populates RFC 6749's 'error' parameter.
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc6749#section-5.2
|
||||||
type RetrieveError struct {
|
type RetrieveError struct {
|
||||||
Response *http.Response
|
Response *http.Response
|
||||||
// Body is the body that was consumed by reading Response.Body.
|
// Body is the body that was consumed by reading Response.Body.
|
||||||
// It may be truncated.
|
// It may be truncated.
|
||||||
Body []byte
|
Body []byte
|
||||||
|
// ErrorCode is RFC 6749's 'error' parameter.
|
||||||
|
ErrorCode string
|
||||||
|
// ErrorDescription is RFC 6749's 'error_description' parameter.
|
||||||
|
ErrorDescription string
|
||||||
|
// ErrorURI is RFC 6749's 'error_uri' parameter.
|
||||||
|
ErrorURI string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RetrieveError) Error() string {
|
func (r *RetrieveError) Error() string {
|
||||||
|
if r.ErrorCode != "" {
|
||||||
|
s := fmt.Sprintf("oauth2: %q", r.ErrorCode)
|
||||||
|
if r.ErrorDescription != "" {
|
||||||
|
s += fmt.Sprintf(" %q", r.ErrorDescription)
|
||||||
|
}
|
||||||
|
if r.ErrorURI != "" {
|
||||||
|
s += fmt.Sprintf(" %q", r.ErrorURI)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body)
|
return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body)
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-17
@@ -248,6 +248,7 @@ struct ltchars {
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mount.h>
|
#include <linux/mount.h>
|
||||||
#include <linux/netfilter/nfnetlink.h>
|
#include <linux/netfilter/nfnetlink.h>
|
||||||
|
#include <linux/netfilter/nf_tables.h>
|
||||||
#include <linux/netlink.h>
|
#include <linux/netlink.h>
|
||||||
#include <linux/net_namespace.h>
|
#include <linux/net_namespace.h>
|
||||||
#include <linux/nfc.h>
|
#include <linux/nfc.h>
|
||||||
@@ -283,10 +284,6 @@ struct ltchars {
|
|||||||
#include <asm/termbits.h>
|
#include <asm/termbits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef MSG_FASTOPEN
|
|
||||||
#define MSG_FASTOPEN 0x20000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PTRACE_GETREGS
|
#ifndef PTRACE_GETREGS
|
||||||
#define PTRACE_GETREGS 0xc
|
#define PTRACE_GETREGS 0xc
|
||||||
#endif
|
#endif
|
||||||
@@ -295,14 +292,6 @@ struct ltchars {
|
|||||||
#define PTRACE_SETREGS 0xd
|
#define PTRACE_SETREGS 0xd
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SOL_NETLINK
|
|
||||||
#define SOL_NETLINK 270
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SOL_SMC
|
|
||||||
#define SOL_SMC 286
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SOL_BLUETOOTH
|
#ifdef SOL_BLUETOOTH
|
||||||
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
|
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
|
||||||
// but it is already in bluetooth_linux.go
|
// but it is already in bluetooth_linux.go
|
||||||
@@ -319,10 +308,23 @@ struct ltchars {
|
|||||||
#undef TIPC_WAIT_FOREVER
|
#undef TIPC_WAIT_FOREVER
|
||||||
#define TIPC_WAIT_FOREVER 0xffffffff
|
#define TIPC_WAIT_FOREVER 0xffffffff
|
||||||
|
|
||||||
// Copied from linux/l2tp.h
|
// Copied from linux/netfilter/nf_nat.h
|
||||||
// Including linux/l2tp.h here causes conflicts between linux/in.h
|
// Including linux/netfilter/nf_nat.h here causes conflicts between linux/in.h
|
||||||
// and netinet/in.h included via net/route.h above.
|
// and netinet/in.h.
|
||||||
#define IPPROTO_L2TP 115
|
#define NF_NAT_RANGE_MAP_IPS (1 << 0)
|
||||||
|
#define NF_NAT_RANGE_PROTO_SPECIFIED (1 << 1)
|
||||||
|
#define NF_NAT_RANGE_PROTO_RANDOM (1 << 2)
|
||||||
|
#define NF_NAT_RANGE_PERSISTENT (1 << 3)
|
||||||
|
#define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4)
|
||||||
|
#define NF_NAT_RANGE_PROTO_OFFSET (1 << 5)
|
||||||
|
#define NF_NAT_RANGE_NETMAP (1 << 6)
|
||||||
|
#define NF_NAT_RANGE_PROTO_RANDOM_ALL \
|
||||||
|
(NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
|
||||||
|
#define NF_NAT_RANGE_MASK \
|
||||||
|
(NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | \
|
||||||
|
NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | \
|
||||||
|
NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET | \
|
||||||
|
NF_NAT_RANGE_NETMAP)
|
||||||
|
|
||||||
// Copied from linux/hid.h.
|
// Copied from linux/hid.h.
|
||||||
// Keep in sync with the size of the referenced fields.
|
// Keep in sync with the size of the referenced fields.
|
||||||
@@ -582,7 +584,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
|
$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
|
||||||
$2 ~ /^KEYCTL_/ ||
|
$2 ~ /^KEYCTL_/ ||
|
||||||
$2 ~ /^PERF_/ ||
|
$2 ~ /^PERF_/ ||
|
||||||
$2 ~ /^SECCOMP_MODE_/ ||
|
$2 ~ /^SECCOMP_/ ||
|
||||||
$2 ~ /^SEEK_/ ||
|
$2 ~ /^SEEK_/ ||
|
||||||
$2 ~ /^SCHED_/ ||
|
$2 ~ /^SCHED_/ ||
|
||||||
$2 ~ /^SPLICE_/ ||
|
$2 ~ /^SPLICE_/ ||
|
||||||
@@ -603,6 +605,9 @@ ccflags="$@"
|
|||||||
$2 ~ /^FSOPT_/ ||
|
$2 ~ /^FSOPT_/ ||
|
||||||
$2 ~ /^WDIO[CFS]_/ ||
|
$2 ~ /^WDIO[CFS]_/ ||
|
||||||
$2 ~ /^NFN/ ||
|
$2 ~ /^NFN/ ||
|
||||||
|
$2 !~ /^NFT_META_IIFTYPE/ &&
|
||||||
|
$2 ~ /^NFT_/ ||
|
||||||
|
$2 ~ /^NF_NAT_/ ||
|
||||||
$2 ~ /^XDP_/ ||
|
$2 ~ /^XDP_/ ||
|
||||||
$2 ~ /^RWF_/ ||
|
$2 ~ /^RWF_/ ||
|
||||||
$2 ~ /^(HDIO|WIN|SMART)_/ ||
|
$2 ~ /^(HDIO|WIN|SMART)_/ ||
|
||||||
|
|||||||
+89
-1
@@ -1785,6 +1785,8 @@ const (
|
|||||||
LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20
|
LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20
|
||||||
LANDLOCK_ACCESS_FS_TRUNCATE = 0x4000
|
LANDLOCK_ACCESS_FS_TRUNCATE = 0x4000
|
||||||
LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2
|
LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2
|
||||||
|
LANDLOCK_ACCESS_NET_BIND_TCP = 0x1
|
||||||
|
LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2
|
||||||
LANDLOCK_CREATE_RULESET_VERSION = 0x1
|
LANDLOCK_CREATE_RULESET_VERSION = 0x1
|
||||||
LINUX_REBOOT_CMD_CAD_OFF = 0x0
|
LINUX_REBOOT_CMD_CAD_OFF = 0x0
|
||||||
LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
|
LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
|
||||||
@@ -2127,6 +2129,60 @@ const (
|
|||||||
NFNL_SUBSYS_QUEUE = 0x3
|
NFNL_SUBSYS_QUEUE = 0x3
|
||||||
NFNL_SUBSYS_ULOG = 0x4
|
NFNL_SUBSYS_ULOG = 0x4
|
||||||
NFS_SUPER_MAGIC = 0x6969
|
NFS_SUPER_MAGIC = 0x6969
|
||||||
|
NFT_CHAIN_FLAGS = 0x7
|
||||||
|
NFT_CHAIN_MAXNAMELEN = 0x100
|
||||||
|
NFT_CT_MAX = 0x17
|
||||||
|
NFT_DATA_RESERVED_MASK = 0xffffff00
|
||||||
|
NFT_DATA_VALUE_MAXLEN = 0x40
|
||||||
|
NFT_EXTHDR_OP_MAX = 0x4
|
||||||
|
NFT_FIB_RESULT_MAX = 0x3
|
||||||
|
NFT_INNER_MASK = 0xf
|
||||||
|
NFT_LOGLEVEL_MAX = 0x8
|
||||||
|
NFT_NAME_MAXLEN = 0x100
|
||||||
|
NFT_NG_MAX = 0x1
|
||||||
|
NFT_OBJECT_CONNLIMIT = 0x5
|
||||||
|
NFT_OBJECT_COUNTER = 0x1
|
||||||
|
NFT_OBJECT_CT_EXPECT = 0x9
|
||||||
|
NFT_OBJECT_CT_HELPER = 0x3
|
||||||
|
NFT_OBJECT_CT_TIMEOUT = 0x7
|
||||||
|
NFT_OBJECT_LIMIT = 0x4
|
||||||
|
NFT_OBJECT_MAX = 0xa
|
||||||
|
NFT_OBJECT_QUOTA = 0x2
|
||||||
|
NFT_OBJECT_SECMARK = 0x8
|
||||||
|
NFT_OBJECT_SYNPROXY = 0xa
|
||||||
|
NFT_OBJECT_TUNNEL = 0x6
|
||||||
|
NFT_OBJECT_UNSPEC = 0x0
|
||||||
|
NFT_OBJ_MAXNAMELEN = 0x100
|
||||||
|
NFT_OSF_MAXGENRELEN = 0x10
|
||||||
|
NFT_QUEUE_FLAG_BYPASS = 0x1
|
||||||
|
NFT_QUEUE_FLAG_CPU_FANOUT = 0x2
|
||||||
|
NFT_QUEUE_FLAG_MASK = 0x3
|
||||||
|
NFT_REG32_COUNT = 0x10
|
||||||
|
NFT_REG32_SIZE = 0x4
|
||||||
|
NFT_REG_MAX = 0x4
|
||||||
|
NFT_REG_SIZE = 0x10
|
||||||
|
NFT_REJECT_ICMPX_MAX = 0x3
|
||||||
|
NFT_RT_MAX = 0x4
|
||||||
|
NFT_SECMARK_CTX_MAXLEN = 0x100
|
||||||
|
NFT_SET_MAXNAMELEN = 0x100
|
||||||
|
NFT_SOCKET_MAX = 0x3
|
||||||
|
NFT_TABLE_F_MASK = 0x3
|
||||||
|
NFT_TABLE_MAXNAMELEN = 0x100
|
||||||
|
NFT_TRACETYPE_MAX = 0x3
|
||||||
|
NFT_TUNNEL_F_MASK = 0x7
|
||||||
|
NFT_TUNNEL_MAX = 0x1
|
||||||
|
NFT_TUNNEL_MODE_MAX = 0x2
|
||||||
|
NFT_USERDATA_MAXLEN = 0x100
|
||||||
|
NFT_XFRM_KEY_MAX = 0x6
|
||||||
|
NF_NAT_RANGE_MAP_IPS = 0x1
|
||||||
|
NF_NAT_RANGE_MASK = 0x7f
|
||||||
|
NF_NAT_RANGE_NETMAP = 0x40
|
||||||
|
NF_NAT_RANGE_PERSISTENT = 0x8
|
||||||
|
NF_NAT_RANGE_PROTO_OFFSET = 0x20
|
||||||
|
NF_NAT_RANGE_PROTO_RANDOM = 0x4
|
||||||
|
NF_NAT_RANGE_PROTO_RANDOM_ALL = 0x14
|
||||||
|
NF_NAT_RANGE_PROTO_RANDOM_FULLY = 0x10
|
||||||
|
NF_NAT_RANGE_PROTO_SPECIFIED = 0x2
|
||||||
NILFS_SUPER_MAGIC = 0x3434
|
NILFS_SUPER_MAGIC = 0x3434
|
||||||
NL0 = 0x0
|
NL0 = 0x0
|
||||||
NL1 = 0x100
|
NL1 = 0x100
|
||||||
@@ -2411,6 +2467,7 @@ const (
|
|||||||
PR_MCE_KILL_GET = 0x22
|
PR_MCE_KILL_GET = 0x22
|
||||||
PR_MCE_KILL_LATE = 0x0
|
PR_MCE_KILL_LATE = 0x0
|
||||||
PR_MCE_KILL_SET = 0x1
|
PR_MCE_KILL_SET = 0x1
|
||||||
|
PR_MDWE_NO_INHERIT = 0x2
|
||||||
PR_MDWE_REFUSE_EXEC_GAIN = 0x1
|
PR_MDWE_REFUSE_EXEC_GAIN = 0x1
|
||||||
PR_MPX_DISABLE_MANAGEMENT = 0x2c
|
PR_MPX_DISABLE_MANAGEMENT = 0x2c
|
||||||
PR_MPX_ENABLE_MANAGEMENT = 0x2b
|
PR_MPX_ENABLE_MANAGEMENT = 0x2b
|
||||||
@@ -2615,8 +2672,9 @@ const (
|
|||||||
RTAX_FEATURES = 0xc
|
RTAX_FEATURES = 0xc
|
||||||
RTAX_FEATURE_ALLFRAG = 0x8
|
RTAX_FEATURE_ALLFRAG = 0x8
|
||||||
RTAX_FEATURE_ECN = 0x1
|
RTAX_FEATURE_ECN = 0x1
|
||||||
RTAX_FEATURE_MASK = 0xf
|
RTAX_FEATURE_MASK = 0x1f
|
||||||
RTAX_FEATURE_SACK = 0x2
|
RTAX_FEATURE_SACK = 0x2
|
||||||
|
RTAX_FEATURE_TCP_USEC_TS = 0x10
|
||||||
RTAX_FEATURE_TIMESTAMP = 0x4
|
RTAX_FEATURE_TIMESTAMP = 0x4
|
||||||
RTAX_HOPLIMIT = 0xa
|
RTAX_HOPLIMIT = 0xa
|
||||||
RTAX_INITCWND = 0xb
|
RTAX_INITCWND = 0xb
|
||||||
@@ -2859,9 +2917,38 @@ const (
|
|||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x1d
|
SCM_TIMESTAMP = 0x1d
|
||||||
SC_LOG_FLUSH = 0x100000
|
SC_LOG_FLUSH = 0x100000
|
||||||
|
SECCOMP_ADDFD_FLAG_SEND = 0x2
|
||||||
|
SECCOMP_ADDFD_FLAG_SETFD = 0x1
|
||||||
|
SECCOMP_FILTER_FLAG_LOG = 0x2
|
||||||
|
SECCOMP_FILTER_FLAG_NEW_LISTENER = 0x8
|
||||||
|
SECCOMP_FILTER_FLAG_SPEC_ALLOW = 0x4
|
||||||
|
SECCOMP_FILTER_FLAG_TSYNC = 0x1
|
||||||
|
SECCOMP_FILTER_FLAG_TSYNC_ESRCH = 0x10
|
||||||
|
SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV = 0x20
|
||||||
|
SECCOMP_GET_ACTION_AVAIL = 0x2
|
||||||
|
SECCOMP_GET_NOTIF_SIZES = 0x3
|
||||||
|
SECCOMP_IOCTL_NOTIF_RECV = 0xc0502100
|
||||||
|
SECCOMP_IOCTL_NOTIF_SEND = 0xc0182101
|
||||||
|
SECCOMP_IOC_MAGIC = '!'
|
||||||
SECCOMP_MODE_DISABLED = 0x0
|
SECCOMP_MODE_DISABLED = 0x0
|
||||||
SECCOMP_MODE_FILTER = 0x2
|
SECCOMP_MODE_FILTER = 0x2
|
||||||
SECCOMP_MODE_STRICT = 0x1
|
SECCOMP_MODE_STRICT = 0x1
|
||||||
|
SECCOMP_RET_ACTION = 0x7fff0000
|
||||||
|
SECCOMP_RET_ACTION_FULL = 0xffff0000
|
||||||
|
SECCOMP_RET_ALLOW = 0x7fff0000
|
||||||
|
SECCOMP_RET_DATA = 0xffff
|
||||||
|
SECCOMP_RET_ERRNO = 0x50000
|
||||||
|
SECCOMP_RET_KILL = 0x0
|
||||||
|
SECCOMP_RET_KILL_PROCESS = 0x80000000
|
||||||
|
SECCOMP_RET_KILL_THREAD = 0x0
|
||||||
|
SECCOMP_RET_LOG = 0x7ffc0000
|
||||||
|
SECCOMP_RET_TRACE = 0x7ff00000
|
||||||
|
SECCOMP_RET_TRAP = 0x30000
|
||||||
|
SECCOMP_RET_USER_NOTIF = 0x7fc00000
|
||||||
|
SECCOMP_SET_MODE_FILTER = 0x1
|
||||||
|
SECCOMP_SET_MODE_STRICT = 0x0
|
||||||
|
SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP = 0x1
|
||||||
|
SECCOMP_USER_NOTIF_FLAG_CONTINUE = 0x1
|
||||||
SECRETMEM_MAGIC = 0x5345434d
|
SECRETMEM_MAGIC = 0x5345434d
|
||||||
SECURITYFS_MAGIC = 0x73636673
|
SECURITYFS_MAGIC = 0x73636673
|
||||||
SEEK_CUR = 0x1
|
SEEK_CUR = 0x1
|
||||||
@@ -3021,6 +3108,7 @@ const (
|
|||||||
SOL_TIPC = 0x10f
|
SOL_TIPC = 0x10f
|
||||||
SOL_TLS = 0x11a
|
SOL_TLS = 0x11a
|
||||||
SOL_UDP = 0x11
|
SOL_UDP = 0x11
|
||||||
|
SOL_VSOCK = 0x11f
|
||||||
SOL_X25 = 0x106
|
SOL_X25 = 0x106
|
||||||
SOL_XDP = 0x11b
|
SOL_XDP = 0x11b
|
||||||
SOMAXCONN = 0x1000
|
SOMAXCONN = 0x1000
|
||||||
|
|||||||
+3
@@ -281,6 +281,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -282,6 +282,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -288,6 +288,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -278,6 +278,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -275,6 +275,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -281,6 +281,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x80
|
SFD_NONBLOCK = 0x80
|
||||||
SIOCATMARK = 0x40047307
|
SIOCATMARK = 0x40047307
|
||||||
|
|||||||
+3
@@ -281,6 +281,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x80
|
SFD_NONBLOCK = 0x80
|
||||||
SIOCATMARK = 0x40047307
|
SIOCATMARK = 0x40047307
|
||||||
|
|||||||
+3
@@ -281,6 +281,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x80
|
SFD_NONBLOCK = 0x80
|
||||||
SIOCATMARK = 0x40047307
|
SIOCATMARK = 0x40047307
|
||||||
|
|||||||
+3
@@ -281,6 +281,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x80
|
SFD_NONBLOCK = 0x80
|
||||||
SIOCATMARK = 0x40047307
|
SIOCATMARK = 0x40047307
|
||||||
|
|||||||
+3
@@ -336,6 +336,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -340,6 +340,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -340,6 +340,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -272,6 +272,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -344,6 +344,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104
|
||||||
SFD_CLOEXEC = 0x80000
|
SFD_CLOEXEC = 0x80000
|
||||||
SFD_NONBLOCK = 0x800
|
SFD_NONBLOCK = 0x800
|
||||||
SIOCATMARK = 0x8905
|
SIOCATMARK = 0x8905
|
||||||
|
|||||||
+3
@@ -335,6 +335,9 @@ const (
|
|||||||
SCM_TIMESTAMPNS = 0x21
|
SCM_TIMESTAMPNS = 0x21
|
||||||
SCM_TXTIME = 0x3f
|
SCM_TXTIME = 0x3f
|
||||||
SCM_WIFI_STATUS = 0x25
|
SCM_WIFI_STATUS = 0x25
|
||||||
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
SECCOMP_IOCTL_NOTIF_ID_VALID = 0x80082102
|
||||||
|
SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x80082104
|
||||||
SFD_CLOEXEC = 0x400000
|
SFD_CLOEXEC = 0x400000
|
||||||
SFD_NONBLOCK = 0x4000
|
SFD_NONBLOCK = 0x4000
|
||||||
SF_FP = 0x38
|
SF_FP = 0x38
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-2
@@ -2297,5 +2297,3 @@ func unveil(path *byte, flags *byte) (err error) {
|
|||||||
var libc_unveil_trampoline_addr uintptr
|
var libc_unveil_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
//go:cgo_import_dynamic libc_unveil unveil "libc.so"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+4
@@ -448,4 +448,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+3
@@ -371,4 +371,7 @@ const (
|
|||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
SYS_MAP_SHADOW_STACK = 453
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -412,4 +412,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -315,4 +315,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -309,4 +309,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -432,4 +432,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 4450
|
SYS_SET_MEMPOLICY_HOME_NODE = 4450
|
||||||
SYS_CACHESTAT = 4451
|
SYS_CACHESTAT = 4451
|
||||||
SYS_FCHMODAT2 = 4452
|
SYS_FCHMODAT2 = 4452
|
||||||
|
SYS_MAP_SHADOW_STACK = 4453
|
||||||
|
SYS_FUTEX_WAKE = 4454
|
||||||
|
SYS_FUTEX_WAIT = 4455
|
||||||
|
SYS_FUTEX_REQUEUE = 4456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -362,4 +362,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 5450
|
SYS_SET_MEMPOLICY_HOME_NODE = 5450
|
||||||
SYS_CACHESTAT = 5451
|
SYS_CACHESTAT = 5451
|
||||||
SYS_FCHMODAT2 = 5452
|
SYS_FCHMODAT2 = 5452
|
||||||
|
SYS_MAP_SHADOW_STACK = 5453
|
||||||
|
SYS_FUTEX_WAKE = 5454
|
||||||
|
SYS_FUTEX_WAIT = 5455
|
||||||
|
SYS_FUTEX_REQUEUE = 5456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -362,4 +362,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 5450
|
SYS_SET_MEMPOLICY_HOME_NODE = 5450
|
||||||
SYS_CACHESTAT = 5451
|
SYS_CACHESTAT = 5451
|
||||||
SYS_FCHMODAT2 = 5452
|
SYS_FCHMODAT2 = 5452
|
||||||
|
SYS_MAP_SHADOW_STACK = 5453
|
||||||
|
SYS_FUTEX_WAKE = 5454
|
||||||
|
SYS_FUTEX_WAIT = 5455
|
||||||
|
SYS_FUTEX_REQUEUE = 5456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -432,4 +432,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 4450
|
SYS_SET_MEMPOLICY_HOME_NODE = 4450
|
||||||
SYS_CACHESTAT = 4451
|
SYS_CACHESTAT = 4451
|
||||||
SYS_FCHMODAT2 = 4452
|
SYS_FCHMODAT2 = 4452
|
||||||
|
SYS_MAP_SHADOW_STACK = 4453
|
||||||
|
SYS_FUTEX_WAKE = 4454
|
||||||
|
SYS_FUTEX_WAIT = 4455
|
||||||
|
SYS_FUTEX_REQUEUE = 4456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -439,4 +439,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -411,4 +411,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -411,4 +411,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -316,4 +316,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -377,4 +377,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -390,4 +390,8 @@ const (
|
|||||||
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
SYS_CACHESTAT = 451
|
SYS_CACHESTAT = 451
|
||||||
SYS_FCHMODAT2 = 452
|
SYS_FCHMODAT2 = 452
|
||||||
|
SYS_MAP_SHADOW_STACK = 453
|
||||||
|
SYS_FUTEX_WAKE = 454
|
||||||
|
SYS_FUTEX_WAIT = 455
|
||||||
|
SYS_FUTEX_REQUEUE = 456
|
||||||
)
|
)
|
||||||
|
|||||||
+65
-60
@@ -174,7 +174,8 @@ type FscryptPolicyV2 struct {
|
|||||||
Contents_encryption_mode uint8
|
Contents_encryption_mode uint8
|
||||||
Filenames_encryption_mode uint8
|
Filenames_encryption_mode uint8
|
||||||
Flags uint8
|
Flags uint8
|
||||||
_ [4]uint8
|
Log2_data_unit_size uint8
|
||||||
|
_ [3]uint8
|
||||||
Master_key_identifier [16]uint8
|
Master_key_identifier [16]uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,60 +456,63 @@ type Ucred struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TCPInfo struct {
|
type TCPInfo struct {
|
||||||
State uint8
|
State uint8
|
||||||
Ca_state uint8
|
Ca_state uint8
|
||||||
Retransmits uint8
|
Retransmits uint8
|
||||||
Probes uint8
|
Probes uint8
|
||||||
Backoff uint8
|
Backoff uint8
|
||||||
Options uint8
|
Options uint8
|
||||||
Rto uint32
|
Rto uint32
|
||||||
Ato uint32
|
Ato uint32
|
||||||
Snd_mss uint32
|
Snd_mss uint32
|
||||||
Rcv_mss uint32
|
Rcv_mss uint32
|
||||||
Unacked uint32
|
Unacked uint32
|
||||||
Sacked uint32
|
Sacked uint32
|
||||||
Lost uint32
|
Lost uint32
|
||||||
Retrans uint32
|
Retrans uint32
|
||||||
Fackets uint32
|
Fackets uint32
|
||||||
Last_data_sent uint32
|
Last_data_sent uint32
|
||||||
Last_ack_sent uint32
|
Last_ack_sent uint32
|
||||||
Last_data_recv uint32
|
Last_data_recv uint32
|
||||||
Last_ack_recv uint32
|
Last_ack_recv uint32
|
||||||
Pmtu uint32
|
Pmtu uint32
|
||||||
Rcv_ssthresh uint32
|
Rcv_ssthresh uint32
|
||||||
Rtt uint32
|
Rtt uint32
|
||||||
Rttvar uint32
|
Rttvar uint32
|
||||||
Snd_ssthresh uint32
|
Snd_ssthresh uint32
|
||||||
Snd_cwnd uint32
|
Snd_cwnd uint32
|
||||||
Advmss uint32
|
Advmss uint32
|
||||||
Reordering uint32
|
Reordering uint32
|
||||||
Rcv_rtt uint32
|
Rcv_rtt uint32
|
||||||
Rcv_space uint32
|
Rcv_space uint32
|
||||||
Total_retrans uint32
|
Total_retrans uint32
|
||||||
Pacing_rate uint64
|
Pacing_rate uint64
|
||||||
Max_pacing_rate uint64
|
Max_pacing_rate uint64
|
||||||
Bytes_acked uint64
|
Bytes_acked uint64
|
||||||
Bytes_received uint64
|
Bytes_received uint64
|
||||||
Segs_out uint32
|
Segs_out uint32
|
||||||
Segs_in uint32
|
Segs_in uint32
|
||||||
Notsent_bytes uint32
|
Notsent_bytes uint32
|
||||||
Min_rtt uint32
|
Min_rtt uint32
|
||||||
Data_segs_in uint32
|
Data_segs_in uint32
|
||||||
Data_segs_out uint32
|
Data_segs_out uint32
|
||||||
Delivery_rate uint64
|
Delivery_rate uint64
|
||||||
Busy_time uint64
|
Busy_time uint64
|
||||||
Rwnd_limited uint64
|
Rwnd_limited uint64
|
||||||
Sndbuf_limited uint64
|
Sndbuf_limited uint64
|
||||||
Delivered uint32
|
Delivered uint32
|
||||||
Delivered_ce uint32
|
Delivered_ce uint32
|
||||||
Bytes_sent uint64
|
Bytes_sent uint64
|
||||||
Bytes_retrans uint64
|
Bytes_retrans uint64
|
||||||
Dsack_dups uint32
|
Dsack_dups uint32
|
||||||
Reord_seen uint32
|
Reord_seen uint32
|
||||||
Rcv_ooopack uint32
|
Rcv_ooopack uint32
|
||||||
Snd_wnd uint32
|
Snd_wnd uint32
|
||||||
Rcv_wnd uint32
|
Rcv_wnd uint32
|
||||||
Rehash uint32
|
Rehash uint32
|
||||||
|
Total_rto uint16
|
||||||
|
Total_rto_recoveries uint16
|
||||||
|
Total_rto_time uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
type CanFilter struct {
|
type CanFilter struct {
|
||||||
@@ -551,7 +555,7 @@ const (
|
|||||||
SizeofIPv6MTUInfo = 0x20
|
SizeofIPv6MTUInfo = 0x20
|
||||||
SizeofICMPv6Filter = 0x20
|
SizeofICMPv6Filter = 0x20
|
||||||
SizeofUcred = 0xc
|
SizeofUcred = 0xc
|
||||||
SizeofTCPInfo = 0xf0
|
SizeofTCPInfo = 0xf8
|
||||||
SizeofCanFilter = 0x8
|
SizeofCanFilter = 0x8
|
||||||
SizeofTCPRepairOpt = 0x8
|
SizeofTCPRepairOpt = 0x8
|
||||||
)
|
)
|
||||||
@@ -3399,7 +3403,7 @@ const (
|
|||||||
DEVLINK_PORT_FN_ATTR_STATE = 0x2
|
DEVLINK_PORT_FN_ATTR_STATE = 0x2
|
||||||
DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3
|
DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3
|
||||||
DEVLINK_PORT_FN_ATTR_CAPS = 0x4
|
DEVLINK_PORT_FN_ATTR_CAPS = 0x4
|
||||||
DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x4
|
DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x5
|
||||||
)
|
)
|
||||||
|
|
||||||
type FsverityDigest struct {
|
type FsverityDigest struct {
|
||||||
@@ -4183,7 +4187,8 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type LandlockRulesetAttr struct {
|
type LandlockRulesetAttr struct {
|
||||||
Access_fs uint64
|
Access_fs uint64
|
||||||
|
Access_net uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
type LandlockPathBeneathAttr struct {
|
type LandlockPathBeneathAttr struct {
|
||||||
@@ -5134,7 +5139,7 @@ const (
|
|||||||
NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf
|
NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf
|
||||||
NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe
|
NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe
|
||||||
NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf
|
NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf
|
||||||
NL80211_FREQUENCY_ATTR_MAX = 0x1b
|
NL80211_FREQUENCY_ATTR_MAX = 0x1c
|
||||||
NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6
|
NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6
|
||||||
NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11
|
NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11
|
||||||
NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc
|
NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc
|
||||||
@@ -5547,7 +5552,7 @@ const (
|
|||||||
NL80211_REGDOM_TYPE_CUSTOM_WORLD = 0x2
|
NL80211_REGDOM_TYPE_CUSTOM_WORLD = 0x2
|
||||||
NL80211_REGDOM_TYPE_INTERSECTION = 0x3
|
NL80211_REGDOM_TYPE_INTERSECTION = 0x3
|
||||||
NL80211_REGDOM_TYPE_WORLD = 0x1
|
NL80211_REGDOM_TYPE_WORLD = 0x1
|
||||||
NL80211_REG_RULE_ATTR_MAX = 0x7
|
NL80211_REG_RULE_ATTR_MAX = 0x8
|
||||||
NL80211_REKEY_DATA_AKM = 0x4
|
NL80211_REKEY_DATA_AKM = 0x4
|
||||||
NL80211_REKEY_DATA_KCK = 0x2
|
NL80211_REKEY_DATA_KCK = 0x2
|
||||||
NL80211_REKEY_DATA_KEK = 0x1
|
NL80211_REKEY_DATA_KEK = 0x1
|
||||||
|
|||||||
+10
-7
@@ -37,14 +37,17 @@ func (token Token) Environ(inheritExisting bool) (env []string, err error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer DestroyEnvironmentBlock(block)
|
defer DestroyEnvironmentBlock(block)
|
||||||
blockp := unsafe.Pointer(block)
|
size := unsafe.Sizeof(*block)
|
||||||
for {
|
for *block != 0 {
|
||||||
entry := UTF16PtrToString((*uint16)(blockp))
|
// find NUL terminator
|
||||||
if len(entry) == 0 {
|
end := unsafe.Pointer(block)
|
||||||
break
|
for *(*uint16)(end) != 0 {
|
||||||
|
end = unsafe.Add(end, size)
|
||||||
}
|
}
|
||||||
env = append(env, entry)
|
|
||||||
blockp = unsafe.Add(blockp, 2*(len(entry)+1))
|
entry := unsafe.Slice(block, (uintptr(end)-uintptr(unsafe.Pointer(block)))/size)
|
||||||
|
env = append(env, UTF16ToString(entry))
|
||||||
|
block = (*uint16)(unsafe.Add(end, size))
|
||||||
}
|
}
|
||||||
return env, nil
|
return env, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -125,8 +125,7 @@ func UTF16PtrToString(p *uint16) string {
|
|||||||
for ptr := unsafe.Pointer(p); *(*uint16)(ptr) != 0; n++ {
|
for ptr := unsafe.Pointer(p); *(*uint16)(ptr) != 0; n++ {
|
||||||
ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p))
|
ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p))
|
||||||
}
|
}
|
||||||
|
return UTF16ToString(unsafe.Slice(p, n))
|
||||||
return string(utf16.Decode(unsafe.Slice(p, n)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Getpagesize() int { return 4096 }
|
func Getpagesize() int { return 4096 }
|
||||||
@@ -194,6 +193,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|||||||
//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW
|
//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW
|
||||||
//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
|
//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
|
||||||
//sys SetEndOfFile(handle Handle) (err error)
|
//sys SetEndOfFile(handle Handle) (err error)
|
||||||
|
//sys SetFileValidData(handle Handle, validDataLength int64) (err error)
|
||||||
//sys GetSystemTimeAsFileTime(time *Filetime)
|
//sys GetSystemTimeAsFileTime(time *Filetime)
|
||||||
//sys GetSystemTimePreciseAsFileTime(time *Filetime)
|
//sys GetSystemTimePreciseAsFileTime(time *Filetime)
|
||||||
//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff]
|
//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff]
|
||||||
|
|||||||
+9
@@ -342,6 +342,7 @@ var (
|
|||||||
procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories")
|
procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories")
|
||||||
procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW")
|
procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW")
|
||||||
procSetEndOfFile = modkernel32.NewProc("SetEndOfFile")
|
procSetEndOfFile = modkernel32.NewProc("SetEndOfFile")
|
||||||
|
procSetFileValidData = modkernel32.NewProc("SetFileValidData")
|
||||||
procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW")
|
procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW")
|
||||||
procSetErrorMode = modkernel32.NewProc("SetErrorMode")
|
procSetErrorMode = modkernel32.NewProc("SetErrorMode")
|
||||||
procSetEvent = modkernel32.NewProc("SetEvent")
|
procSetEvent = modkernel32.NewProc("SetEvent")
|
||||||
@@ -2988,6 +2989,14 @@ func SetEndOfFile(handle Handle) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetFileValidData(handle Handle, validDataLength int64) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procSetFileValidData.Addr(), 2, uintptr(handle), uintptr(validDataLength), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func SetEnvironmentVariable(name *uint16, value *uint16) (err error) {
|
func SetEnvironmentVariable(name *uint16, value *uint16) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0)
|
r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
|||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
# This source code refers to The Go Authors for copyright purposes.
|
|
||||||
# The master list of authors is in the main Go distribution,
|
|
||||||
# visible at https://tip.golang.org/AUTHORS.
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
# This source code was written by the Go contributors.
|
|
||||||
# The master list of contributors is in the main Go distribution,
|
|
||||||
# visible at https://tip.golang.org/CONTRIBUTORS.
|
|
||||||
+58
-58
@@ -17,7 +17,7 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/set"
|
"google.golang.org/protobuf/internal/set"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ func (d decoder) syntaxError(pos int, f string, x ...interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// unmarshalMessage unmarshals into the given protoreflect.Message.
|
// unmarshalMessage unmarshals into the given protoreflect.Message.
|
||||||
func (d decoder) unmarshalMessage(m pref.Message, checkDelims bool) error {
|
func (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) error {
|
||||||
messageDesc := m.Descriptor()
|
messageDesc := m.Descriptor()
|
||||||
if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
|
if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
|
||||||
return errors.New("no support for proto1 MessageSets")
|
return errors.New("no support for proto1 MessageSets")
|
||||||
@@ -150,24 +150,24 @@ func (d decoder) unmarshalMessage(m pref.Message, checkDelims bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Resolve the field descriptor.
|
// Resolve the field descriptor.
|
||||||
var name pref.Name
|
var name protoreflect.Name
|
||||||
var fd pref.FieldDescriptor
|
var fd protoreflect.FieldDescriptor
|
||||||
var xt pref.ExtensionType
|
var xt protoreflect.ExtensionType
|
||||||
var xtErr error
|
var xtErr error
|
||||||
var isFieldNumberName bool
|
var isFieldNumberName bool
|
||||||
|
|
||||||
switch tok.NameKind() {
|
switch tok.NameKind() {
|
||||||
case text.IdentName:
|
case text.IdentName:
|
||||||
name = pref.Name(tok.IdentName())
|
name = protoreflect.Name(tok.IdentName())
|
||||||
fd = fieldDescs.ByTextName(string(name))
|
fd = fieldDescs.ByTextName(string(name))
|
||||||
|
|
||||||
case text.TypeName:
|
case text.TypeName:
|
||||||
// Handle extensions only. This code path is not for Any.
|
// Handle extensions only. This code path is not for Any.
|
||||||
xt, xtErr = d.opts.Resolver.FindExtensionByName(pref.FullName(tok.TypeName()))
|
xt, xtErr = d.opts.Resolver.FindExtensionByName(protoreflect.FullName(tok.TypeName()))
|
||||||
|
|
||||||
case text.FieldNumber:
|
case text.FieldNumber:
|
||||||
isFieldNumberName = true
|
isFieldNumberName = true
|
||||||
num := pref.FieldNumber(tok.FieldNumber())
|
num := protoreflect.FieldNumber(tok.FieldNumber())
|
||||||
if !num.IsValid() {
|
if !num.IsValid() {
|
||||||
return d.newError(tok.Pos(), "invalid field number: %d", num)
|
return d.newError(tok.Pos(), "invalid field number: %d", num)
|
||||||
}
|
}
|
||||||
@@ -215,7 +215,7 @@ func (d decoder) unmarshalMessage(m pref.Message, checkDelims bool) error {
|
|||||||
switch {
|
switch {
|
||||||
case fd.IsList():
|
case fd.IsList():
|
||||||
kind := fd.Kind()
|
kind := fd.Kind()
|
||||||
if kind != pref.MessageKind && kind != pref.GroupKind && !tok.HasSeparator() {
|
if kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() {
|
||||||
return d.syntaxError(tok.Pos(), "missing field separator :")
|
return d.syntaxError(tok.Pos(), "missing field separator :")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,7 +232,7 @@ func (d decoder) unmarshalMessage(m pref.Message, checkDelims bool) error {
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
kind := fd.Kind()
|
kind := fd.Kind()
|
||||||
if kind != pref.MessageKind && kind != pref.GroupKind && !tok.HasSeparator() {
|
if kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() {
|
||||||
return d.syntaxError(tok.Pos(), "missing field separator :")
|
return d.syntaxError(tok.Pos(), "missing field separator :")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,11 +262,11 @@ func (d decoder) unmarshalMessage(m pref.Message, checkDelims bool) error {
|
|||||||
|
|
||||||
// unmarshalSingular unmarshals a non-repeated field value specified by the
|
// unmarshalSingular unmarshals a non-repeated field value specified by the
|
||||||
// given FieldDescriptor.
|
// given FieldDescriptor.
|
||||||
func (d decoder) unmarshalSingular(fd pref.FieldDescriptor, m pref.Message) error {
|
func (d decoder) unmarshalSingular(fd protoreflect.FieldDescriptor, m protoreflect.Message) error {
|
||||||
var val pref.Value
|
var val protoreflect.Value
|
||||||
var err error
|
var err error
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
val = m.NewField(fd)
|
val = m.NewField(fd)
|
||||||
err = d.unmarshalMessage(val.Message(), true)
|
err = d.unmarshalMessage(val.Message(), true)
|
||||||
default:
|
default:
|
||||||
@@ -280,94 +280,94 @@ func (d decoder) unmarshalSingular(fd pref.FieldDescriptor, m pref.Message) erro
|
|||||||
|
|
||||||
// unmarshalScalar unmarshals a scalar/enum protoreflect.Value specified by the
|
// unmarshalScalar unmarshals a scalar/enum protoreflect.Value specified by the
|
||||||
// given FieldDescriptor.
|
// given FieldDescriptor.
|
||||||
func (d decoder) unmarshalScalar(fd pref.FieldDescriptor) (pref.Value, error) {
|
func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) {
|
||||||
tok, err := d.Read()
|
tok, err := d.Read()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return pref.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if tok.Kind() != text.Scalar {
|
if tok.Kind() != text.Scalar {
|
||||||
return pref.Value{}, d.unexpectedTokenError(tok)
|
return protoreflect.Value{}, d.unexpectedTokenError(tok)
|
||||||
}
|
}
|
||||||
|
|
||||||
kind := fd.Kind()
|
kind := fd.Kind()
|
||||||
switch kind {
|
switch kind {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if b, ok := tok.Bool(); ok {
|
if b, ok := tok.Bool(); ok {
|
||||||
return pref.ValueOfBool(b), nil
|
return protoreflect.ValueOfBool(b), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||||
if n, ok := tok.Int32(); ok {
|
if n, ok := tok.Int32(); ok {
|
||||||
return pref.ValueOfInt32(n), nil
|
return protoreflect.ValueOfInt32(n), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
|
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
if n, ok := tok.Int64(); ok {
|
if n, ok := tok.Int64(); ok {
|
||||||
return pref.ValueOfInt64(n), nil
|
return protoreflect.ValueOfInt64(n), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.Uint32Kind, pref.Fixed32Kind:
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||||
if n, ok := tok.Uint32(); ok {
|
if n, ok := tok.Uint32(); ok {
|
||||||
return pref.ValueOfUint32(n), nil
|
return protoreflect.ValueOfUint32(n), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.Uint64Kind, pref.Fixed64Kind:
|
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
if n, ok := tok.Uint64(); ok {
|
if n, ok := tok.Uint64(); ok {
|
||||||
return pref.ValueOfUint64(n), nil
|
return protoreflect.ValueOfUint64(n), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if n, ok := tok.Float32(); ok {
|
if n, ok := tok.Float32(); ok {
|
||||||
return pref.ValueOfFloat32(n), nil
|
return protoreflect.ValueOfFloat32(n), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if n, ok := tok.Float64(); ok {
|
if n, ok := tok.Float64(); ok {
|
||||||
return pref.ValueOfFloat64(n), nil
|
return protoreflect.ValueOfFloat64(n), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if s, ok := tok.String(); ok {
|
if s, ok := tok.String(); ok {
|
||||||
if strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
|
if strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
|
||||||
return pref.Value{}, d.newError(tok.Pos(), "contains invalid UTF-8")
|
return protoreflect.Value{}, d.newError(tok.Pos(), "contains invalid UTF-8")
|
||||||
}
|
}
|
||||||
return pref.ValueOfString(s), nil
|
return protoreflect.ValueOfString(s), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if b, ok := tok.String(); ok {
|
if b, ok := tok.String(); ok {
|
||||||
return pref.ValueOfBytes([]byte(b)), nil
|
return protoreflect.ValueOfBytes([]byte(b)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if lit, ok := tok.Enum(); ok {
|
if lit, ok := tok.Enum(); ok {
|
||||||
// Lookup EnumNumber based on name.
|
// Lookup EnumNumber based on name.
|
||||||
if enumVal := fd.Enum().Values().ByName(pref.Name(lit)); enumVal != nil {
|
if enumVal := fd.Enum().Values().ByName(protoreflect.Name(lit)); enumVal != nil {
|
||||||
return pref.ValueOfEnum(enumVal.Number()), nil
|
return protoreflect.ValueOfEnum(enumVal.Number()), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if num, ok := tok.Int32(); ok {
|
if num, ok := tok.Int32(); ok {
|
||||||
return pref.ValueOfEnum(pref.EnumNumber(num)), nil
|
return protoreflect.ValueOfEnum(protoreflect.EnumNumber(num)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("invalid scalar kind %v", kind))
|
panic(fmt.Sprintf("invalid scalar kind %v", kind))
|
||||||
}
|
}
|
||||||
|
|
||||||
return pref.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString())
|
return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString())
|
||||||
}
|
}
|
||||||
|
|
||||||
// unmarshalList unmarshals into given protoreflect.List. A list value can
|
// unmarshalList unmarshals into given protoreflect.List. A list value can
|
||||||
// either be in [] syntax or simply just a single scalar/message value.
|
// either be in [] syntax or simply just a single scalar/message value.
|
||||||
func (d decoder) unmarshalList(fd pref.FieldDescriptor, list pref.List) error {
|
func (d decoder) unmarshalList(fd protoreflect.FieldDescriptor, list protoreflect.List) error {
|
||||||
tok, err := d.Peek()
|
tok, err := d.Peek()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
switch tok.Kind() {
|
switch tok.Kind() {
|
||||||
case text.ListOpen:
|
case text.ListOpen:
|
||||||
d.Read()
|
d.Read()
|
||||||
@@ -441,22 +441,22 @@ func (d decoder) unmarshalList(fd pref.FieldDescriptor, list pref.List) error {
|
|||||||
|
|
||||||
// unmarshalMap unmarshals into given protoreflect.Map. A map value is a
|
// unmarshalMap unmarshals into given protoreflect.Map. A map value is a
|
||||||
// textproto message containing {key: <kvalue>, value: <mvalue>}.
|
// textproto message containing {key: <kvalue>, value: <mvalue>}.
|
||||||
func (d decoder) unmarshalMap(fd pref.FieldDescriptor, mmap pref.Map) error {
|
func (d decoder) unmarshalMap(fd protoreflect.FieldDescriptor, mmap protoreflect.Map) error {
|
||||||
// Determine ahead whether map entry is a scalar type or a message type in
|
// Determine ahead whether map entry is a scalar type or a message type in
|
||||||
// order to call the appropriate unmarshalMapValue func inside
|
// order to call the appropriate unmarshalMapValue func inside
|
||||||
// unmarshalMapEntry.
|
// unmarshalMapEntry.
|
||||||
var unmarshalMapValue func() (pref.Value, error)
|
var unmarshalMapValue func() (protoreflect.Value, error)
|
||||||
switch fd.MapValue().Kind() {
|
switch fd.MapValue().Kind() {
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
unmarshalMapValue = func() (pref.Value, error) {
|
unmarshalMapValue = func() (protoreflect.Value, error) {
|
||||||
pval := mmap.NewValue()
|
pval := mmap.NewValue()
|
||||||
if err := d.unmarshalMessage(pval.Message(), true); err != nil {
|
if err := d.unmarshalMessage(pval.Message(), true); err != nil {
|
||||||
return pref.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
return pval, nil
|
return pval, nil
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
unmarshalMapValue = func() (pref.Value, error) {
|
unmarshalMapValue = func() (protoreflect.Value, error) {
|
||||||
return d.unmarshalScalar(fd.MapValue())
|
return d.unmarshalScalar(fd.MapValue())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -494,9 +494,9 @@ func (d decoder) unmarshalMap(fd pref.FieldDescriptor, mmap pref.Map) error {
|
|||||||
|
|
||||||
// unmarshalMap unmarshals into given protoreflect.Map. A map value is a
|
// unmarshalMap unmarshals into given protoreflect.Map. A map value is a
|
||||||
// textproto message containing {key: <kvalue>, value: <mvalue>}.
|
// textproto message containing {key: <kvalue>, value: <mvalue>}.
|
||||||
func (d decoder) unmarshalMapEntry(fd pref.FieldDescriptor, mmap pref.Map, unmarshalMapValue func() (pref.Value, error)) error {
|
func (d decoder) unmarshalMapEntry(fd protoreflect.FieldDescriptor, mmap protoreflect.Map, unmarshalMapValue func() (protoreflect.Value, error)) error {
|
||||||
var key pref.MapKey
|
var key protoreflect.MapKey
|
||||||
var pval pref.Value
|
var pval protoreflect.Value
|
||||||
Loop:
|
Loop:
|
||||||
for {
|
for {
|
||||||
// Read field name.
|
// Read field name.
|
||||||
@@ -520,7 +520,7 @@ Loop:
|
|||||||
return d.unexpectedTokenError(tok)
|
return d.unexpectedTokenError(tok)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch name := pref.Name(tok.IdentName()); name {
|
switch name := protoreflect.Name(tok.IdentName()); name {
|
||||||
case genid.MapEntry_Key_field_name:
|
case genid.MapEntry_Key_field_name:
|
||||||
if !tok.HasSeparator() {
|
if !tok.HasSeparator() {
|
||||||
return d.syntaxError(tok.Pos(), "missing field separator :")
|
return d.syntaxError(tok.Pos(), "missing field separator :")
|
||||||
@@ -535,7 +535,7 @@ Loop:
|
|||||||
key = val.MapKey()
|
key = val.MapKey()
|
||||||
|
|
||||||
case genid.MapEntry_Value_field_name:
|
case genid.MapEntry_Value_field_name:
|
||||||
if kind := fd.MapValue().Kind(); (kind != pref.MessageKind) && (kind != pref.GroupKind) {
|
if kind := fd.MapValue().Kind(); (kind != protoreflect.MessageKind) && (kind != protoreflect.GroupKind) {
|
||||||
if !tok.HasSeparator() {
|
if !tok.HasSeparator() {
|
||||||
return d.syntaxError(tok.Pos(), "missing field separator :")
|
return d.syntaxError(tok.Pos(), "missing field separator :")
|
||||||
}
|
}
|
||||||
@@ -561,7 +561,7 @@ Loop:
|
|||||||
}
|
}
|
||||||
if !pval.IsValid() {
|
if !pval.IsValid() {
|
||||||
switch fd.MapValue().Kind() {
|
switch fd.MapValue().Kind() {
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
// If value field is not set for message/group types, construct an
|
// If value field is not set for message/group types, construct an
|
||||||
// empty one as default.
|
// empty one as default.
|
||||||
pval = mmap.NewValue()
|
pval = mmap.NewValue()
|
||||||
@@ -575,7 +575,7 @@ Loop:
|
|||||||
|
|
||||||
// unmarshalAny unmarshals an Any textproto. It can either be in expanded form
|
// unmarshalAny unmarshals an Any textproto. It can either be in expanded form
|
||||||
// or non-expanded form.
|
// or non-expanded form.
|
||||||
func (d decoder) unmarshalAny(m pref.Message, checkDelims bool) error {
|
func (d decoder) unmarshalAny(m protoreflect.Message, checkDelims bool) error {
|
||||||
var typeURL string
|
var typeURL string
|
||||||
var bValue []byte
|
var bValue []byte
|
||||||
var seenTypeUrl bool
|
var seenTypeUrl bool
|
||||||
@@ -619,7 +619,7 @@ Loop:
|
|||||||
return d.syntaxError(tok.Pos(), "missing field separator :")
|
return d.syntaxError(tok.Pos(), "missing field separator :")
|
||||||
}
|
}
|
||||||
|
|
||||||
switch name := pref.Name(tok.IdentName()); name {
|
switch name := protoreflect.Name(tok.IdentName()); name {
|
||||||
case genid.Any_TypeUrl_field_name:
|
case genid.Any_TypeUrl_field_name:
|
||||||
if seenTypeUrl {
|
if seenTypeUrl {
|
||||||
return d.newError(tok.Pos(), "duplicate %v field", genid.Any_TypeUrl_field_fullname)
|
return d.newError(tok.Pos(), "duplicate %v field", genid.Any_TypeUrl_field_fullname)
|
||||||
@@ -686,10 +686,10 @@ Loop:
|
|||||||
|
|
||||||
fds := m.Descriptor().Fields()
|
fds := m.Descriptor().Fields()
|
||||||
if len(typeURL) > 0 {
|
if len(typeURL) > 0 {
|
||||||
m.Set(fds.ByNumber(genid.Any_TypeUrl_field_number), pref.ValueOfString(typeURL))
|
m.Set(fds.ByNumber(genid.Any_TypeUrl_field_number), protoreflect.ValueOfString(typeURL))
|
||||||
}
|
}
|
||||||
if len(bValue) > 0 {
|
if len(bValue) > 0 {
|
||||||
m.Set(fds.ByNumber(genid.Any_Value_field_number), pref.ValueOfBytes(bValue))
|
m.Set(fds.ByNumber(genid.Any_Value_field_number), protoreflect.ValueOfBytes(bValue))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-24
@@ -20,7 +20,6 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -102,13 +101,19 @@ func (o MarshalOptions) Format(m proto.Message) string {
|
|||||||
// MarshalOptions object. Do not depend on the output being stable. It may
|
// MarshalOptions object. Do not depend on the output being stable. It may
|
||||||
// change over time across different versions of the program.
|
// change over time across different versions of the program.
|
||||||
func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) {
|
func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) {
|
||||||
return o.marshal(m)
|
return o.marshal(nil, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalAppend appends the textproto format encoding of m to b,
|
||||||
|
// returning the result.
|
||||||
|
func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) {
|
||||||
|
return o.marshal(b, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
// marshal is a centralized function that all marshal operations go through.
|
// marshal is a centralized function that all marshal operations go through.
|
||||||
// For profiling purposes, avoid changing the name of this function or
|
// For profiling purposes, avoid changing the name of this function or
|
||||||
// introducing other code paths for marshal that do not go through this.
|
// introducing other code paths for marshal that do not go through this.
|
||||||
func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) {
|
func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) {
|
||||||
var delims = [2]byte{'{', '}'}
|
var delims = [2]byte{'{', '}'}
|
||||||
|
|
||||||
if o.Multiline && o.Indent == "" {
|
if o.Multiline && o.Indent == "" {
|
||||||
@@ -118,7 +123,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) {
|
|||||||
o.Resolver = protoregistry.GlobalTypes
|
o.Resolver = protoregistry.GlobalTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
internalEnc, err := text.NewEncoder(o.Indent, delims, o.EmitASCII)
|
internalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -126,7 +131,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) {
|
|||||||
// Treat nil message interface as an empty message,
|
// Treat nil message interface as an empty message,
|
||||||
// in which case there is nothing to output.
|
// in which case there is nothing to output.
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return []byte{}, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
enc := encoder{internalEnc, o}
|
enc := encoder{internalEnc, o}
|
||||||
@@ -150,7 +155,7 @@ type encoder struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// marshalMessage marshals the given protoreflect.Message.
|
// marshalMessage marshals the given protoreflect.Message.
|
||||||
func (e encoder) marshalMessage(m pref.Message, inclDelims bool) error {
|
func (e encoder) marshalMessage(m protoreflect.Message, inclDelims bool) error {
|
||||||
messageDesc := m.Descriptor()
|
messageDesc := m.Descriptor()
|
||||||
if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
|
if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
|
||||||
return errors.New("no support for proto1 MessageSets")
|
return errors.New("no support for proto1 MessageSets")
|
||||||
@@ -190,7 +195,7 @@ func (e encoder) marshalMessage(m pref.Message, inclDelims bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// marshalField marshals the given field with protoreflect.Value.
|
// marshalField marshals the given field with protoreflect.Value.
|
||||||
func (e encoder) marshalField(name string, val pref.Value, fd pref.FieldDescriptor) error {
|
func (e encoder) marshalField(name string, val protoreflect.Value, fd protoreflect.FieldDescriptor) error {
|
||||||
switch {
|
switch {
|
||||||
case fd.IsList():
|
case fd.IsList():
|
||||||
return e.marshalList(name, val.List(), fd)
|
return e.marshalList(name, val.List(), fd)
|
||||||
@@ -204,40 +209,40 @@ func (e encoder) marshalField(name string, val pref.Value, fd pref.FieldDescript
|
|||||||
|
|
||||||
// marshalSingular marshals the given non-repeated field value. This includes
|
// marshalSingular marshals the given non-repeated field value. This includes
|
||||||
// all scalar types, enums, messages, and groups.
|
// all scalar types, enums, messages, and groups.
|
||||||
func (e encoder) marshalSingular(val pref.Value, fd pref.FieldDescriptor) error {
|
func (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error {
|
||||||
kind := fd.Kind()
|
kind := fd.Kind()
|
||||||
switch kind {
|
switch kind {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
e.WriteBool(val.Bool())
|
e.WriteBool(val.Bool())
|
||||||
|
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
s := val.String()
|
s := val.String()
|
||||||
if !e.opts.allowInvalidUTF8 && strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
|
if !e.opts.allowInvalidUTF8 && strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
|
||||||
return errors.InvalidUTF8(string(fd.FullName()))
|
return errors.InvalidUTF8(string(fd.FullName()))
|
||||||
}
|
}
|
||||||
e.WriteString(s)
|
e.WriteString(s)
|
||||||
|
|
||||||
case pref.Int32Kind, pref.Int64Kind,
|
case protoreflect.Int32Kind, protoreflect.Int64Kind,
|
||||||
pref.Sint32Kind, pref.Sint64Kind,
|
protoreflect.Sint32Kind, protoreflect.Sint64Kind,
|
||||||
pref.Sfixed32Kind, pref.Sfixed64Kind:
|
protoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind:
|
||||||
e.WriteInt(val.Int())
|
e.WriteInt(val.Int())
|
||||||
|
|
||||||
case pref.Uint32Kind, pref.Uint64Kind,
|
case protoreflect.Uint32Kind, protoreflect.Uint64Kind,
|
||||||
pref.Fixed32Kind, pref.Fixed64Kind:
|
protoreflect.Fixed32Kind, protoreflect.Fixed64Kind:
|
||||||
e.WriteUint(val.Uint())
|
e.WriteUint(val.Uint())
|
||||||
|
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
// Encoder.WriteFloat handles the special numbers NaN and infinites.
|
// Encoder.WriteFloat handles the special numbers NaN and infinites.
|
||||||
e.WriteFloat(val.Float(), 32)
|
e.WriteFloat(val.Float(), 32)
|
||||||
|
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
// Encoder.WriteFloat handles the special numbers NaN and infinites.
|
// Encoder.WriteFloat handles the special numbers NaN and infinites.
|
||||||
e.WriteFloat(val.Float(), 64)
|
e.WriteFloat(val.Float(), 64)
|
||||||
|
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
e.WriteString(string(val.Bytes()))
|
e.WriteString(string(val.Bytes()))
|
||||||
|
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
num := val.Enum()
|
num := val.Enum()
|
||||||
if desc := fd.Enum().Values().ByNumber(num); desc != nil {
|
if desc := fd.Enum().Values().ByNumber(num); desc != nil {
|
||||||
e.WriteLiteral(string(desc.Name()))
|
e.WriteLiteral(string(desc.Name()))
|
||||||
@@ -246,7 +251,7 @@ func (e encoder) marshalSingular(val pref.Value, fd pref.FieldDescriptor) error
|
|||||||
e.WriteInt(int64(num))
|
e.WriteInt(int64(num))
|
||||||
}
|
}
|
||||||
|
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
return e.marshalMessage(val.Message(), true)
|
return e.marshalMessage(val.Message(), true)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -256,7 +261,7 @@ func (e encoder) marshalSingular(val pref.Value, fd pref.FieldDescriptor) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// marshalList marshals the given protoreflect.List as multiple name-value fields.
|
// marshalList marshals the given protoreflect.List as multiple name-value fields.
|
||||||
func (e encoder) marshalList(name string, list pref.List, fd pref.FieldDescriptor) error {
|
func (e encoder) marshalList(name string, list protoreflect.List, fd protoreflect.FieldDescriptor) error {
|
||||||
size := list.Len()
|
size := list.Len()
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
e.WriteName(name)
|
e.WriteName(name)
|
||||||
@@ -268,9 +273,9 @@ func (e encoder) marshalList(name string, list pref.List, fd pref.FieldDescripto
|
|||||||
}
|
}
|
||||||
|
|
||||||
// marshalMap marshals the given protoreflect.Map as multiple name-value fields.
|
// marshalMap marshals the given protoreflect.Map as multiple name-value fields.
|
||||||
func (e encoder) marshalMap(name string, mmap pref.Map, fd pref.FieldDescriptor) error {
|
func (e encoder) marshalMap(name string, mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error {
|
||||||
var err error
|
var err error
|
||||||
order.RangeEntries(mmap, order.GenericKeyOrder, func(key pref.MapKey, val pref.Value) bool {
|
order.RangeEntries(mmap, order.GenericKeyOrder, func(key protoreflect.MapKey, val protoreflect.Value) bool {
|
||||||
e.WriteName(name)
|
e.WriteName(name)
|
||||||
e.StartMessage()
|
e.StartMessage()
|
||||||
defer e.EndMessage()
|
defer e.EndMessage()
|
||||||
@@ -334,7 +339,7 @@ func (e encoder) marshalUnknown(b []byte) {
|
|||||||
|
|
||||||
// marshalAny marshals the given google.protobuf.Any message in expanded form.
|
// marshalAny marshals the given google.protobuf.Any message in expanded form.
|
||||||
// It returns true if it was able to marshal, else false.
|
// It returns true if it was able to marshal, else false.
|
||||||
func (e encoder) marshalAny(any pref.Message) bool {
|
func (e encoder) marshalAny(any protoreflect.Message) bool {
|
||||||
// Construct the embedded message.
|
// Construct the embedded message.
|
||||||
fds := any.Descriptor().Fields()
|
fds := any.Descriptor().Fields()
|
||||||
fdType := fds.ByNumber(genid.Any_TypeUrl_field_number)
|
fdType := fds.ByNumber(genid.Any_TypeUrl_field_number)
|
||||||
|
|||||||
+6
-6
@@ -3,7 +3,7 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// Package protowire parses and formats the raw wire encoding.
|
// Package protowire parses and formats the raw wire encoding.
|
||||||
// See https://developers.google.com/protocol-buffers/docs/encoding.
|
// See https://protobuf.dev/programming-guides/encoding.
|
||||||
//
|
//
|
||||||
// For marshaling and unmarshaling entire protobuf messages,
|
// For marshaling and unmarshaling entire protobuf messages,
|
||||||
// use the "google.golang.org/protobuf/proto" package instead.
|
// use the "google.golang.org/protobuf/proto" package instead.
|
||||||
@@ -29,12 +29,8 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// IsValid reports whether the field number is semantically valid.
|
// IsValid reports whether the field number is semantically valid.
|
||||||
//
|
|
||||||
// Note that while numbers within the reserved range are semantically invalid,
|
|
||||||
// they are syntactically valid in the wire format.
|
|
||||||
// Implementations may treat records with reserved field numbers as unknown.
|
|
||||||
func (n Number) IsValid() bool {
|
func (n Number) IsValid() bool {
|
||||||
return MinValidNumber <= n && n < FirstReservedNumber || LastReservedNumber < n && n <= MaxValidNumber
|
return MinValidNumber <= n && n <= MaxValidNumber
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type represents the wire type.
|
// Type represents the wire type.
|
||||||
@@ -516,6 +512,7 @@ func EncodeTag(num Number, typ Type) uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DecodeZigZag decodes a zig-zag-encoded uint64 as an int64.
|
// DecodeZigZag decodes a zig-zag-encoded uint64 as an int64.
|
||||||
|
//
|
||||||
// Input: {…, 5, 3, 1, 0, 2, 4, 6, …}
|
// Input: {…, 5, 3, 1, 0, 2, 4, 6, …}
|
||||||
// Output: {…, -3, -2, -1, 0, +1, +2, +3, …}
|
// Output: {…, -3, -2, -1, 0, +1, +2, +3, …}
|
||||||
func DecodeZigZag(x uint64) int64 {
|
func DecodeZigZag(x uint64) int64 {
|
||||||
@@ -523,6 +520,7 @@ func DecodeZigZag(x uint64) int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EncodeZigZag encodes an int64 as a zig-zag-encoded uint64.
|
// EncodeZigZag encodes an int64 as a zig-zag-encoded uint64.
|
||||||
|
//
|
||||||
// Input: {…, -3, -2, -1, 0, +1, +2, +3, …}
|
// Input: {…, -3, -2, -1, 0, +1, +2, +3, …}
|
||||||
// Output: {…, 5, 3, 1, 0, 2, 4, 6, …}
|
// Output: {…, 5, 3, 1, 0, 2, 4, 6, …}
|
||||||
func EncodeZigZag(x int64) uint64 {
|
func EncodeZigZag(x int64) uint64 {
|
||||||
@@ -530,6 +528,7 @@ func EncodeZigZag(x int64) uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DecodeBool decodes a uint64 as a bool.
|
// DecodeBool decodes a uint64 as a bool.
|
||||||
|
//
|
||||||
// Input: { 0, 1, 2, …}
|
// Input: { 0, 1, 2, …}
|
||||||
// Output: {false, true, true, …}
|
// Output: {false, true, true, …}
|
||||||
func DecodeBool(x uint64) bool {
|
func DecodeBool(x uint64) bool {
|
||||||
@@ -537,6 +536,7 @@ func DecodeBool(x uint64) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EncodeBool encodes a bool as a uint64.
|
// EncodeBool encodes a bool as a uint64.
|
||||||
|
//
|
||||||
// Input: {false, true}
|
// Input: {false, true}
|
||||||
// Output: { 0, 1}
|
// Output: { 0, 1}
|
||||||
func EncodeBool(x bool) uint64 {
|
func EncodeBool(x bool) uint64 {
|
||||||
|
|||||||
+33
-33
@@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/protobuf/internal/detrand"
|
"google.golang.org/protobuf/internal/detrand"
|
||||||
"google.golang.org/protobuf/internal/pragma"
|
"google.golang.org/protobuf/internal/pragma"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type list interface {
|
type list interface {
|
||||||
@@ -30,17 +30,17 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
|||||||
if isRoot {
|
if isRoot {
|
||||||
var name string
|
var name string
|
||||||
switch vs.(type) {
|
switch vs.(type) {
|
||||||
case pref.Names:
|
case protoreflect.Names:
|
||||||
name = "Names"
|
name = "Names"
|
||||||
case pref.FieldNumbers:
|
case protoreflect.FieldNumbers:
|
||||||
name = "FieldNumbers"
|
name = "FieldNumbers"
|
||||||
case pref.FieldRanges:
|
case protoreflect.FieldRanges:
|
||||||
name = "FieldRanges"
|
name = "FieldRanges"
|
||||||
case pref.EnumRanges:
|
case protoreflect.EnumRanges:
|
||||||
name = "EnumRanges"
|
name = "EnumRanges"
|
||||||
case pref.FileImports:
|
case protoreflect.FileImports:
|
||||||
name = "FileImports"
|
name = "FileImports"
|
||||||
case pref.Descriptor:
|
case protoreflect.Descriptor:
|
||||||
name = reflect.ValueOf(vs).MethodByName("Get").Type().Out(0).Name() + "s"
|
name = reflect.ValueOf(vs).MethodByName("Get").Type().Out(0).Name() + "s"
|
||||||
default:
|
default:
|
||||||
name = reflect.ValueOf(vs).Elem().Type().Name()
|
name = reflect.ValueOf(vs).Elem().Type().Name()
|
||||||
@@ -50,17 +50,17 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
|||||||
|
|
||||||
var ss []string
|
var ss []string
|
||||||
switch vs := vs.(type) {
|
switch vs := vs.(type) {
|
||||||
case pref.Names:
|
case protoreflect.Names:
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
ss = append(ss, fmt.Sprint(vs.Get(i)))
|
ss = append(ss, fmt.Sprint(vs.Get(i)))
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, false) + end
|
return start + joinStrings(ss, false) + end
|
||||||
case pref.FieldNumbers:
|
case protoreflect.FieldNumbers:
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
ss = append(ss, fmt.Sprint(vs.Get(i)))
|
ss = append(ss, fmt.Sprint(vs.Get(i)))
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, false) + end
|
return start + joinStrings(ss, false) + end
|
||||||
case pref.FieldRanges:
|
case protoreflect.FieldRanges:
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
r := vs.Get(i)
|
r := vs.Get(i)
|
||||||
if r[0]+1 == r[1] {
|
if r[0]+1 == r[1] {
|
||||||
@@ -70,7 +70,7 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, false) + end
|
return start + joinStrings(ss, false) + end
|
||||||
case pref.EnumRanges:
|
case protoreflect.EnumRanges:
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
r := vs.Get(i)
|
r := vs.Get(i)
|
||||||
if r[0] == r[1] {
|
if r[0] == r[1] {
|
||||||
@@ -80,7 +80,7 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, false) + end
|
return start + joinStrings(ss, false) + end
|
||||||
case pref.FileImports:
|
case protoreflect.FileImports:
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
var rs records
|
var rs records
|
||||||
rs.Append(reflect.ValueOf(vs.Get(i)), "Path", "Package", "IsPublic", "IsWeak")
|
rs.Append(reflect.ValueOf(vs.Get(i)), "Path", "Package", "IsPublic", "IsWeak")
|
||||||
@@ -88,11 +88,11 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
|||||||
}
|
}
|
||||||
return start + joinStrings(ss, allowMulti) + end
|
return start + joinStrings(ss, allowMulti) + end
|
||||||
default:
|
default:
|
||||||
_, isEnumValue := vs.(pref.EnumValueDescriptors)
|
_, isEnumValue := vs.(protoreflect.EnumValueDescriptors)
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
m := reflect.ValueOf(vs).MethodByName("Get")
|
m := reflect.ValueOf(vs).MethodByName("Get")
|
||||||
v := m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()
|
v := m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()
|
||||||
ss = append(ss, formatDescOpt(v.(pref.Descriptor), false, allowMulti && !isEnumValue))
|
ss = append(ss, formatDescOpt(v.(protoreflect.Descriptor), false, allowMulti && !isEnumValue))
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, allowMulti && isEnumValue) + end
|
return start + joinStrings(ss, allowMulti && isEnumValue) + end
|
||||||
}
|
}
|
||||||
@@ -106,20 +106,20 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
|||||||
//
|
//
|
||||||
// Using a list allows us to print the accessors in a sensible order.
|
// Using a list allows us to print the accessors in a sensible order.
|
||||||
var descriptorAccessors = map[reflect.Type][]string{
|
var descriptorAccessors = map[reflect.Type][]string{
|
||||||
reflect.TypeOf((*pref.FileDescriptor)(nil)).Elem(): {"Path", "Package", "Imports", "Messages", "Enums", "Extensions", "Services"},
|
reflect.TypeOf((*protoreflect.FileDescriptor)(nil)).Elem(): {"Path", "Package", "Imports", "Messages", "Enums", "Extensions", "Services"},
|
||||||
reflect.TypeOf((*pref.MessageDescriptor)(nil)).Elem(): {"IsMapEntry", "Fields", "Oneofs", "ReservedNames", "ReservedRanges", "RequiredNumbers", "ExtensionRanges", "Messages", "Enums", "Extensions"},
|
reflect.TypeOf((*protoreflect.MessageDescriptor)(nil)).Elem(): {"IsMapEntry", "Fields", "Oneofs", "ReservedNames", "ReservedRanges", "RequiredNumbers", "ExtensionRanges", "Messages", "Enums", "Extensions"},
|
||||||
reflect.TypeOf((*pref.FieldDescriptor)(nil)).Elem(): {"Number", "Cardinality", "Kind", "HasJSONName", "JSONName", "HasPresence", "IsExtension", "IsPacked", "IsWeak", "IsList", "IsMap", "MapKey", "MapValue", "HasDefault", "Default", "ContainingOneof", "ContainingMessage", "Message", "Enum"},
|
reflect.TypeOf((*protoreflect.FieldDescriptor)(nil)).Elem(): {"Number", "Cardinality", "Kind", "HasJSONName", "JSONName", "HasPresence", "IsExtension", "IsPacked", "IsWeak", "IsList", "IsMap", "MapKey", "MapValue", "HasDefault", "Default", "ContainingOneof", "ContainingMessage", "Message", "Enum"},
|
||||||
reflect.TypeOf((*pref.OneofDescriptor)(nil)).Elem(): {"Fields"}, // not directly used; must keep in sync with formatDescOpt
|
reflect.TypeOf((*protoreflect.OneofDescriptor)(nil)).Elem(): {"Fields"}, // not directly used; must keep in sync with formatDescOpt
|
||||||
reflect.TypeOf((*pref.EnumDescriptor)(nil)).Elem(): {"Values", "ReservedNames", "ReservedRanges"},
|
reflect.TypeOf((*protoreflect.EnumDescriptor)(nil)).Elem(): {"Values", "ReservedNames", "ReservedRanges"},
|
||||||
reflect.TypeOf((*pref.EnumValueDescriptor)(nil)).Elem(): {"Number"},
|
reflect.TypeOf((*protoreflect.EnumValueDescriptor)(nil)).Elem(): {"Number"},
|
||||||
reflect.TypeOf((*pref.ServiceDescriptor)(nil)).Elem(): {"Methods"},
|
reflect.TypeOf((*protoreflect.ServiceDescriptor)(nil)).Elem(): {"Methods"},
|
||||||
reflect.TypeOf((*pref.MethodDescriptor)(nil)).Elem(): {"Input", "Output", "IsStreamingClient", "IsStreamingServer"},
|
reflect.TypeOf((*protoreflect.MethodDescriptor)(nil)).Elem(): {"Input", "Output", "IsStreamingClient", "IsStreamingServer"},
|
||||||
}
|
}
|
||||||
|
|
||||||
func FormatDesc(s fmt.State, r rune, t pref.Descriptor) {
|
func FormatDesc(s fmt.State, r rune, t protoreflect.Descriptor) {
|
||||||
io.WriteString(s, formatDescOpt(t, true, r == 'v' && (s.Flag('+') || s.Flag('#'))))
|
io.WriteString(s, formatDescOpt(t, true, r == 'v' && (s.Flag('+') || s.Flag('#'))))
|
||||||
}
|
}
|
||||||
func formatDescOpt(t pref.Descriptor, isRoot, allowMulti bool) string {
|
func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool) string {
|
||||||
rv := reflect.ValueOf(t)
|
rv := reflect.ValueOf(t)
|
||||||
rt := rv.MethodByName("ProtoType").Type().In(0)
|
rt := rv.MethodByName("ProtoType").Type().In(0)
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ func formatDescOpt(t pref.Descriptor, isRoot, allowMulti bool) string {
|
|||||||
start = rt.Name() + "{"
|
start = rt.Name() + "{"
|
||||||
}
|
}
|
||||||
|
|
||||||
_, isFile := t.(pref.FileDescriptor)
|
_, isFile := t.(protoreflect.FileDescriptor)
|
||||||
rs := records{allowMulti: allowMulti}
|
rs := records{allowMulti: allowMulti}
|
||||||
if t.IsPlaceholder() {
|
if t.IsPlaceholder() {
|
||||||
if isFile {
|
if isFile {
|
||||||
@@ -146,7 +146,7 @@ func formatDescOpt(t pref.Descriptor, isRoot, allowMulti bool) string {
|
|||||||
rs.Append(rv, "Name")
|
rs.Append(rv, "Name")
|
||||||
}
|
}
|
||||||
switch t := t.(type) {
|
switch t := t.(type) {
|
||||||
case pref.FieldDescriptor:
|
case protoreflect.FieldDescriptor:
|
||||||
for _, s := range descriptorAccessors[rt] {
|
for _, s := range descriptorAccessors[rt] {
|
||||||
switch s {
|
switch s {
|
||||||
case "MapKey":
|
case "MapKey":
|
||||||
@@ -156,9 +156,9 @@ func formatDescOpt(t pref.Descriptor, isRoot, allowMulti bool) string {
|
|||||||
case "MapValue":
|
case "MapValue":
|
||||||
if v := t.MapValue(); v != nil {
|
if v := t.MapValue(); v != nil {
|
||||||
switch v.Kind() {
|
switch v.Kind() {
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Enum().FullName())})
|
rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Enum().FullName())})
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Message().FullName())})
|
rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Message().FullName())})
|
||||||
default:
|
default:
|
||||||
rs.recs = append(rs.recs, [2]string{"MapValue", v.Kind().String()})
|
rs.recs = append(rs.recs, [2]string{"MapValue", v.Kind().String()})
|
||||||
@@ -180,7 +180,7 @@ func formatDescOpt(t pref.Descriptor, isRoot, allowMulti bool) string {
|
|||||||
rs.Append(rv, s)
|
rs.Append(rv, s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.OneofDescriptor:
|
case protoreflect.OneofDescriptor:
|
||||||
var ss []string
|
var ss []string
|
||||||
fs := t.Fields()
|
fs := t.Fields()
|
||||||
for i := 0; i < fs.Len(); i++ {
|
for i := 0; i < fs.Len(); i++ {
|
||||||
@@ -216,7 +216,7 @@ func (rs *records) Append(v reflect.Value, accessors ...string) {
|
|||||||
if !rv.IsValid() {
|
if !rv.IsValid() {
|
||||||
panic(fmt.Sprintf("unknown accessor: %v.%s", v.Type(), a))
|
panic(fmt.Sprintf("unknown accessor: %v.%s", v.Type(), a))
|
||||||
}
|
}
|
||||||
if _, ok := rv.Interface().(pref.Value); ok {
|
if _, ok := rv.Interface().(protoreflect.Value); ok {
|
||||||
rv = rv.MethodByName("Interface").Call(nil)[0]
|
rv = rv.MethodByName("Interface").Call(nil)[0]
|
||||||
if !rv.IsNil() {
|
if !rv.IsNil() {
|
||||||
rv = rv.Elem()
|
rv = rv.Elem()
|
||||||
@@ -250,9 +250,9 @@ func (rs *records) Append(v reflect.Value, accessors ...string) {
|
|||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
case list:
|
case list:
|
||||||
s = formatListOpt(v, false, rs.allowMulti)
|
s = formatListOpt(v, false, rs.allowMulti)
|
||||||
case pref.FieldDescriptor, pref.OneofDescriptor, pref.EnumValueDescriptor, pref.MethodDescriptor:
|
case protoreflect.FieldDescriptor, protoreflect.OneofDescriptor, protoreflect.EnumValueDescriptor, protoreflect.MethodDescriptor:
|
||||||
s = string(v.(pref.Descriptor).Name())
|
s = string(v.(protoreflect.Descriptor).Name())
|
||||||
case pref.Descriptor:
|
case protoreflect.Descriptor:
|
||||||
s = string(v.FullName())
|
s = string(v.FullName())
|
||||||
case string:
|
case string:
|
||||||
s = strconv.Quote(v)
|
s = strconv.Quote(v)
|
||||||
|
|||||||
+39
-39
@@ -15,8 +15,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
ptext "google.golang.org/protobuf/internal/encoding/text"
|
ptext "google.golang.org/protobuf/internal/encoding/text"
|
||||||
errors "google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Format is the serialization format used to represent the default value.
|
// Format is the serialization format used to represent the default value.
|
||||||
@@ -35,56 +35,56 @@ const (
|
|||||||
|
|
||||||
// Unmarshal deserializes the default string s according to the given kind k.
|
// Unmarshal deserializes the default string s according to the given kind k.
|
||||||
// When k is an enum, a list of enum value descriptors must be provided.
|
// When k is an enum, a list of enum value descriptors must be provided.
|
||||||
func Unmarshal(s string, k pref.Kind, evs pref.EnumValueDescriptors, f Format) (pref.Value, pref.EnumValueDescriptor, error) {
|
func Unmarshal(s string, k protoreflect.Kind, evs protoreflect.EnumValueDescriptors, f Format) (protoreflect.Value, protoreflect.EnumValueDescriptor, error) {
|
||||||
switch k {
|
switch k {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if f == GoTag {
|
if f == GoTag {
|
||||||
switch s {
|
switch s {
|
||||||
case "1":
|
case "1":
|
||||||
return pref.ValueOfBool(true), nil, nil
|
return protoreflect.ValueOfBool(true), nil, nil
|
||||||
case "0":
|
case "0":
|
||||||
return pref.ValueOfBool(false), nil, nil
|
return protoreflect.ValueOfBool(false), nil, nil
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch s {
|
switch s {
|
||||||
case "true":
|
case "true":
|
||||||
return pref.ValueOfBool(true), nil, nil
|
return protoreflect.ValueOfBool(true), nil, nil
|
||||||
case "false":
|
case "false":
|
||||||
return pref.ValueOfBool(false), nil, nil
|
return protoreflect.ValueOfBool(false), nil, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if f == GoTag {
|
if f == GoTag {
|
||||||
// Go tags use the numeric form of the enum value.
|
// Go tags use the numeric form of the enum value.
|
||||||
if n, err := strconv.ParseInt(s, 10, 32); err == nil {
|
if n, err := strconv.ParseInt(s, 10, 32); err == nil {
|
||||||
if ev := evs.ByNumber(pref.EnumNumber(n)); ev != nil {
|
if ev := evs.ByNumber(protoreflect.EnumNumber(n)); ev != nil {
|
||||||
return pref.ValueOfEnum(ev.Number()), ev, nil
|
return protoreflect.ValueOfEnum(ev.Number()), ev, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Descriptor default_value use the enum identifier.
|
// Descriptor default_value use the enum identifier.
|
||||||
ev := evs.ByName(pref.Name(s))
|
ev := evs.ByName(protoreflect.Name(s))
|
||||||
if ev != nil {
|
if ev != nil {
|
||||||
return pref.ValueOfEnum(ev.Number()), ev, nil
|
return protoreflect.ValueOfEnum(ev.Number()), ev, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||||
if v, err := strconv.ParseInt(s, 10, 32); err == nil {
|
if v, err := strconv.ParseInt(s, 10, 32); err == nil {
|
||||||
return pref.ValueOfInt32(int32(v)), nil, nil
|
return protoreflect.ValueOfInt32(int32(v)), nil, nil
|
||||||
}
|
}
|
||||||
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
|
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
if v, err := strconv.ParseInt(s, 10, 64); err == nil {
|
if v, err := strconv.ParseInt(s, 10, 64); err == nil {
|
||||||
return pref.ValueOfInt64(int64(v)), nil, nil
|
return protoreflect.ValueOfInt64(int64(v)), nil, nil
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind, pref.Fixed32Kind:
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||||
if v, err := strconv.ParseUint(s, 10, 32); err == nil {
|
if v, err := strconv.ParseUint(s, 10, 32); err == nil {
|
||||||
return pref.ValueOfUint32(uint32(v)), nil, nil
|
return protoreflect.ValueOfUint32(uint32(v)), nil, nil
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind, pref.Fixed64Kind:
|
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
if v, err := strconv.ParseUint(s, 10, 64); err == nil {
|
if v, err := strconv.ParseUint(s, 10, 64); err == nil {
|
||||||
return pref.ValueOfUint64(uint64(v)), nil, nil
|
return protoreflect.ValueOfUint64(uint64(v)), nil, nil
|
||||||
}
|
}
|
||||||
case pref.FloatKind, pref.DoubleKind:
|
case protoreflect.FloatKind, protoreflect.DoubleKind:
|
||||||
var v float64
|
var v float64
|
||||||
var err error
|
var err error
|
||||||
switch s {
|
switch s {
|
||||||
@@ -98,29 +98,29 @@ func Unmarshal(s string, k pref.Kind, evs pref.EnumValueDescriptors, f Format) (
|
|||||||
v, err = strconv.ParseFloat(s, 64)
|
v, err = strconv.ParseFloat(s, 64)
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if k == pref.FloatKind {
|
if k == protoreflect.FloatKind {
|
||||||
return pref.ValueOfFloat32(float32(v)), nil, nil
|
return protoreflect.ValueOfFloat32(float32(v)), nil, nil
|
||||||
} else {
|
} else {
|
||||||
return pref.ValueOfFloat64(float64(v)), nil, nil
|
return protoreflect.ValueOfFloat64(float64(v)), nil, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
// String values are already unescaped and can be used as is.
|
// String values are already unescaped and can be used as is.
|
||||||
return pref.ValueOfString(s), nil, nil
|
return protoreflect.ValueOfString(s), nil, nil
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if b, ok := unmarshalBytes(s); ok {
|
if b, ok := unmarshalBytes(s); ok {
|
||||||
return pref.ValueOfBytes(b), nil, nil
|
return protoreflect.ValueOfBytes(b), nil, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pref.Value{}, nil, errors.New("could not parse value for %v: %q", k, s)
|
return protoreflect.Value{}, nil, errors.New("could not parse value for %v: %q", k, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal serializes v as the default string according to the given kind k.
|
// Marshal serializes v as the default string according to the given kind k.
|
||||||
// When specifying the Descriptor format for an enum kind, the associated
|
// When specifying the Descriptor format for an enum kind, the associated
|
||||||
// enum value descriptor must be provided.
|
// enum value descriptor must be provided.
|
||||||
func Marshal(v pref.Value, ev pref.EnumValueDescriptor, k pref.Kind, f Format) (string, error) {
|
func Marshal(v protoreflect.Value, ev protoreflect.EnumValueDescriptor, k protoreflect.Kind, f Format) (string, error) {
|
||||||
switch k {
|
switch k {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if f == GoTag {
|
if f == GoTag {
|
||||||
if v.Bool() {
|
if v.Bool() {
|
||||||
return "1", nil
|
return "1", nil
|
||||||
@@ -134,17 +134,17 @@ func Marshal(v pref.Value, ev pref.EnumValueDescriptor, k pref.Kind, f Format) (
|
|||||||
return "false", nil
|
return "false", nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if f == GoTag {
|
if f == GoTag {
|
||||||
return strconv.FormatInt(int64(v.Enum()), 10), nil
|
return strconv.FormatInt(int64(v.Enum()), 10), nil
|
||||||
} else {
|
} else {
|
||||||
return string(ev.Name()), nil
|
return string(ev.Name()), nil
|
||||||
}
|
}
|
||||||
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind, pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
return strconv.FormatInt(v.Int(), 10), nil
|
return strconv.FormatInt(v.Int(), 10), nil
|
||||||
case pref.Uint32Kind, pref.Fixed32Kind, pref.Uint64Kind, pref.Fixed64Kind:
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
return strconv.FormatUint(v.Uint(), 10), nil
|
return strconv.FormatUint(v.Uint(), 10), nil
|
||||||
case pref.FloatKind, pref.DoubleKind:
|
case protoreflect.FloatKind, protoreflect.DoubleKind:
|
||||||
f := v.Float()
|
f := v.Float()
|
||||||
switch {
|
switch {
|
||||||
case math.IsInf(f, -1):
|
case math.IsInf(f, -1):
|
||||||
@@ -154,16 +154,16 @@ func Marshal(v pref.Value, ev pref.EnumValueDescriptor, k pref.Kind, f Format) (
|
|||||||
case math.IsNaN(f):
|
case math.IsNaN(f):
|
||||||
return "nan", nil
|
return "nan", nil
|
||||||
default:
|
default:
|
||||||
if k == pref.FloatKind {
|
if k == protoreflect.FloatKind {
|
||||||
return strconv.FormatFloat(f, 'g', -1, 32), nil
|
return strconv.FormatFloat(f, 'g', -1, 32), nil
|
||||||
} else {
|
} else {
|
||||||
return strconv.FormatFloat(f, 'g', -1, 64), nil
|
return strconv.FormatFloat(f, 'g', -1, 64), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
// String values are serialized as is without any escaping.
|
// String values are serialized as is without any escaping.
|
||||||
return v.String(), nil
|
return v.String(), nil
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if s, ok := marshalBytes(v.Bytes()); ok {
|
if s, ok := marshalBytes(v.Bytes()); ok {
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The MessageSet wire format is equivalent to a message defined as follows,
|
// The MessageSet wire format is equivalent to a message defined as follows,
|
||||||
@@ -33,6 +33,7 @@ const (
|
|||||||
// ExtensionName is the field name for extensions of MessageSet.
|
// ExtensionName is the field name for extensions of MessageSet.
|
||||||
//
|
//
|
||||||
// A valid MessageSet extension must be of the form:
|
// A valid MessageSet extension must be of the form:
|
||||||
|
//
|
||||||
// message MyMessage {
|
// message MyMessage {
|
||||||
// extend proto2.bridge.MessageSet {
|
// extend proto2.bridge.MessageSet {
|
||||||
// optional MyMessage message_set_extension = 1234;
|
// optional MyMessage message_set_extension = 1234;
|
||||||
@@ -42,13 +43,13 @@ const (
|
|||||||
const ExtensionName = "message_set_extension"
|
const ExtensionName = "message_set_extension"
|
||||||
|
|
||||||
// IsMessageSet returns whether the message uses the MessageSet wire format.
|
// IsMessageSet returns whether the message uses the MessageSet wire format.
|
||||||
func IsMessageSet(md pref.MessageDescriptor) bool {
|
func IsMessageSet(md protoreflect.MessageDescriptor) bool {
|
||||||
xmd, ok := md.(interface{ IsMessageSet() bool })
|
xmd, ok := md.(interface{ IsMessageSet() bool })
|
||||||
return ok && xmd.IsMessageSet()
|
return ok && xmd.IsMessageSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsMessageSetExtension reports this field properly extends a MessageSet.
|
// IsMessageSetExtension reports this field properly extends a MessageSet.
|
||||||
func IsMessageSetExtension(fd pref.FieldDescriptor) bool {
|
func IsMessageSetExtension(fd protoreflect.FieldDescriptor) bool {
|
||||||
switch {
|
switch {
|
||||||
case fd.Name() != ExtensionName:
|
case fd.Name() != ExtensionName:
|
||||||
return false
|
return false
|
||||||
|
|||||||
+48
-48
@@ -11,10 +11,10 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
defval "google.golang.org/protobuf/internal/encoding/defval"
|
"google.golang.org/protobuf/internal/encoding/defval"
|
||||||
fdesc "google.golang.org/protobuf/internal/filedesc"
|
"google.golang.org/protobuf/internal/filedesc"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
var byteType = reflect.TypeOf(byte(0))
|
var byteType = reflect.TypeOf(byte(0))
|
||||||
@@ -29,9 +29,9 @@ var byteType = reflect.TypeOf(byte(0))
|
|||||||
// This does not populate the Enum or Message (except for weak message).
|
// This does not populate the Enum or Message (except for weak message).
|
||||||
//
|
//
|
||||||
// This function is a best effort attempt; parsing errors are ignored.
|
// This function is a best effort attempt; parsing errors are ignored.
|
||||||
func Unmarshal(tag string, goType reflect.Type, evs pref.EnumValueDescriptors) pref.FieldDescriptor {
|
func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescriptors) protoreflect.FieldDescriptor {
|
||||||
f := new(fdesc.Field)
|
f := new(filedesc.Field)
|
||||||
f.L0.ParentFile = fdesc.SurrogateProto2
|
f.L0.ParentFile = filedesc.SurrogateProto2
|
||||||
for len(tag) > 0 {
|
for len(tag) > 0 {
|
||||||
i := strings.IndexByte(tag, ',')
|
i := strings.IndexByte(tag, ',')
|
||||||
if i < 0 {
|
if i < 0 {
|
||||||
@@ -39,68 +39,68 @@ func Unmarshal(tag string, goType reflect.Type, evs pref.EnumValueDescriptors) p
|
|||||||
}
|
}
|
||||||
switch s := tag[:i]; {
|
switch s := tag[:i]; {
|
||||||
case strings.HasPrefix(s, "name="):
|
case strings.HasPrefix(s, "name="):
|
||||||
f.L0.FullName = pref.FullName(s[len("name="):])
|
f.L0.FullName = protoreflect.FullName(s[len("name="):])
|
||||||
case strings.Trim(s, "0123456789") == "":
|
case strings.Trim(s, "0123456789") == "":
|
||||||
n, _ := strconv.ParseUint(s, 10, 32)
|
n, _ := strconv.ParseUint(s, 10, 32)
|
||||||
f.L1.Number = pref.FieldNumber(n)
|
f.L1.Number = protoreflect.FieldNumber(n)
|
||||||
case s == "opt":
|
case s == "opt":
|
||||||
f.L1.Cardinality = pref.Optional
|
f.L1.Cardinality = protoreflect.Optional
|
||||||
case s == "req":
|
case s == "req":
|
||||||
f.L1.Cardinality = pref.Required
|
f.L1.Cardinality = protoreflect.Required
|
||||||
case s == "rep":
|
case s == "rep":
|
||||||
f.L1.Cardinality = pref.Repeated
|
f.L1.Cardinality = protoreflect.Repeated
|
||||||
case s == "varint":
|
case s == "varint":
|
||||||
switch goType.Kind() {
|
switch goType.Kind() {
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
f.L1.Kind = pref.BoolKind
|
f.L1.Kind = protoreflect.BoolKind
|
||||||
case reflect.Int32:
|
case reflect.Int32:
|
||||||
f.L1.Kind = pref.Int32Kind
|
f.L1.Kind = protoreflect.Int32Kind
|
||||||
case reflect.Int64:
|
case reflect.Int64:
|
||||||
f.L1.Kind = pref.Int64Kind
|
f.L1.Kind = protoreflect.Int64Kind
|
||||||
case reflect.Uint32:
|
case reflect.Uint32:
|
||||||
f.L1.Kind = pref.Uint32Kind
|
f.L1.Kind = protoreflect.Uint32Kind
|
||||||
case reflect.Uint64:
|
case reflect.Uint64:
|
||||||
f.L1.Kind = pref.Uint64Kind
|
f.L1.Kind = protoreflect.Uint64Kind
|
||||||
}
|
}
|
||||||
case s == "zigzag32":
|
case s == "zigzag32":
|
||||||
if goType.Kind() == reflect.Int32 {
|
if goType.Kind() == reflect.Int32 {
|
||||||
f.L1.Kind = pref.Sint32Kind
|
f.L1.Kind = protoreflect.Sint32Kind
|
||||||
}
|
}
|
||||||
case s == "zigzag64":
|
case s == "zigzag64":
|
||||||
if goType.Kind() == reflect.Int64 {
|
if goType.Kind() == reflect.Int64 {
|
||||||
f.L1.Kind = pref.Sint64Kind
|
f.L1.Kind = protoreflect.Sint64Kind
|
||||||
}
|
}
|
||||||
case s == "fixed32":
|
case s == "fixed32":
|
||||||
switch goType.Kind() {
|
switch goType.Kind() {
|
||||||
case reflect.Int32:
|
case reflect.Int32:
|
||||||
f.L1.Kind = pref.Sfixed32Kind
|
f.L1.Kind = protoreflect.Sfixed32Kind
|
||||||
case reflect.Uint32:
|
case reflect.Uint32:
|
||||||
f.L1.Kind = pref.Fixed32Kind
|
f.L1.Kind = protoreflect.Fixed32Kind
|
||||||
case reflect.Float32:
|
case reflect.Float32:
|
||||||
f.L1.Kind = pref.FloatKind
|
f.L1.Kind = protoreflect.FloatKind
|
||||||
}
|
}
|
||||||
case s == "fixed64":
|
case s == "fixed64":
|
||||||
switch goType.Kind() {
|
switch goType.Kind() {
|
||||||
case reflect.Int64:
|
case reflect.Int64:
|
||||||
f.L1.Kind = pref.Sfixed64Kind
|
f.L1.Kind = protoreflect.Sfixed64Kind
|
||||||
case reflect.Uint64:
|
case reflect.Uint64:
|
||||||
f.L1.Kind = pref.Fixed64Kind
|
f.L1.Kind = protoreflect.Fixed64Kind
|
||||||
case reflect.Float64:
|
case reflect.Float64:
|
||||||
f.L1.Kind = pref.DoubleKind
|
f.L1.Kind = protoreflect.DoubleKind
|
||||||
}
|
}
|
||||||
case s == "bytes":
|
case s == "bytes":
|
||||||
switch {
|
switch {
|
||||||
case goType.Kind() == reflect.String:
|
case goType.Kind() == reflect.String:
|
||||||
f.L1.Kind = pref.StringKind
|
f.L1.Kind = protoreflect.StringKind
|
||||||
case goType.Kind() == reflect.Slice && goType.Elem() == byteType:
|
case goType.Kind() == reflect.Slice && goType.Elem() == byteType:
|
||||||
f.L1.Kind = pref.BytesKind
|
f.L1.Kind = protoreflect.BytesKind
|
||||||
default:
|
default:
|
||||||
f.L1.Kind = pref.MessageKind
|
f.L1.Kind = protoreflect.MessageKind
|
||||||
}
|
}
|
||||||
case s == "group":
|
case s == "group":
|
||||||
f.L1.Kind = pref.GroupKind
|
f.L1.Kind = protoreflect.GroupKind
|
||||||
case strings.HasPrefix(s, "enum="):
|
case strings.HasPrefix(s, "enum="):
|
||||||
f.L1.Kind = pref.EnumKind
|
f.L1.Kind = protoreflect.EnumKind
|
||||||
case strings.HasPrefix(s, "json="):
|
case strings.HasPrefix(s, "json="):
|
||||||
jsonName := s[len("json="):]
|
jsonName := s[len("json="):]
|
||||||
if jsonName != strs.JSONCamelCase(string(f.L0.FullName.Name())) {
|
if jsonName != strs.JSONCamelCase(string(f.L0.FullName.Name())) {
|
||||||
@@ -111,23 +111,23 @@ func Unmarshal(tag string, goType reflect.Type, evs pref.EnumValueDescriptors) p
|
|||||||
f.L1.IsPacked = true
|
f.L1.IsPacked = true
|
||||||
case strings.HasPrefix(s, "weak="):
|
case strings.HasPrefix(s, "weak="):
|
||||||
f.L1.IsWeak = true
|
f.L1.IsWeak = true
|
||||||
f.L1.Message = fdesc.PlaceholderMessage(pref.FullName(s[len("weak="):]))
|
f.L1.Message = filedesc.PlaceholderMessage(protoreflect.FullName(s[len("weak="):]))
|
||||||
case strings.HasPrefix(s, "def="):
|
case strings.HasPrefix(s, "def="):
|
||||||
// The default tag is special in that everything afterwards is the
|
// The default tag is special in that everything afterwards is the
|
||||||
// default regardless of the presence of commas.
|
// default regardless of the presence of commas.
|
||||||
s, i = tag[len("def="):], len(tag)
|
s, i = tag[len("def="):], len(tag)
|
||||||
v, ev, _ := defval.Unmarshal(s, f.L1.Kind, evs, defval.GoTag)
|
v, ev, _ := defval.Unmarshal(s, f.L1.Kind, evs, defval.GoTag)
|
||||||
f.L1.Default = fdesc.DefaultValue(v, ev)
|
f.L1.Default = filedesc.DefaultValue(v, ev)
|
||||||
case s == "proto3":
|
case s == "proto3":
|
||||||
f.L0.ParentFile = fdesc.SurrogateProto3
|
f.L0.ParentFile = filedesc.SurrogateProto3
|
||||||
}
|
}
|
||||||
tag = strings.TrimPrefix(tag[i:], ",")
|
tag = strings.TrimPrefix(tag[i:], ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
// The generator uses the group message name instead of the field name.
|
// The generator uses the group message name instead of the field name.
|
||||||
// We obtain the real field name by lowercasing the group name.
|
// We obtain the real field name by lowercasing the group name.
|
||||||
if f.L1.Kind == pref.GroupKind {
|
if f.L1.Kind == protoreflect.GroupKind {
|
||||||
f.L0.FullName = pref.FullName(strings.ToLower(string(f.L0.FullName)))
|
f.L0.FullName = protoreflect.FullName(strings.ToLower(string(f.L0.FullName)))
|
||||||
}
|
}
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
@@ -140,38 +140,38 @@ func Unmarshal(tag string, goType reflect.Type, evs pref.EnumValueDescriptors) p
|
|||||||
// Depending on the context on how Marshal is called, there are different ways
|
// Depending on the context on how Marshal is called, there are different ways
|
||||||
// through which that information is determined. As such it is the caller's
|
// through which that information is determined. As such it is the caller's
|
||||||
// responsibility to provide a function to obtain that information.
|
// responsibility to provide a function to obtain that information.
|
||||||
func Marshal(fd pref.FieldDescriptor, enumName string) string {
|
func Marshal(fd protoreflect.FieldDescriptor, enumName string) string {
|
||||||
var tag []string
|
var tag []string
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind, pref.EnumKind, pref.Int32Kind, pref.Uint32Kind, pref.Int64Kind, pref.Uint64Kind:
|
case protoreflect.BoolKind, protoreflect.EnumKind, protoreflect.Int32Kind, protoreflect.Uint32Kind, protoreflect.Int64Kind, protoreflect.Uint64Kind:
|
||||||
tag = append(tag, "varint")
|
tag = append(tag, "varint")
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
tag = append(tag, "zigzag32")
|
tag = append(tag, "zigzag32")
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
tag = append(tag, "zigzag64")
|
tag = append(tag, "zigzag64")
|
||||||
case pref.Sfixed32Kind, pref.Fixed32Kind, pref.FloatKind:
|
case protoreflect.Sfixed32Kind, protoreflect.Fixed32Kind, protoreflect.FloatKind:
|
||||||
tag = append(tag, "fixed32")
|
tag = append(tag, "fixed32")
|
||||||
case pref.Sfixed64Kind, pref.Fixed64Kind, pref.DoubleKind:
|
case protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind, protoreflect.DoubleKind:
|
||||||
tag = append(tag, "fixed64")
|
tag = append(tag, "fixed64")
|
||||||
case pref.StringKind, pref.BytesKind, pref.MessageKind:
|
case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind:
|
||||||
tag = append(tag, "bytes")
|
tag = append(tag, "bytes")
|
||||||
case pref.GroupKind:
|
case protoreflect.GroupKind:
|
||||||
tag = append(tag, "group")
|
tag = append(tag, "group")
|
||||||
}
|
}
|
||||||
tag = append(tag, strconv.Itoa(int(fd.Number())))
|
tag = append(tag, strconv.Itoa(int(fd.Number())))
|
||||||
switch fd.Cardinality() {
|
switch fd.Cardinality() {
|
||||||
case pref.Optional:
|
case protoreflect.Optional:
|
||||||
tag = append(tag, "opt")
|
tag = append(tag, "opt")
|
||||||
case pref.Required:
|
case protoreflect.Required:
|
||||||
tag = append(tag, "req")
|
tag = append(tag, "req")
|
||||||
case pref.Repeated:
|
case protoreflect.Repeated:
|
||||||
tag = append(tag, "rep")
|
tag = append(tag, "rep")
|
||||||
}
|
}
|
||||||
if fd.IsPacked() {
|
if fd.IsPacked() {
|
||||||
tag = append(tag, "packed")
|
tag = append(tag, "packed")
|
||||||
}
|
}
|
||||||
name := string(fd.Name())
|
name := string(fd.Name())
|
||||||
if fd.Kind() == pref.GroupKind {
|
if fd.Kind() == protoreflect.GroupKind {
|
||||||
// The name of the FieldDescriptor for a group field is
|
// The name of the FieldDescriptor for a group field is
|
||||||
// lowercased. To find the original capitalization, we
|
// lowercased. To find the original capitalization, we
|
||||||
// look in the field's MessageType.
|
// look in the field's MessageType.
|
||||||
@@ -189,10 +189,10 @@ func Marshal(fd pref.FieldDescriptor, enumName string) string {
|
|||||||
// The previous implementation does not tag extension fields as proto3,
|
// The previous implementation does not tag extension fields as proto3,
|
||||||
// even when the field is defined in a proto3 file. Match that behavior
|
// even when the field is defined in a proto3 file. Match that behavior
|
||||||
// for consistency.
|
// for consistency.
|
||||||
if fd.Syntax() == pref.Proto3 && !fd.IsExtension() {
|
if fd.Syntax() == protoreflect.Proto3 && !fd.IsExtension() {
|
||||||
tag = append(tag, "proto3")
|
tag = append(tag, "proto3")
|
||||||
}
|
}
|
||||||
if fd.Kind() == pref.EnumKind && enumName != "" {
|
if fd.Kind() == protoreflect.EnumKind && enumName != "" {
|
||||||
tag = append(tag, "enum="+enumName)
|
tag = append(tag, "enum="+enumName)
|
||||||
}
|
}
|
||||||
if fd.ContainingOneof() != nil {
|
if fd.ContainingOneof() != nil {
|
||||||
|
|||||||
+28
-7
@@ -8,7 +8,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"regexp"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
@@ -413,15 +412,16 @@ func (d *Decoder) parseFieldName() (tok Token, err error) {
|
|||||||
// Field number. Identify if input is a valid number that is not negative
|
// Field number. Identify if input is a valid number that is not negative
|
||||||
// and is decimal integer within 32-bit range.
|
// and is decimal integer within 32-bit range.
|
||||||
if num := parseNumber(d.in); num.size > 0 {
|
if num := parseNumber(d.in); num.size > 0 {
|
||||||
|
str := num.string(d.in)
|
||||||
if !num.neg && num.kind == numDec {
|
if !num.neg && num.kind == numDec {
|
||||||
if _, err := strconv.ParseInt(string(d.in[:num.size]), 10, 32); err == nil {
|
if _, err := strconv.ParseInt(str, 10, 32); err == nil {
|
||||||
return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil
|
return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Token{}, d.newSyntaxError("invalid field number: %s", d.in[:num.size])
|
return Token{}, d.newSyntaxError("invalid field number: %s", str)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Token{}, d.newSyntaxError("invalid field name: %s", errRegexp.Find(d.in))
|
return Token{}, d.newSyntaxError("invalid field name: %s", errId(d.in))
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseTypeName parses Any type URL or extension field name. The name is
|
// parseTypeName parses Any type URL or extension field name. The name is
|
||||||
@@ -571,7 +571,7 @@ func (d *Decoder) parseScalar() (Token, error) {
|
|||||||
return tok, nil
|
return tok, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return Token{}, d.newSyntaxError("invalid scalar value: %s", errRegexp.Find(d.in))
|
return Token{}, d.newSyntaxError("invalid scalar value: %s", errId(d.in))
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseLiteralValue parses a literal value. A literal value is used for
|
// parseLiteralValue parses a literal value. A literal value is used for
|
||||||
@@ -653,8 +653,29 @@ func consume(b []byte, n int) []byte {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
// Any sequence that looks like a non-delimiter (for error reporting).
|
// errId extracts a byte sequence that looks like an invalid ID
|
||||||
var errRegexp = regexp.MustCompile(`^([-+._a-zA-Z0-9\/]+|.)`)
|
// (for the purposes of error reporting).
|
||||||
|
func errId(seq []byte) []byte {
|
||||||
|
const maxLen = 32
|
||||||
|
for i := 0; i < len(seq); {
|
||||||
|
if i > maxLen {
|
||||||
|
return append(seq[:i:i], "…"...)
|
||||||
|
}
|
||||||
|
r, size := utf8.DecodeRune(seq[i:])
|
||||||
|
if r > utf8.RuneSelf || (r != '/' && isDelim(byte(r))) {
|
||||||
|
if i == 0 {
|
||||||
|
// Either the first byte is invalid UTF-8 or a
|
||||||
|
// delimiter, or the first rune is non-ASCII.
|
||||||
|
// Return it as-is.
|
||||||
|
i = size
|
||||||
|
}
|
||||||
|
return seq[:i:i]
|
||||||
|
}
|
||||||
|
i += size
|
||||||
|
}
|
||||||
|
// No delimiter found.
|
||||||
|
return seq
|
||||||
|
}
|
||||||
|
|
||||||
// isDelim returns true if given byte is a delimiter character.
|
// isDelim returns true if given byte is a delimiter character.
|
||||||
func isDelim(c byte) bool {
|
func isDelim(c byte) bool {
|
||||||
|
|||||||
+35
-14
@@ -15,17 +15,12 @@ func (d *Decoder) parseNumberValue() (Token, bool) {
|
|||||||
if num.neg {
|
if num.neg {
|
||||||
numAttrs |= isNegative
|
numAttrs |= isNegative
|
||||||
}
|
}
|
||||||
strSize := num.size
|
|
||||||
last := num.size - 1
|
|
||||||
if num.kind == numFloat && (d.in[last] == 'f' || d.in[last] == 'F') {
|
|
||||||
strSize = last
|
|
||||||
}
|
|
||||||
tok := Token{
|
tok := Token{
|
||||||
kind: Scalar,
|
kind: Scalar,
|
||||||
attrs: numberValue,
|
attrs: numberValue,
|
||||||
pos: len(d.orig) - len(d.in),
|
pos: len(d.orig) - len(d.in),
|
||||||
raw: d.in[:num.size],
|
raw: d.in[:num.size],
|
||||||
str: string(d.in[:strSize]),
|
str: num.string(d.in),
|
||||||
numAttrs: numAttrs,
|
numAttrs: numAttrs,
|
||||||
}
|
}
|
||||||
d.consume(num.size)
|
d.consume(num.size)
|
||||||
@@ -46,12 +41,35 @@ type number struct {
|
|||||||
kind uint8
|
kind uint8
|
||||||
neg bool
|
neg bool
|
||||||
size int
|
size int
|
||||||
|
// if neg, this is the length of whitespace and comments between
|
||||||
|
// the minus sign and the rest fo the number literal
|
||||||
|
sep int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (num number) string(data []byte) string {
|
||||||
|
strSize := num.size
|
||||||
|
last := num.size - 1
|
||||||
|
if num.kind == numFloat && (data[last] == 'f' || data[last] == 'F') {
|
||||||
|
strSize = last
|
||||||
|
}
|
||||||
|
if num.neg && num.sep > 0 {
|
||||||
|
// strip whitespace/comments between negative sign and the rest
|
||||||
|
strLen := strSize - num.sep
|
||||||
|
str := make([]byte, strLen)
|
||||||
|
str[0] = data[0]
|
||||||
|
copy(str[1:], data[num.sep+1:strSize])
|
||||||
|
return string(str)
|
||||||
|
}
|
||||||
|
return string(data[:strSize])
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseNumber constructs a number object from given input. It allows for the
|
// parseNumber constructs a number object from given input. It allows for the
|
||||||
// following patterns:
|
// following patterns:
|
||||||
// integer: ^-?([1-9][0-9]*|0[xX][0-9a-fA-F]+|0[0-7]*)
|
//
|
||||||
// float: ^-?((0|[1-9][0-9]*)?([.][0-9]*)?([eE][+-]?[0-9]+)?[fF]?)
|
// integer: ^-?([1-9][0-9]*|0[xX][0-9a-fA-F]+|0[0-7]*)
|
||||||
|
// float: ^-?((0|[1-9][0-9]*)?([.][0-9]*)?([eE][+-]?[0-9]+)?[fF]?)
|
||||||
|
//
|
||||||
// It also returns the number of parsed bytes for the given number, 0 if it is
|
// It also returns the number of parsed bytes for the given number, 0 if it is
|
||||||
// not a number.
|
// not a number.
|
||||||
func parseNumber(input []byte) number {
|
func parseNumber(input []byte) number {
|
||||||
@@ -65,19 +83,22 @@ func parseNumber(input []byte) number {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Optional -
|
// Optional -
|
||||||
|
var sep int
|
||||||
if s[0] == '-' {
|
if s[0] == '-' {
|
||||||
neg = true
|
neg = true
|
||||||
s = s[1:]
|
s = s[1:]
|
||||||
size++
|
size++
|
||||||
|
// Consume any whitespace or comments between the
|
||||||
|
// negative sign and the rest of the number
|
||||||
|
lenBefore := len(s)
|
||||||
|
s = consume(s, 0)
|
||||||
|
sep = lenBefore - len(s)
|
||||||
|
size += sep
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return number{}
|
return number{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// C++ allows for whitespace and comments in between the negative sign and
|
|
||||||
// the rest of the number. This logic currently does not but is consistent
|
|
||||||
// with v1.
|
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case s[0] == '0':
|
case s[0] == '0':
|
||||||
if len(s) > 1 {
|
if len(s) > 1 {
|
||||||
@@ -114,7 +135,7 @@ func parseNumber(input []byte) number {
|
|||||||
if len(s) > 0 && !isDelim(s[0]) {
|
if len(s) > 0 && !isDelim(s[0]) {
|
||||||
return number{}
|
return number{}
|
||||||
}
|
}
|
||||||
return number{kind: kind, neg: neg, size: size}
|
return number{kind: kind, neg: neg, size: size, sep: sep}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s = s[1:]
|
s = s[1:]
|
||||||
@@ -186,5 +207,5 @@ func parseNumber(input []byte) number {
|
|||||||
return number{}
|
return number{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return number{kind: kind, neg: neg, size: size}
|
return number{kind: kind, neg: neg, size: size, sep: sep}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -24,6 +24,6 @@
|
|||||||
// the Go implementation should as well.
|
// the Go implementation should as well.
|
||||||
//
|
//
|
||||||
// The text format is almost a superset of JSON except:
|
// The text format is almost a superset of JSON except:
|
||||||
// * message keys are not quoted strings, but identifiers
|
// - message keys are not quoted strings, but identifiers
|
||||||
// * the top-level value must be a message without the delimiters
|
// - the top-level value must be a message without the delimiters
|
||||||
package text
|
package text
|
||||||
|
|||||||
+6
-4
@@ -53,8 +53,10 @@ type encoderState struct {
|
|||||||
// If outputASCII is true, strings will be serialized in such a way that
|
// If outputASCII is true, strings will be serialized in such a way that
|
||||||
// multi-byte UTF-8 sequences are escaped. This property ensures that the
|
// multi-byte UTF-8 sequences are escaped. This property ensures that the
|
||||||
// overall output is ASCII (as opposed to UTF-8).
|
// overall output is ASCII (as opposed to UTF-8).
|
||||||
func NewEncoder(indent string, delims [2]byte, outputASCII bool) (*Encoder, error) {
|
func NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) {
|
||||||
e := &Encoder{}
|
e := &Encoder{
|
||||||
|
encoderState: encoderState{out: buf},
|
||||||
|
}
|
||||||
if len(indent) > 0 {
|
if len(indent) > 0 {
|
||||||
if strings.Trim(indent, " \t") != "" {
|
if strings.Trim(indent, " \t") != "" {
|
||||||
return nil, errors.New("indent may only be composed of space and tab characters")
|
return nil, errors.New("indent may only be composed of space and tab characters")
|
||||||
@@ -195,13 +197,13 @@ func appendFloat(out []byte, n float64, bitSize int) []byte {
|
|||||||
// WriteInt writes out the given signed integer value.
|
// WriteInt writes out the given signed integer value.
|
||||||
func (e *Encoder) WriteInt(n int64) {
|
func (e *Encoder) WriteInt(n int64) {
|
||||||
e.prepareNext(scalar)
|
e.prepareNext(scalar)
|
||||||
e.out = append(e.out, strconv.FormatInt(n, 10)...)
|
e.out = strconv.AppendInt(e.out, n, 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteUint writes out the given unsigned integer value.
|
// WriteUint writes out the given unsigned integer value.
|
||||||
func (e *Encoder) WriteUint(n uint64) {
|
func (e *Encoder) WriteUint(n uint64) {
|
||||||
e.prepareNext(scalar)
|
e.prepareNext(scalar)
|
||||||
e.out = append(e.out, strconv.FormatUint(n, 10)...)
|
e.out = strconv.AppendUint(e.out, n, 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteLiteral writes out the given string as a literal value without quotes.
|
// WriteLiteral writes out the given string as a literal value without quotes.
|
||||||
|
|||||||
+9
-10
@@ -12,8 +12,7 @@ import (
|
|||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/genid"
|
"google.golang.org/protobuf/internal/genid"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
preg "google.golang.org/protobuf/reflect/protoregistry"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Builder construct a protoreflect.FileDescriptor from the raw descriptor.
|
// Builder construct a protoreflect.FileDescriptor from the raw descriptor.
|
||||||
@@ -38,7 +37,7 @@ type Builder struct {
|
|||||||
// TypeResolver resolves extension field types for descriptor options.
|
// TypeResolver resolves extension field types for descriptor options.
|
||||||
// If nil, it uses protoregistry.GlobalTypes.
|
// If nil, it uses protoregistry.GlobalTypes.
|
||||||
TypeResolver interface {
|
TypeResolver interface {
|
||||||
preg.ExtensionTypeResolver
|
protoregistry.ExtensionTypeResolver
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileRegistry is use to lookup file, enum, and message dependencies.
|
// FileRegistry is use to lookup file, enum, and message dependencies.
|
||||||
@@ -46,8 +45,8 @@ type Builder struct {
|
|||||||
// If nil, it uses protoregistry.GlobalFiles.
|
// If nil, it uses protoregistry.GlobalFiles.
|
||||||
FileRegistry interface {
|
FileRegistry interface {
|
||||||
FindFileByPath(string) (protoreflect.FileDescriptor, error)
|
FindFileByPath(string) (protoreflect.FileDescriptor, error)
|
||||||
FindDescriptorByName(pref.FullName) (pref.Descriptor, error)
|
FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
|
||||||
RegisterFile(pref.FileDescriptor) error
|
RegisterFile(protoreflect.FileDescriptor) error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,8 +54,8 @@ type Builder struct {
|
|||||||
// If so, it permits looking up an enum or message dependency based on the
|
// If so, it permits looking up an enum or message dependency based on the
|
||||||
// sub-list and element index into filetype.Builder.DependencyIndexes.
|
// sub-list and element index into filetype.Builder.DependencyIndexes.
|
||||||
type resolverByIndex interface {
|
type resolverByIndex interface {
|
||||||
FindEnumByIndex(int32, int32, []Enum, []Message) pref.EnumDescriptor
|
FindEnumByIndex(int32, int32, []Enum, []Message) protoreflect.EnumDescriptor
|
||||||
FindMessageByIndex(int32, int32, []Enum, []Message) pref.MessageDescriptor
|
FindMessageByIndex(int32, int32, []Enum, []Message) protoreflect.MessageDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indexes of each sub-list in filetype.Builder.DependencyIndexes.
|
// Indexes of each sub-list in filetype.Builder.DependencyIndexes.
|
||||||
@@ -70,7 +69,7 @@ const (
|
|||||||
|
|
||||||
// Out is the output of the Builder.
|
// Out is the output of the Builder.
|
||||||
type Out struct {
|
type Out struct {
|
||||||
File pref.FileDescriptor
|
File protoreflect.FileDescriptor
|
||||||
|
|
||||||
// Enums is all enum descriptors in "flattened ordering".
|
// Enums is all enum descriptors in "flattened ordering".
|
||||||
Enums []Enum
|
Enums []Enum
|
||||||
@@ -97,10 +96,10 @@ func (db Builder) Build() (out Out) {
|
|||||||
|
|
||||||
// Initialize resolvers and registries if unpopulated.
|
// Initialize resolvers and registries if unpopulated.
|
||||||
if db.TypeResolver == nil {
|
if db.TypeResolver == nil {
|
||||||
db.TypeResolver = preg.GlobalTypes
|
db.TypeResolver = protoregistry.GlobalTypes
|
||||||
}
|
}
|
||||||
if db.FileRegistry == nil {
|
if db.FileRegistry == nil {
|
||||||
db.FileRegistry = preg.GlobalFiles
|
db.FileRegistry = protoregistry.GlobalFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
fd := newRawFile(db)
|
fd := newRawFile(db)
|
||||||
|
|||||||
+190
-188
@@ -17,7 +17,7 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/genid"
|
"google.golang.org/protobuf/internal/genid"
|
||||||
"google.golang.org/protobuf/internal/pragma"
|
"google.golang.org/protobuf/internal/pragma"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -43,9 +43,9 @@ type (
|
|||||||
L2 *FileL2
|
L2 *FileL2
|
||||||
}
|
}
|
||||||
FileL1 struct {
|
FileL1 struct {
|
||||||
Syntax pref.Syntax
|
Syntax protoreflect.Syntax
|
||||||
Path string
|
Path string
|
||||||
Package pref.FullName
|
Package protoreflect.FullName
|
||||||
|
|
||||||
Enums Enums
|
Enums Enums
|
||||||
Messages Messages
|
Messages Messages
|
||||||
@@ -53,36 +53,36 @@ type (
|
|||||||
Services Services
|
Services Services
|
||||||
}
|
}
|
||||||
FileL2 struct {
|
FileL2 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Imports FileImports
|
Imports FileImports
|
||||||
Locations SourceLocations
|
Locations SourceLocations
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (fd *File) ParentFile() pref.FileDescriptor { return fd }
|
func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd }
|
||||||
func (fd *File) Parent() pref.Descriptor { return nil }
|
func (fd *File) Parent() protoreflect.Descriptor { return nil }
|
||||||
func (fd *File) Index() int { return 0 }
|
func (fd *File) Index() int { return 0 }
|
||||||
func (fd *File) Syntax() pref.Syntax { return fd.L1.Syntax }
|
func (fd *File) Syntax() protoreflect.Syntax { return fd.L1.Syntax }
|
||||||
func (fd *File) Name() pref.Name { return fd.L1.Package.Name() }
|
func (fd *File) Name() protoreflect.Name { return fd.L1.Package.Name() }
|
||||||
func (fd *File) FullName() pref.FullName { return fd.L1.Package }
|
func (fd *File) FullName() protoreflect.FullName { return fd.L1.Package }
|
||||||
func (fd *File) IsPlaceholder() bool { return false }
|
func (fd *File) IsPlaceholder() bool { return false }
|
||||||
func (fd *File) Options() pref.ProtoMessage {
|
func (fd *File) Options() protoreflect.ProtoMessage {
|
||||||
if f := fd.lazyInit().Options; f != nil {
|
if f := fd.lazyInit().Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.File
|
return descopts.File
|
||||||
}
|
}
|
||||||
func (fd *File) Path() string { return fd.L1.Path }
|
func (fd *File) Path() string { return fd.L1.Path }
|
||||||
func (fd *File) Package() pref.FullName { return fd.L1.Package }
|
func (fd *File) Package() protoreflect.FullName { return fd.L1.Package }
|
||||||
func (fd *File) Imports() pref.FileImports { return &fd.lazyInit().Imports }
|
func (fd *File) Imports() protoreflect.FileImports { return &fd.lazyInit().Imports }
|
||||||
func (fd *File) Enums() pref.EnumDescriptors { return &fd.L1.Enums }
|
func (fd *File) Enums() protoreflect.EnumDescriptors { return &fd.L1.Enums }
|
||||||
func (fd *File) Messages() pref.MessageDescriptors { return &fd.L1.Messages }
|
func (fd *File) Messages() protoreflect.MessageDescriptors { return &fd.L1.Messages }
|
||||||
func (fd *File) Extensions() pref.ExtensionDescriptors { return &fd.L1.Extensions }
|
func (fd *File) Extensions() protoreflect.ExtensionDescriptors { return &fd.L1.Extensions }
|
||||||
func (fd *File) Services() pref.ServiceDescriptors { return &fd.L1.Services }
|
func (fd *File) Services() protoreflect.ServiceDescriptors { return &fd.L1.Services }
|
||||||
func (fd *File) SourceLocations() pref.SourceLocations { return &fd.lazyInit().Locations }
|
func (fd *File) SourceLocations() protoreflect.SourceLocations { return &fd.lazyInit().Locations }
|
||||||
func (fd *File) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
|
func (fd *File) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
|
||||||
func (fd *File) ProtoType(pref.FileDescriptor) {}
|
func (fd *File) ProtoType(protoreflect.FileDescriptor) {}
|
||||||
func (fd *File) ProtoInternal(pragma.DoNotImplement) {}
|
func (fd *File) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
|
|
||||||
func (fd *File) lazyInit() *FileL2 {
|
func (fd *File) lazyInit() *FileL2 {
|
||||||
if atomic.LoadUint32(&fd.once) == 0 {
|
if atomic.LoadUint32(&fd.once) == 0 {
|
||||||
@@ -119,7 +119,7 @@ type (
|
|||||||
eagerValues bool // controls whether EnumL2.Values is already populated
|
eagerValues bool // controls whether EnumL2.Values is already populated
|
||||||
}
|
}
|
||||||
EnumL2 struct {
|
EnumL2 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Values EnumValues
|
Values EnumValues
|
||||||
ReservedNames Names
|
ReservedNames Names
|
||||||
ReservedRanges EnumRanges
|
ReservedRanges EnumRanges
|
||||||
@@ -130,41 +130,41 @@ type (
|
|||||||
L1 EnumValueL1
|
L1 EnumValueL1
|
||||||
}
|
}
|
||||||
EnumValueL1 struct {
|
EnumValueL1 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Number pref.EnumNumber
|
Number protoreflect.EnumNumber
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ed *Enum) Options() pref.ProtoMessage {
|
func (ed *Enum) Options() protoreflect.ProtoMessage {
|
||||||
if f := ed.lazyInit().Options; f != nil {
|
if f := ed.lazyInit().Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Enum
|
return descopts.Enum
|
||||||
}
|
}
|
||||||
func (ed *Enum) Values() pref.EnumValueDescriptors {
|
func (ed *Enum) Values() protoreflect.EnumValueDescriptors {
|
||||||
if ed.L1.eagerValues {
|
if ed.L1.eagerValues {
|
||||||
return &ed.L2.Values
|
return &ed.L2.Values
|
||||||
}
|
}
|
||||||
return &ed.lazyInit().Values
|
return &ed.lazyInit().Values
|
||||||
}
|
}
|
||||||
func (ed *Enum) ReservedNames() pref.Names { return &ed.lazyInit().ReservedNames }
|
func (ed *Enum) ReservedNames() protoreflect.Names { return &ed.lazyInit().ReservedNames }
|
||||||
func (ed *Enum) ReservedRanges() pref.EnumRanges { return &ed.lazyInit().ReservedRanges }
|
func (ed *Enum) ReservedRanges() protoreflect.EnumRanges { return &ed.lazyInit().ReservedRanges }
|
||||||
func (ed *Enum) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) }
|
func (ed *Enum) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) }
|
||||||
func (ed *Enum) ProtoType(pref.EnumDescriptor) {}
|
func (ed *Enum) ProtoType(protoreflect.EnumDescriptor) {}
|
||||||
func (ed *Enum) lazyInit() *EnumL2 {
|
func (ed *Enum) lazyInit() *EnumL2 {
|
||||||
ed.L0.ParentFile.lazyInit() // implicitly initializes L2
|
ed.L0.ParentFile.lazyInit() // implicitly initializes L2
|
||||||
return ed.L2
|
return ed.L2
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ed *EnumValue) Options() pref.ProtoMessage {
|
func (ed *EnumValue) Options() protoreflect.ProtoMessage {
|
||||||
if f := ed.L1.Options; f != nil {
|
if f := ed.L1.Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.EnumValue
|
return descopts.EnumValue
|
||||||
}
|
}
|
||||||
func (ed *EnumValue) Number() pref.EnumNumber { return ed.L1.Number }
|
func (ed *EnumValue) Number() protoreflect.EnumNumber { return ed.L1.Number }
|
||||||
func (ed *EnumValue) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) }
|
func (ed *EnumValue) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) }
|
||||||
func (ed *EnumValue) ProtoType(pref.EnumValueDescriptor) {}
|
func (ed *EnumValue) ProtoType(protoreflect.EnumValueDescriptor) {}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
Message struct {
|
Message struct {
|
||||||
@@ -180,14 +180,14 @@ type (
|
|||||||
IsMessageSet bool // promoted from google.protobuf.MessageOptions
|
IsMessageSet bool // promoted from google.protobuf.MessageOptions
|
||||||
}
|
}
|
||||||
MessageL2 struct {
|
MessageL2 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Fields Fields
|
Fields Fields
|
||||||
Oneofs Oneofs
|
Oneofs Oneofs
|
||||||
ReservedNames Names
|
ReservedNames Names
|
||||||
ReservedRanges FieldRanges
|
ReservedRanges FieldRanges
|
||||||
RequiredNumbers FieldNumbers // must be consistent with Fields.Cardinality
|
RequiredNumbers FieldNumbers // must be consistent with Fields.Cardinality
|
||||||
ExtensionRanges FieldRanges
|
ExtensionRanges FieldRanges
|
||||||
ExtensionRangeOptions []func() pref.ProtoMessage // must be same length as ExtensionRanges
|
ExtensionRangeOptions []func() protoreflect.ProtoMessage // must be same length as ExtensionRanges
|
||||||
}
|
}
|
||||||
|
|
||||||
Field struct {
|
Field struct {
|
||||||
@@ -195,10 +195,10 @@ type (
|
|||||||
L1 FieldL1
|
L1 FieldL1
|
||||||
}
|
}
|
||||||
FieldL1 struct {
|
FieldL1 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Number pref.FieldNumber
|
Number protoreflect.FieldNumber
|
||||||
Cardinality pref.Cardinality // must be consistent with Message.RequiredNumbers
|
Cardinality protoreflect.Cardinality // must be consistent with Message.RequiredNumbers
|
||||||
Kind pref.Kind
|
Kind protoreflect.Kind
|
||||||
StringName stringName
|
StringName stringName
|
||||||
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
||||||
IsWeak bool // promoted from google.protobuf.FieldOptions
|
IsWeak bool // promoted from google.protobuf.FieldOptions
|
||||||
@@ -207,9 +207,9 @@ type (
|
|||||||
HasEnforceUTF8 bool // promoted from google.protobuf.FieldOptions
|
HasEnforceUTF8 bool // promoted from google.protobuf.FieldOptions
|
||||||
EnforceUTF8 bool // promoted from google.protobuf.FieldOptions
|
EnforceUTF8 bool // promoted from google.protobuf.FieldOptions
|
||||||
Default defaultValue
|
Default defaultValue
|
||||||
ContainingOneof pref.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
||||||
Enum pref.EnumDescriptor
|
Enum protoreflect.EnumDescriptor
|
||||||
Message pref.MessageDescriptor
|
Message protoreflect.MessageDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
Oneof struct {
|
Oneof struct {
|
||||||
@@ -217,35 +217,35 @@ type (
|
|||||||
L1 OneofL1
|
L1 OneofL1
|
||||||
}
|
}
|
||||||
OneofL1 struct {
|
OneofL1 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Fields OneofFields // must be consistent with Message.Fields.ContainingOneof
|
Fields OneofFields // must be consistent with Message.Fields.ContainingOneof
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (md *Message) Options() pref.ProtoMessage {
|
func (md *Message) Options() protoreflect.ProtoMessage {
|
||||||
if f := md.lazyInit().Options; f != nil {
|
if f := md.lazyInit().Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Message
|
return descopts.Message
|
||||||
}
|
}
|
||||||
func (md *Message) IsMapEntry() bool { return md.L1.IsMapEntry }
|
func (md *Message) IsMapEntry() bool { return md.L1.IsMapEntry }
|
||||||
func (md *Message) Fields() pref.FieldDescriptors { return &md.lazyInit().Fields }
|
func (md *Message) Fields() protoreflect.FieldDescriptors { return &md.lazyInit().Fields }
|
||||||
func (md *Message) Oneofs() pref.OneofDescriptors { return &md.lazyInit().Oneofs }
|
func (md *Message) Oneofs() protoreflect.OneofDescriptors { return &md.lazyInit().Oneofs }
|
||||||
func (md *Message) ReservedNames() pref.Names { return &md.lazyInit().ReservedNames }
|
func (md *Message) ReservedNames() protoreflect.Names { return &md.lazyInit().ReservedNames }
|
||||||
func (md *Message) ReservedRanges() pref.FieldRanges { return &md.lazyInit().ReservedRanges }
|
func (md *Message) ReservedRanges() protoreflect.FieldRanges { return &md.lazyInit().ReservedRanges }
|
||||||
func (md *Message) RequiredNumbers() pref.FieldNumbers { return &md.lazyInit().RequiredNumbers }
|
func (md *Message) RequiredNumbers() protoreflect.FieldNumbers { return &md.lazyInit().RequiredNumbers }
|
||||||
func (md *Message) ExtensionRanges() pref.FieldRanges { return &md.lazyInit().ExtensionRanges }
|
func (md *Message) ExtensionRanges() protoreflect.FieldRanges { return &md.lazyInit().ExtensionRanges }
|
||||||
func (md *Message) ExtensionRangeOptions(i int) pref.ProtoMessage {
|
func (md *Message) ExtensionRangeOptions(i int) protoreflect.ProtoMessage {
|
||||||
if f := md.lazyInit().ExtensionRangeOptions[i]; f != nil {
|
if f := md.lazyInit().ExtensionRangeOptions[i]; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.ExtensionRange
|
return descopts.ExtensionRange
|
||||||
}
|
}
|
||||||
func (md *Message) Enums() pref.EnumDescriptors { return &md.L1.Enums }
|
func (md *Message) Enums() protoreflect.EnumDescriptors { return &md.L1.Enums }
|
||||||
func (md *Message) Messages() pref.MessageDescriptors { return &md.L1.Messages }
|
func (md *Message) Messages() protoreflect.MessageDescriptors { return &md.L1.Messages }
|
||||||
func (md *Message) Extensions() pref.ExtensionDescriptors { return &md.L1.Extensions }
|
func (md *Message) Extensions() protoreflect.ExtensionDescriptors { return &md.L1.Extensions }
|
||||||
func (md *Message) ProtoType(pref.MessageDescriptor) {}
|
func (md *Message) ProtoType(protoreflect.MessageDescriptor) {}
|
||||||
func (md *Message) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) }
|
func (md *Message) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) }
|
||||||
func (md *Message) lazyInit() *MessageL2 {
|
func (md *Message) lazyInit() *MessageL2 {
|
||||||
md.L0.ParentFile.lazyInit() // implicitly initializes L2
|
md.L0.ParentFile.lazyInit() // implicitly initializes L2
|
||||||
return md.L2
|
return md.L2
|
||||||
@@ -260,28 +260,28 @@ func (md *Message) IsMessageSet() bool {
|
|||||||
return md.L1.IsMessageSet
|
return md.L1.IsMessageSet
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fd *Field) Options() pref.ProtoMessage {
|
func (fd *Field) Options() protoreflect.ProtoMessage {
|
||||||
if f := fd.L1.Options; f != nil {
|
if f := fd.L1.Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Field
|
return descopts.Field
|
||||||
}
|
}
|
||||||
func (fd *Field) Number() pref.FieldNumber { return fd.L1.Number }
|
func (fd *Field) Number() protoreflect.FieldNumber { return fd.L1.Number }
|
||||||
func (fd *Field) Cardinality() pref.Cardinality { return fd.L1.Cardinality }
|
func (fd *Field) Cardinality() protoreflect.Cardinality { return fd.L1.Cardinality }
|
||||||
func (fd *Field) Kind() pref.Kind { return fd.L1.Kind }
|
func (fd *Field) Kind() protoreflect.Kind { return fd.L1.Kind }
|
||||||
func (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON }
|
func (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON }
|
||||||
func (fd *Field) JSONName() string { return fd.L1.StringName.getJSON(fd) }
|
func (fd *Field) JSONName() string { return fd.L1.StringName.getJSON(fd) }
|
||||||
func (fd *Field) TextName() string { return fd.L1.StringName.getText(fd) }
|
func (fd *Field) TextName() string { return fd.L1.StringName.getText(fd) }
|
||||||
func (fd *Field) HasPresence() bool {
|
func (fd *Field) HasPresence() bool {
|
||||||
return fd.L1.Cardinality != pref.Repeated && (fd.L0.ParentFile.L1.Syntax == pref.Proto2 || fd.L1.Message != nil || fd.L1.ContainingOneof != nil)
|
return fd.L1.Cardinality != protoreflect.Repeated && (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 || fd.L1.Message != nil || fd.L1.ContainingOneof != nil)
|
||||||
}
|
}
|
||||||
func (fd *Field) HasOptionalKeyword() bool {
|
func (fd *Field) HasOptionalKeyword() bool {
|
||||||
return (fd.L0.ParentFile.L1.Syntax == pref.Proto2 && fd.L1.Cardinality == pref.Optional && fd.L1.ContainingOneof == nil) || fd.L1.IsProto3Optional
|
return (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Optional && fd.L1.ContainingOneof == nil) || fd.L1.IsProto3Optional
|
||||||
}
|
}
|
||||||
func (fd *Field) IsPacked() bool {
|
func (fd *Field) IsPacked() bool {
|
||||||
if !fd.L1.HasPacked && fd.L0.ParentFile.L1.Syntax != pref.Proto2 && fd.L1.Cardinality == pref.Repeated {
|
if !fd.L1.HasPacked && fd.L0.ParentFile.L1.Syntax != protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Repeated {
|
||||||
switch fd.L1.Kind {
|
switch fd.L1.Kind {
|
||||||
case pref.StringKind, pref.BytesKind, pref.MessageKind, pref.GroupKind:
|
case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
default:
|
default:
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -290,40 +290,40 @@ func (fd *Field) IsPacked() bool {
|
|||||||
}
|
}
|
||||||
func (fd *Field) IsExtension() bool { return false }
|
func (fd *Field) IsExtension() bool { return false }
|
||||||
func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
|
func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
|
||||||
func (fd *Field) IsList() bool { return fd.Cardinality() == pref.Repeated && !fd.IsMap() }
|
func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
|
||||||
func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
|
func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
|
||||||
func (fd *Field) MapKey() pref.FieldDescriptor {
|
func (fd *Field) MapKey() protoreflect.FieldDescriptor {
|
||||||
if !fd.IsMap() {
|
if !fd.IsMap() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fd.Message().Fields().ByNumber(genid.MapEntry_Key_field_number)
|
return fd.Message().Fields().ByNumber(genid.MapEntry_Key_field_number)
|
||||||
}
|
}
|
||||||
func (fd *Field) MapValue() pref.FieldDescriptor {
|
func (fd *Field) MapValue() protoreflect.FieldDescriptor {
|
||||||
if !fd.IsMap() {
|
if !fd.IsMap() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fd.Message().Fields().ByNumber(genid.MapEntry_Value_field_number)
|
return fd.Message().Fields().ByNumber(genid.MapEntry_Value_field_number)
|
||||||
}
|
}
|
||||||
func (fd *Field) HasDefault() bool { return fd.L1.Default.has }
|
func (fd *Field) HasDefault() bool { return fd.L1.Default.has }
|
||||||
func (fd *Field) Default() pref.Value { return fd.L1.Default.get(fd) }
|
func (fd *Field) Default() protoreflect.Value { return fd.L1.Default.get(fd) }
|
||||||
func (fd *Field) DefaultEnumValue() pref.EnumValueDescriptor { return fd.L1.Default.enum }
|
func (fd *Field) DefaultEnumValue() protoreflect.EnumValueDescriptor { return fd.L1.Default.enum }
|
||||||
func (fd *Field) ContainingOneof() pref.OneofDescriptor { return fd.L1.ContainingOneof }
|
func (fd *Field) ContainingOneof() protoreflect.OneofDescriptor { return fd.L1.ContainingOneof }
|
||||||
func (fd *Field) ContainingMessage() pref.MessageDescriptor {
|
func (fd *Field) ContainingMessage() protoreflect.MessageDescriptor {
|
||||||
return fd.L0.Parent.(pref.MessageDescriptor)
|
return fd.L0.Parent.(protoreflect.MessageDescriptor)
|
||||||
}
|
}
|
||||||
func (fd *Field) Enum() pref.EnumDescriptor {
|
func (fd *Field) Enum() protoreflect.EnumDescriptor {
|
||||||
return fd.L1.Enum
|
return fd.L1.Enum
|
||||||
}
|
}
|
||||||
func (fd *Field) Message() pref.MessageDescriptor {
|
func (fd *Field) Message() protoreflect.MessageDescriptor {
|
||||||
if fd.L1.IsWeak {
|
if fd.L1.IsWeak {
|
||||||
if d, _ := protoregistry.GlobalFiles.FindDescriptorByName(fd.L1.Message.FullName()); d != nil {
|
if d, _ := protoregistry.GlobalFiles.FindDescriptorByName(fd.L1.Message.FullName()); d != nil {
|
||||||
return d.(pref.MessageDescriptor)
|
return d.(protoreflect.MessageDescriptor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fd.L1.Message
|
return fd.L1.Message
|
||||||
}
|
}
|
||||||
func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
|
func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
|
||||||
func (fd *Field) ProtoType(pref.FieldDescriptor) {}
|
func (fd *Field) ProtoType(protoreflect.FieldDescriptor) {}
|
||||||
|
|
||||||
// EnforceUTF8 is a pseudo-internal API to determine whether to enforce UTF-8
|
// EnforceUTF8 is a pseudo-internal API to determine whether to enforce UTF-8
|
||||||
// validation for the string field. This exists for Google-internal use only
|
// validation for the string field. This exists for Google-internal use only
|
||||||
@@ -336,21 +336,21 @@ func (fd *Field) EnforceUTF8() bool {
|
|||||||
if fd.L1.HasEnforceUTF8 {
|
if fd.L1.HasEnforceUTF8 {
|
||||||
return fd.L1.EnforceUTF8
|
return fd.L1.EnforceUTF8
|
||||||
}
|
}
|
||||||
return fd.L0.ParentFile.L1.Syntax == pref.Proto3
|
return fd.L0.ParentFile.L1.Syntax == protoreflect.Proto3
|
||||||
}
|
}
|
||||||
|
|
||||||
func (od *Oneof) IsSynthetic() bool {
|
func (od *Oneof) IsSynthetic() bool {
|
||||||
return od.L0.ParentFile.L1.Syntax == pref.Proto3 && len(od.L1.Fields.List) == 1 && od.L1.Fields.List[0].HasOptionalKeyword()
|
return od.L0.ParentFile.L1.Syntax == protoreflect.Proto3 && len(od.L1.Fields.List) == 1 && od.L1.Fields.List[0].HasOptionalKeyword()
|
||||||
}
|
}
|
||||||
func (od *Oneof) Options() pref.ProtoMessage {
|
func (od *Oneof) Options() protoreflect.ProtoMessage {
|
||||||
if f := od.L1.Options; f != nil {
|
if f := od.L1.Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Oneof
|
return descopts.Oneof
|
||||||
}
|
}
|
||||||
func (od *Oneof) Fields() pref.FieldDescriptors { return &od.L1.Fields }
|
func (od *Oneof) Fields() protoreflect.FieldDescriptors { return &od.L1.Fields }
|
||||||
func (od *Oneof) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, od) }
|
func (od *Oneof) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, od) }
|
||||||
func (od *Oneof) ProtoType(pref.OneofDescriptor) {}
|
func (od *Oneof) ProtoType(protoreflect.OneofDescriptor) {}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
Extension struct {
|
Extension struct {
|
||||||
@@ -359,55 +359,57 @@ type (
|
|||||||
L2 *ExtensionL2 // protected by fileDesc.once
|
L2 *ExtensionL2 // protected by fileDesc.once
|
||||||
}
|
}
|
||||||
ExtensionL1 struct {
|
ExtensionL1 struct {
|
||||||
Number pref.FieldNumber
|
Number protoreflect.FieldNumber
|
||||||
Extendee pref.MessageDescriptor
|
Extendee protoreflect.MessageDescriptor
|
||||||
Cardinality pref.Cardinality
|
Cardinality protoreflect.Cardinality
|
||||||
Kind pref.Kind
|
Kind protoreflect.Kind
|
||||||
}
|
}
|
||||||
ExtensionL2 struct {
|
ExtensionL2 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
StringName stringName
|
StringName stringName
|
||||||
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
||||||
IsPacked bool // promoted from google.protobuf.FieldOptions
|
IsPacked bool // promoted from google.protobuf.FieldOptions
|
||||||
Default defaultValue
|
Default defaultValue
|
||||||
Enum pref.EnumDescriptor
|
Enum protoreflect.EnumDescriptor
|
||||||
Message pref.MessageDescriptor
|
Message protoreflect.MessageDescriptor
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (xd *Extension) Options() pref.ProtoMessage {
|
func (xd *Extension) Options() protoreflect.ProtoMessage {
|
||||||
if f := xd.lazyInit().Options; f != nil {
|
if f := xd.lazyInit().Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Field
|
return descopts.Field
|
||||||
}
|
}
|
||||||
func (xd *Extension) Number() pref.FieldNumber { return xd.L1.Number }
|
func (xd *Extension) Number() protoreflect.FieldNumber { return xd.L1.Number }
|
||||||
func (xd *Extension) Cardinality() pref.Cardinality { return xd.L1.Cardinality }
|
func (xd *Extension) Cardinality() protoreflect.Cardinality { return xd.L1.Cardinality }
|
||||||
func (xd *Extension) Kind() pref.Kind { return xd.L1.Kind }
|
func (xd *Extension) Kind() protoreflect.Kind { return xd.L1.Kind }
|
||||||
func (xd *Extension) HasJSONName() bool { return xd.lazyInit().StringName.hasJSON }
|
func (xd *Extension) HasJSONName() bool { return xd.lazyInit().StringName.hasJSON }
|
||||||
func (xd *Extension) JSONName() string { return xd.lazyInit().StringName.getJSON(xd) }
|
func (xd *Extension) JSONName() string { return xd.lazyInit().StringName.getJSON(xd) }
|
||||||
func (xd *Extension) TextName() string { return xd.lazyInit().StringName.getText(xd) }
|
func (xd *Extension) TextName() string { return xd.lazyInit().StringName.getText(xd) }
|
||||||
func (xd *Extension) HasPresence() bool { return xd.L1.Cardinality != pref.Repeated }
|
func (xd *Extension) HasPresence() bool { return xd.L1.Cardinality != protoreflect.Repeated }
|
||||||
func (xd *Extension) HasOptionalKeyword() bool {
|
func (xd *Extension) HasOptionalKeyword() bool {
|
||||||
return (xd.L0.ParentFile.L1.Syntax == pref.Proto2 && xd.L1.Cardinality == pref.Optional) || xd.lazyInit().IsProto3Optional
|
return (xd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && xd.L1.Cardinality == protoreflect.Optional) || xd.lazyInit().IsProto3Optional
|
||||||
}
|
}
|
||||||
func (xd *Extension) IsPacked() bool { return xd.lazyInit().IsPacked }
|
func (xd *Extension) IsPacked() bool { return xd.lazyInit().IsPacked }
|
||||||
func (xd *Extension) IsExtension() bool { return true }
|
func (xd *Extension) IsExtension() bool { return true }
|
||||||
func (xd *Extension) IsWeak() bool { return false }
|
func (xd *Extension) IsWeak() bool { return false }
|
||||||
func (xd *Extension) IsList() bool { return xd.Cardinality() == pref.Repeated }
|
func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated }
|
||||||
func (xd *Extension) IsMap() bool { return false }
|
func (xd *Extension) IsMap() bool { return false }
|
||||||
func (xd *Extension) MapKey() pref.FieldDescriptor { return nil }
|
func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil }
|
||||||
func (xd *Extension) MapValue() pref.FieldDescriptor { return nil }
|
func (xd *Extension) MapValue() protoreflect.FieldDescriptor { return nil }
|
||||||
func (xd *Extension) HasDefault() bool { return xd.lazyInit().Default.has }
|
func (xd *Extension) HasDefault() bool { return xd.lazyInit().Default.has }
|
||||||
func (xd *Extension) Default() pref.Value { return xd.lazyInit().Default.get(xd) }
|
func (xd *Extension) Default() protoreflect.Value { return xd.lazyInit().Default.get(xd) }
|
||||||
func (xd *Extension) DefaultEnumValue() pref.EnumValueDescriptor { return xd.lazyInit().Default.enum }
|
func (xd *Extension) DefaultEnumValue() protoreflect.EnumValueDescriptor {
|
||||||
func (xd *Extension) ContainingOneof() pref.OneofDescriptor { return nil }
|
return xd.lazyInit().Default.enum
|
||||||
func (xd *Extension) ContainingMessage() pref.MessageDescriptor { return xd.L1.Extendee }
|
}
|
||||||
func (xd *Extension) Enum() pref.EnumDescriptor { return xd.lazyInit().Enum }
|
func (xd *Extension) ContainingOneof() protoreflect.OneofDescriptor { return nil }
|
||||||
func (xd *Extension) Message() pref.MessageDescriptor { return xd.lazyInit().Message }
|
func (xd *Extension) ContainingMessage() protoreflect.MessageDescriptor { return xd.L1.Extendee }
|
||||||
func (xd *Extension) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, xd) }
|
func (xd *Extension) Enum() protoreflect.EnumDescriptor { return xd.lazyInit().Enum }
|
||||||
func (xd *Extension) ProtoType(pref.FieldDescriptor) {}
|
func (xd *Extension) Message() protoreflect.MessageDescriptor { return xd.lazyInit().Message }
|
||||||
func (xd *Extension) ProtoInternal(pragma.DoNotImplement) {}
|
func (xd *Extension) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, xd) }
|
||||||
|
func (xd *Extension) ProtoType(protoreflect.FieldDescriptor) {}
|
||||||
|
func (xd *Extension) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
func (xd *Extension) lazyInit() *ExtensionL2 {
|
func (xd *Extension) lazyInit() *ExtensionL2 {
|
||||||
xd.L0.ParentFile.lazyInit() // implicitly initializes L2
|
xd.L0.ParentFile.lazyInit() // implicitly initializes L2
|
||||||
return xd.L2
|
return xd.L2
|
||||||
@@ -421,7 +423,7 @@ type (
|
|||||||
}
|
}
|
||||||
ServiceL1 struct{}
|
ServiceL1 struct{}
|
||||||
ServiceL2 struct {
|
ServiceL2 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Methods Methods
|
Methods Methods
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -430,48 +432,48 @@ type (
|
|||||||
L1 MethodL1
|
L1 MethodL1
|
||||||
}
|
}
|
||||||
MethodL1 struct {
|
MethodL1 struct {
|
||||||
Options func() pref.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Input pref.MessageDescriptor
|
Input protoreflect.MessageDescriptor
|
||||||
Output pref.MessageDescriptor
|
Output protoreflect.MessageDescriptor
|
||||||
IsStreamingClient bool
|
IsStreamingClient bool
|
||||||
IsStreamingServer bool
|
IsStreamingServer bool
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (sd *Service) Options() pref.ProtoMessage {
|
func (sd *Service) Options() protoreflect.ProtoMessage {
|
||||||
if f := sd.lazyInit().Options; f != nil {
|
if f := sd.lazyInit().Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Service
|
return descopts.Service
|
||||||
}
|
}
|
||||||
func (sd *Service) Methods() pref.MethodDescriptors { return &sd.lazyInit().Methods }
|
func (sd *Service) Methods() protoreflect.MethodDescriptors { return &sd.lazyInit().Methods }
|
||||||
func (sd *Service) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, sd) }
|
func (sd *Service) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, sd) }
|
||||||
func (sd *Service) ProtoType(pref.ServiceDescriptor) {}
|
func (sd *Service) ProtoType(protoreflect.ServiceDescriptor) {}
|
||||||
func (sd *Service) ProtoInternal(pragma.DoNotImplement) {}
|
func (sd *Service) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
func (sd *Service) lazyInit() *ServiceL2 {
|
func (sd *Service) lazyInit() *ServiceL2 {
|
||||||
sd.L0.ParentFile.lazyInit() // implicitly initializes L2
|
sd.L0.ParentFile.lazyInit() // implicitly initializes L2
|
||||||
return sd.L2
|
return sd.L2
|
||||||
}
|
}
|
||||||
|
|
||||||
func (md *Method) Options() pref.ProtoMessage {
|
func (md *Method) Options() protoreflect.ProtoMessage {
|
||||||
if f := md.L1.Options; f != nil {
|
if f := md.L1.Options; f != nil {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
return descopts.Method
|
return descopts.Method
|
||||||
}
|
}
|
||||||
func (md *Method) Input() pref.MessageDescriptor { return md.L1.Input }
|
func (md *Method) Input() protoreflect.MessageDescriptor { return md.L1.Input }
|
||||||
func (md *Method) Output() pref.MessageDescriptor { return md.L1.Output }
|
func (md *Method) Output() protoreflect.MessageDescriptor { return md.L1.Output }
|
||||||
func (md *Method) IsStreamingClient() bool { return md.L1.IsStreamingClient }
|
func (md *Method) IsStreamingClient() bool { return md.L1.IsStreamingClient }
|
||||||
func (md *Method) IsStreamingServer() bool { return md.L1.IsStreamingServer }
|
func (md *Method) IsStreamingServer() bool { return md.L1.IsStreamingServer }
|
||||||
func (md *Method) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) }
|
func (md *Method) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) }
|
||||||
func (md *Method) ProtoType(pref.MethodDescriptor) {}
|
func (md *Method) ProtoType(protoreflect.MethodDescriptor) {}
|
||||||
func (md *Method) ProtoInternal(pragma.DoNotImplement) {}
|
func (md *Method) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
|
|
||||||
// Surrogate files are can be used to create standalone descriptors
|
// Surrogate files are can be used to create standalone descriptors
|
||||||
// where the syntax is only information derived from the parent file.
|
// where the syntax is only information derived from the parent file.
|
||||||
var (
|
var (
|
||||||
SurrogateProto2 = &File{L1: FileL1{Syntax: pref.Proto2}, L2: &FileL2{}}
|
SurrogateProto2 = &File{L1: FileL1{Syntax: protoreflect.Proto2}, L2: &FileL2{}}
|
||||||
SurrogateProto3 = &File{L1: FileL1{Syntax: pref.Proto3}, L2: &FileL2{}}
|
SurrogateProto3 = &File{L1: FileL1{Syntax: protoreflect.Proto3}, L2: &FileL2{}}
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@@ -479,24 +481,24 @@ type (
|
|||||||
L0 BaseL0
|
L0 BaseL0
|
||||||
}
|
}
|
||||||
BaseL0 struct {
|
BaseL0 struct {
|
||||||
FullName pref.FullName // must be populated
|
FullName protoreflect.FullName // must be populated
|
||||||
ParentFile *File // must be populated
|
ParentFile *File // must be populated
|
||||||
Parent pref.Descriptor
|
Parent protoreflect.Descriptor
|
||||||
Index int
|
Index int
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (d *Base) Name() pref.Name { return d.L0.FullName.Name() }
|
func (d *Base) Name() protoreflect.Name { return d.L0.FullName.Name() }
|
||||||
func (d *Base) FullName() pref.FullName { return d.L0.FullName }
|
func (d *Base) FullName() protoreflect.FullName { return d.L0.FullName }
|
||||||
func (d *Base) ParentFile() pref.FileDescriptor {
|
func (d *Base) ParentFile() protoreflect.FileDescriptor {
|
||||||
if d.L0.ParentFile == SurrogateProto2 || d.L0.ParentFile == SurrogateProto3 {
|
if d.L0.ParentFile == SurrogateProto2 || d.L0.ParentFile == SurrogateProto3 {
|
||||||
return nil // surrogate files are not real parents
|
return nil // surrogate files are not real parents
|
||||||
}
|
}
|
||||||
return d.L0.ParentFile
|
return d.L0.ParentFile
|
||||||
}
|
}
|
||||||
func (d *Base) Parent() pref.Descriptor { return d.L0.Parent }
|
func (d *Base) Parent() protoreflect.Descriptor { return d.L0.Parent }
|
||||||
func (d *Base) Index() int { return d.L0.Index }
|
func (d *Base) Index() int { return d.L0.Index }
|
||||||
func (d *Base) Syntax() pref.Syntax { return d.L0.ParentFile.Syntax() }
|
func (d *Base) Syntax() protoreflect.Syntax { return d.L0.ParentFile.Syntax() }
|
||||||
func (d *Base) IsPlaceholder() bool { return false }
|
func (d *Base) IsPlaceholder() bool { return false }
|
||||||
func (d *Base) ProtoInternal(pragma.DoNotImplement) {}
|
func (d *Base) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
|
|
||||||
@@ -513,7 +515,7 @@ func (s *stringName) InitJSON(name string) {
|
|||||||
s.nameJSON = name
|
s.nameJSON = name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stringName) lazyInit(fd pref.FieldDescriptor) *stringName {
|
func (s *stringName) lazyInit(fd protoreflect.FieldDescriptor) *stringName {
|
||||||
s.once.Do(func() {
|
s.once.Do(func() {
|
||||||
if fd.IsExtension() {
|
if fd.IsExtension() {
|
||||||
// For extensions, JSON and text are formatted the same way.
|
// For extensions, JSON and text are formatted the same way.
|
||||||
@@ -533,7 +535,7 @@ func (s *stringName) lazyInit(fd pref.FieldDescriptor) *stringName {
|
|||||||
|
|
||||||
// Format the text name.
|
// Format the text name.
|
||||||
s.nameText = string(fd.Name())
|
s.nameText = string(fd.Name())
|
||||||
if fd.Kind() == pref.GroupKind {
|
if fd.Kind() == protoreflect.GroupKind {
|
||||||
s.nameText = string(fd.Message().Name())
|
s.nameText = string(fd.Message().Name())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,10 +543,10 @@ func (s *stringName) lazyInit(fd pref.FieldDescriptor) *stringName {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stringName) getJSON(fd pref.FieldDescriptor) string { return s.lazyInit(fd).nameJSON }
|
func (s *stringName) getJSON(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameJSON }
|
||||||
func (s *stringName) getText(fd pref.FieldDescriptor) string { return s.lazyInit(fd).nameText }
|
func (s *stringName) getText(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameText }
|
||||||
|
|
||||||
func DefaultValue(v pref.Value, ev pref.EnumValueDescriptor) defaultValue {
|
func DefaultValue(v protoreflect.Value, ev protoreflect.EnumValueDescriptor) defaultValue {
|
||||||
dv := defaultValue{has: v.IsValid(), val: v, enum: ev}
|
dv := defaultValue{has: v.IsValid(), val: v, enum: ev}
|
||||||
if b, ok := v.Interface().([]byte); ok {
|
if b, ok := v.Interface().([]byte); ok {
|
||||||
// Store a copy of the default bytes, so that we can detect
|
// Store a copy of the default bytes, so that we can detect
|
||||||
@@ -554,9 +556,9 @@ func DefaultValue(v pref.Value, ev pref.EnumValueDescriptor) defaultValue {
|
|||||||
return dv
|
return dv
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalDefault(b []byte, k pref.Kind, pf *File, ed pref.EnumDescriptor) defaultValue {
|
func unmarshalDefault(b []byte, k protoreflect.Kind, pf *File, ed protoreflect.EnumDescriptor) defaultValue {
|
||||||
var evs pref.EnumValueDescriptors
|
var evs protoreflect.EnumValueDescriptors
|
||||||
if k == pref.EnumKind {
|
if k == protoreflect.EnumKind {
|
||||||
// If the enum is declared within the same file, be careful not to
|
// If the enum is declared within the same file, be careful not to
|
||||||
// blindly call the Values method, lest we bind ourselves in a deadlock.
|
// blindly call the Values method, lest we bind ourselves in a deadlock.
|
||||||
if e, ok := ed.(*Enum); ok && e.L0.ParentFile == pf {
|
if e, ok := ed.(*Enum); ok && e.L0.ParentFile == pf {
|
||||||
@@ -567,9 +569,9 @@ func unmarshalDefault(b []byte, k pref.Kind, pf *File, ed pref.EnumDescriptor) d
|
|||||||
|
|
||||||
// If we are unable to resolve the enum dependency, use a placeholder
|
// If we are unable to resolve the enum dependency, use a placeholder
|
||||||
// enum value since we will not be able to parse the default value.
|
// enum value since we will not be able to parse the default value.
|
||||||
if ed.IsPlaceholder() && pref.Name(b).IsValid() {
|
if ed.IsPlaceholder() && protoreflect.Name(b).IsValid() {
|
||||||
v := pref.ValueOfEnum(0)
|
v := protoreflect.ValueOfEnum(0)
|
||||||
ev := PlaceholderEnumValue(ed.FullName().Parent().Append(pref.Name(b)))
|
ev := PlaceholderEnumValue(ed.FullName().Parent().Append(protoreflect.Name(b)))
|
||||||
return DefaultValue(v, ev)
|
return DefaultValue(v, ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,41 +585,41 @@ func unmarshalDefault(b []byte, k pref.Kind, pf *File, ed pref.EnumDescriptor) d
|
|||||||
|
|
||||||
type defaultValue struct {
|
type defaultValue struct {
|
||||||
has bool
|
has bool
|
||||||
val pref.Value
|
val protoreflect.Value
|
||||||
enum pref.EnumValueDescriptor
|
enum protoreflect.EnumValueDescriptor
|
||||||
bytes []byte
|
bytes []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dv *defaultValue) get(fd pref.FieldDescriptor) pref.Value {
|
func (dv *defaultValue) get(fd protoreflect.FieldDescriptor) protoreflect.Value {
|
||||||
// Return the zero value as the default if unpopulated.
|
// Return the zero value as the default if unpopulated.
|
||||||
if !dv.has {
|
if !dv.has {
|
||||||
if fd.Cardinality() == pref.Repeated {
|
if fd.Cardinality() == protoreflect.Repeated {
|
||||||
return pref.Value{}
|
return protoreflect.Value{}
|
||||||
}
|
}
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
return pref.ValueOfBool(false)
|
return protoreflect.ValueOfBool(false)
|
||||||
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||||
return pref.ValueOfInt32(0)
|
return protoreflect.ValueOfInt32(0)
|
||||||
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
|
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
return pref.ValueOfInt64(0)
|
return protoreflect.ValueOfInt64(0)
|
||||||
case pref.Uint32Kind, pref.Fixed32Kind:
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||||
return pref.ValueOfUint32(0)
|
return protoreflect.ValueOfUint32(0)
|
||||||
case pref.Uint64Kind, pref.Fixed64Kind:
|
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
return pref.ValueOfUint64(0)
|
return protoreflect.ValueOfUint64(0)
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
return pref.ValueOfFloat32(0)
|
return protoreflect.ValueOfFloat32(0)
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
return pref.ValueOfFloat64(0)
|
return protoreflect.ValueOfFloat64(0)
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
return pref.ValueOfString("")
|
return protoreflect.ValueOfString("")
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
return pref.ValueOfBytes(nil)
|
return protoreflect.ValueOfBytes(nil)
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if evs := fd.Enum().Values(); evs.Len() > 0 {
|
if evs := fd.Enum().Values(); evs.Len() > 0 {
|
||||||
return pref.ValueOfEnum(evs.Get(0).Number())
|
return protoreflect.ValueOfEnum(evs.Get(0).Number())
|
||||||
}
|
}
|
||||||
return pref.ValueOfEnum(0)
|
return protoreflect.ValueOfEnum(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-18
@@ -10,7 +10,7 @@ import (
|
|||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/genid"
|
"google.golang.org/protobuf/internal/genid"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
// fileRaw is a data struct used when initializing a file descriptor from
|
// fileRaw is a data struct used when initializing a file descriptor from
|
||||||
@@ -95,7 +95,7 @@ func (fd *File) unmarshalSeed(b []byte) {
|
|||||||
sb := getBuilder()
|
sb := getBuilder()
|
||||||
defer putBuilder(sb)
|
defer putBuilder(sb)
|
||||||
|
|
||||||
var prevField pref.FieldNumber
|
var prevField protoreflect.FieldNumber
|
||||||
var numEnums, numMessages, numExtensions, numServices int
|
var numEnums, numMessages, numExtensions, numServices int
|
||||||
var posEnums, posMessages, posExtensions, posServices int
|
var posEnums, posMessages, posExtensions, posServices int
|
||||||
b0 := b
|
b0 := b
|
||||||
@@ -110,16 +110,16 @@ func (fd *File) unmarshalSeed(b []byte) {
|
|||||||
case genid.FileDescriptorProto_Syntax_field_number:
|
case genid.FileDescriptorProto_Syntax_field_number:
|
||||||
switch string(v) {
|
switch string(v) {
|
||||||
case "proto2":
|
case "proto2":
|
||||||
fd.L1.Syntax = pref.Proto2
|
fd.L1.Syntax = protoreflect.Proto2
|
||||||
case "proto3":
|
case "proto3":
|
||||||
fd.L1.Syntax = pref.Proto3
|
fd.L1.Syntax = protoreflect.Proto3
|
||||||
default:
|
default:
|
||||||
panic("invalid syntax")
|
panic("invalid syntax")
|
||||||
}
|
}
|
||||||
case genid.FileDescriptorProto_Name_field_number:
|
case genid.FileDescriptorProto_Name_field_number:
|
||||||
fd.L1.Path = sb.MakeString(v)
|
fd.L1.Path = sb.MakeString(v)
|
||||||
case genid.FileDescriptorProto_Package_field_number:
|
case genid.FileDescriptorProto_Package_field_number:
|
||||||
fd.L1.Package = pref.FullName(sb.MakeString(v))
|
fd.L1.Package = protoreflect.FullName(sb.MakeString(v))
|
||||||
case genid.FileDescriptorProto_EnumType_field_number:
|
case genid.FileDescriptorProto_EnumType_field_number:
|
||||||
if prevField != genid.FileDescriptorProto_EnumType_field_number {
|
if prevField != genid.FileDescriptorProto_EnumType_field_number {
|
||||||
if numEnums > 0 {
|
if numEnums > 0 {
|
||||||
@@ -163,7 +163,7 @@ func (fd *File) unmarshalSeed(b []byte) {
|
|||||||
|
|
||||||
// If syntax is missing, it is assumed to be proto2.
|
// If syntax is missing, it is assumed to be proto2.
|
||||||
if fd.L1.Syntax == 0 {
|
if fd.L1.Syntax == 0 {
|
||||||
fd.L1.Syntax = pref.Proto2
|
fd.L1.Syntax = protoreflect.Proto2
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must allocate all declarations before parsing each descriptor type
|
// Must allocate all declarations before parsing each descriptor type
|
||||||
@@ -219,7 +219,7 @@ func (fd *File) unmarshalSeed(b []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
ed.L0.ParentFile = pf
|
ed.L0.ParentFile = pf
|
||||||
ed.L0.Parent = pd
|
ed.L0.Parent = pd
|
||||||
ed.L0.Index = i
|
ed.L0.Index = i
|
||||||
@@ -271,12 +271,12 @@ func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Desc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
md.L0.ParentFile = pf
|
md.L0.ParentFile = pf
|
||||||
md.L0.Parent = pd
|
md.L0.Parent = pd
|
||||||
md.L0.Index = i
|
md.L0.Index = i
|
||||||
|
|
||||||
var prevField pref.FieldNumber
|
var prevField protoreflect.FieldNumber
|
||||||
var numEnums, numMessages, numExtensions int
|
var numEnums, numMessages, numExtensions int
|
||||||
var posEnums, posMessages, posExtensions int
|
var posEnums, posMessages, posExtensions int
|
||||||
b0 := b
|
b0 := b
|
||||||
@@ -387,7 +387,7 @@ func (md *Message) unmarshalSeedOptions(b []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
xd.L0.ParentFile = pf
|
xd.L0.ParentFile = pf
|
||||||
xd.L0.Parent = pd
|
xd.L0.Parent = pd
|
||||||
xd.L0.Index = i
|
xd.L0.Index = i
|
||||||
@@ -401,11 +401,11 @@ func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref
|
|||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.FieldDescriptorProto_Number_field_number:
|
case genid.FieldDescriptorProto_Number_field_number:
|
||||||
xd.L1.Number = pref.FieldNumber(v)
|
xd.L1.Number = protoreflect.FieldNumber(v)
|
||||||
case genid.FieldDescriptorProto_Label_field_number:
|
case genid.FieldDescriptorProto_Label_field_number:
|
||||||
xd.L1.Cardinality = pref.Cardinality(v)
|
xd.L1.Cardinality = protoreflect.Cardinality(v)
|
||||||
case genid.FieldDescriptorProto_Type_field_number:
|
case genid.FieldDescriptorProto_Type_field_number:
|
||||||
xd.L1.Kind = pref.Kind(v)
|
xd.L1.Kind = protoreflect.Kind(v)
|
||||||
}
|
}
|
||||||
case protowire.BytesType:
|
case protowire.BytesType:
|
||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
@@ -423,7 +423,7 @@ func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
sd.L0.ParentFile = pf
|
sd.L0.ParentFile = pf
|
||||||
sd.L0.Parent = pd
|
sd.L0.Parent = pd
|
||||||
sd.L0.Index = i
|
sd.L0.Index = i
|
||||||
@@ -459,13 +459,13 @@ func putBuilder(b *strs.Builder) {
|
|||||||
|
|
||||||
// makeFullName converts b to a protoreflect.FullName,
|
// makeFullName converts b to a protoreflect.FullName,
|
||||||
// where b must start with a leading dot.
|
// where b must start with a leading dot.
|
||||||
func makeFullName(sb *strs.Builder, b []byte) pref.FullName {
|
func makeFullName(sb *strs.Builder, b []byte) protoreflect.FullName {
|
||||||
if len(b) == 0 || b[0] != '.' {
|
if len(b) == 0 || b[0] != '.' {
|
||||||
panic("name reference must be fully qualified")
|
panic("name reference must be fully qualified")
|
||||||
}
|
}
|
||||||
return pref.FullName(sb.MakeString(b[1:]))
|
return protoreflect.FullName(sb.MakeString(b[1:]))
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendFullName(sb *strs.Builder, prefix pref.FullName, suffix []byte) pref.FullName {
|
func appendFullName(sb *strs.Builder, prefix protoreflect.FullName, suffix []byte) protoreflect.FullName {
|
||||||
return sb.AppendFullName(prefix, pref.Name(strs.UnsafeString(suffix)))
|
return sb.AppendFullName(prefix, protoreflect.Name(strs.UnsafeString(suffix)))
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-40
@@ -13,7 +13,7 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/genid"
|
"google.golang.org/protobuf/internal/genid"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (fd *File) lazyRawInit() {
|
func (fd *File) lazyRawInit() {
|
||||||
@@ -39,10 +39,10 @@ func (file *File) resolveMessages() {
|
|||||||
|
|
||||||
// Resolve message field dependency.
|
// Resolve message field dependency.
|
||||||
switch fd.L1.Kind {
|
switch fd.L1.Kind {
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
fd.L1.Enum = file.resolveEnumDependency(fd.L1.Enum, listFieldDeps, depIdx)
|
fd.L1.Enum = file.resolveEnumDependency(fd.L1.Enum, listFieldDeps, depIdx)
|
||||||
depIdx++
|
depIdx++
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx)
|
fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx)
|
||||||
depIdx++
|
depIdx++
|
||||||
}
|
}
|
||||||
@@ -62,10 +62,10 @@ func (file *File) resolveExtensions() {
|
|||||||
|
|
||||||
// Resolve extension field dependency.
|
// Resolve extension field dependency.
|
||||||
switch xd.L1.Kind {
|
switch xd.L1.Kind {
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
xd.L2.Enum = file.resolveEnumDependency(xd.L2.Enum, listExtDeps, depIdx)
|
xd.L2.Enum = file.resolveEnumDependency(xd.L2.Enum, listExtDeps, depIdx)
|
||||||
depIdx++
|
depIdx++
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
xd.L2.Message = file.resolveMessageDependency(xd.L2.Message, listExtDeps, depIdx)
|
xd.L2.Message = file.resolveMessageDependency(xd.L2.Message, listExtDeps, depIdx)
|
||||||
depIdx++
|
depIdx++
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ func (file *File) resolveServices() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (file *File) resolveEnumDependency(ed pref.EnumDescriptor, i, j int32) pref.EnumDescriptor {
|
func (file *File) resolveEnumDependency(ed protoreflect.EnumDescriptor, i, j int32) protoreflect.EnumDescriptor {
|
||||||
r := file.builder.FileRegistry
|
r := file.builder.FileRegistry
|
||||||
if r, ok := r.(resolverByIndex); ok {
|
if r, ok := r.(resolverByIndex); ok {
|
||||||
if ed2 := r.FindEnumByIndex(i, j, file.allEnums, file.allMessages); ed2 != nil {
|
if ed2 := r.FindEnumByIndex(i, j, file.allEnums, file.allMessages); ed2 != nil {
|
||||||
@@ -105,12 +105,12 @@ func (file *File) resolveEnumDependency(ed pref.EnumDescriptor, i, j int32) pref
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if d, _ := r.FindDescriptorByName(ed.FullName()); d != nil {
|
if d, _ := r.FindDescriptorByName(ed.FullName()); d != nil {
|
||||||
return d.(pref.EnumDescriptor)
|
return d.(protoreflect.EnumDescriptor)
|
||||||
}
|
}
|
||||||
return ed
|
return ed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (file *File) resolveMessageDependency(md pref.MessageDescriptor, i, j int32) pref.MessageDescriptor {
|
func (file *File) resolveMessageDependency(md protoreflect.MessageDescriptor, i, j int32) protoreflect.MessageDescriptor {
|
||||||
r := file.builder.FileRegistry
|
r := file.builder.FileRegistry
|
||||||
if r, ok := r.(resolverByIndex); ok {
|
if r, ok := r.(resolverByIndex); ok {
|
||||||
if md2 := r.FindMessageByIndex(i, j, file.allEnums, file.allMessages); md2 != nil {
|
if md2 := r.FindMessageByIndex(i, j, file.allEnums, file.allMessages); md2 != nil {
|
||||||
@@ -123,7 +123,7 @@ func (file *File) resolveMessageDependency(md pref.MessageDescriptor, i, j int32
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if d, _ := r.FindDescriptorByName(md.FullName()); d != nil {
|
if d, _ := r.FindDescriptorByName(md.FullName()); d != nil {
|
||||||
return d.(pref.MessageDescriptor)
|
return d.(protoreflect.MessageDescriptor)
|
||||||
}
|
}
|
||||||
return md
|
return md
|
||||||
}
|
}
|
||||||
@@ -158,7 +158,7 @@ func (fd *File) unmarshalFull(b []byte) {
|
|||||||
if imp == nil {
|
if imp == nil {
|
||||||
imp = PlaceholderFile(path)
|
imp = PlaceholderFile(path)
|
||||||
}
|
}
|
||||||
fd.L2.Imports = append(fd.L2.Imports, pref.FileImport{FileDescriptor: imp})
|
fd.L2.Imports = append(fd.L2.Imports, protoreflect.FileImport{FileDescriptor: imp})
|
||||||
case genid.FileDescriptorProto_EnumType_field_number:
|
case genid.FileDescriptorProto_EnumType_field_number:
|
||||||
fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb)
|
fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb)
|
||||||
enumIdx++
|
enumIdx++
|
||||||
@@ -199,7 +199,7 @@ func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
case genid.EnumDescriptorProto_Value_field_number:
|
case genid.EnumDescriptorProto_Value_field_number:
|
||||||
rawValues = append(rawValues, v)
|
rawValues = append(rawValues, v)
|
||||||
case genid.EnumDescriptorProto_ReservedName_field_number:
|
case genid.EnumDescriptorProto_ReservedName_field_number:
|
||||||
ed.L2.ReservedNames.List = append(ed.L2.ReservedNames.List, pref.Name(sb.MakeString(v)))
|
ed.L2.ReservedNames.List = append(ed.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v)))
|
||||||
case genid.EnumDescriptorProto_ReservedRange_field_number:
|
case genid.EnumDescriptorProto_ReservedRange_field_number:
|
||||||
ed.L2.ReservedRanges.List = append(ed.L2.ReservedRanges.List, unmarshalEnumReservedRange(v))
|
ed.L2.ReservedRanges.List = append(ed.L2.ReservedRanges.List, unmarshalEnumReservedRange(v))
|
||||||
case genid.EnumDescriptorProto_Options_field_number:
|
case genid.EnumDescriptorProto_Options_field_number:
|
||||||
@@ -219,7 +219,7 @@ func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
ed.L2.Options = ed.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Enum, rawOptions)
|
ed.L2.Options = ed.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Enum, rawOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalEnumReservedRange(b []byte) (r [2]pref.EnumNumber) {
|
func unmarshalEnumReservedRange(b []byte) (r [2]protoreflect.EnumNumber) {
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
num, typ, n := protowire.ConsumeTag(b)
|
num, typ, n := protowire.ConsumeTag(b)
|
||||||
b = b[n:]
|
b = b[n:]
|
||||||
@@ -229,9 +229,9 @@ func unmarshalEnumReservedRange(b []byte) (r [2]pref.EnumNumber) {
|
|||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.EnumDescriptorProto_EnumReservedRange_Start_field_number:
|
case genid.EnumDescriptorProto_EnumReservedRange_Start_field_number:
|
||||||
r[0] = pref.EnumNumber(v)
|
r[0] = protoreflect.EnumNumber(v)
|
||||||
case genid.EnumDescriptorProto_EnumReservedRange_End_field_number:
|
case genid.EnumDescriptorProto_EnumReservedRange_End_field_number:
|
||||||
r[1] = pref.EnumNumber(v)
|
r[1] = protoreflect.EnumNumber(v)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
m := protowire.ConsumeFieldValue(num, typ, b)
|
m := protowire.ConsumeFieldValue(num, typ, b)
|
||||||
@@ -241,7 +241,7 @@ func unmarshalEnumReservedRange(b []byte) (r [2]pref.EnumNumber) {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
vd.L0.ParentFile = pf
|
vd.L0.ParentFile = pf
|
||||||
vd.L0.Parent = pd
|
vd.L0.Parent = pd
|
||||||
vd.L0.Index = i
|
vd.L0.Index = i
|
||||||
@@ -256,7 +256,7 @@ func (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref
|
|||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.EnumValueDescriptorProto_Number_field_number:
|
case genid.EnumValueDescriptorProto_Number_field_number:
|
||||||
vd.L1.Number = pref.EnumNumber(v)
|
vd.L1.Number = protoreflect.EnumNumber(v)
|
||||||
}
|
}
|
||||||
case protowire.BytesType:
|
case protowire.BytesType:
|
||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
@@ -294,7 +294,7 @@ func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
case genid.DescriptorProto_OneofDecl_field_number:
|
case genid.DescriptorProto_OneofDecl_field_number:
|
||||||
rawOneofs = append(rawOneofs, v)
|
rawOneofs = append(rawOneofs, v)
|
||||||
case genid.DescriptorProto_ReservedName_field_number:
|
case genid.DescriptorProto_ReservedName_field_number:
|
||||||
md.L2.ReservedNames.List = append(md.L2.ReservedNames.List, pref.Name(sb.MakeString(v)))
|
md.L2.ReservedNames.List = append(md.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v)))
|
||||||
case genid.DescriptorProto_ReservedRange_field_number:
|
case genid.DescriptorProto_ReservedRange_field_number:
|
||||||
md.L2.ReservedRanges.List = append(md.L2.ReservedRanges.List, unmarshalMessageReservedRange(v))
|
md.L2.ReservedRanges.List = append(md.L2.ReservedRanges.List, unmarshalMessageReservedRange(v))
|
||||||
case genid.DescriptorProto_ExtensionRange_field_number:
|
case genid.DescriptorProto_ExtensionRange_field_number:
|
||||||
@@ -326,7 +326,7 @@ func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
for i, b := range rawFields {
|
for i, b := range rawFields {
|
||||||
fd := &md.L2.Fields.List[i]
|
fd := &md.L2.Fields.List[i]
|
||||||
fd.unmarshalFull(b, sb, md.L0.ParentFile, md, i)
|
fd.unmarshalFull(b, sb, md.L0.ParentFile, md, i)
|
||||||
if fd.L1.Cardinality == pref.Required {
|
if fd.L1.Cardinality == protoreflect.Required {
|
||||||
md.L2.RequiredNumbers.List = append(md.L2.RequiredNumbers.List, fd.L1.Number)
|
md.L2.RequiredNumbers.List = append(md.L2.RequiredNumbers.List, fd.L1.Number)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -359,7 +359,7 @@ func (md *Message) unmarshalOptions(b []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalMessageReservedRange(b []byte) (r [2]pref.FieldNumber) {
|
func unmarshalMessageReservedRange(b []byte) (r [2]protoreflect.FieldNumber) {
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
num, typ, n := protowire.ConsumeTag(b)
|
num, typ, n := protowire.ConsumeTag(b)
|
||||||
b = b[n:]
|
b = b[n:]
|
||||||
@@ -369,9 +369,9 @@ func unmarshalMessageReservedRange(b []byte) (r [2]pref.FieldNumber) {
|
|||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.DescriptorProto_ReservedRange_Start_field_number:
|
case genid.DescriptorProto_ReservedRange_Start_field_number:
|
||||||
r[0] = pref.FieldNumber(v)
|
r[0] = protoreflect.FieldNumber(v)
|
||||||
case genid.DescriptorProto_ReservedRange_End_field_number:
|
case genid.DescriptorProto_ReservedRange_End_field_number:
|
||||||
r[1] = pref.FieldNumber(v)
|
r[1] = protoreflect.FieldNumber(v)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
m := protowire.ConsumeFieldValue(num, typ, b)
|
m := protowire.ConsumeFieldValue(num, typ, b)
|
||||||
@@ -381,7 +381,7 @@ func unmarshalMessageReservedRange(b []byte) (r [2]pref.FieldNumber) {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalMessageExtensionRange(b []byte) (r [2]pref.FieldNumber, rawOptions []byte) {
|
func unmarshalMessageExtensionRange(b []byte) (r [2]protoreflect.FieldNumber, rawOptions []byte) {
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
num, typ, n := protowire.ConsumeTag(b)
|
num, typ, n := protowire.ConsumeTag(b)
|
||||||
b = b[n:]
|
b = b[n:]
|
||||||
@@ -391,9 +391,9 @@ func unmarshalMessageExtensionRange(b []byte) (r [2]pref.FieldNumber, rawOptions
|
|||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.DescriptorProto_ExtensionRange_Start_field_number:
|
case genid.DescriptorProto_ExtensionRange_Start_field_number:
|
||||||
r[0] = pref.FieldNumber(v)
|
r[0] = protoreflect.FieldNumber(v)
|
||||||
case genid.DescriptorProto_ExtensionRange_End_field_number:
|
case genid.DescriptorProto_ExtensionRange_End_field_number:
|
||||||
r[1] = pref.FieldNumber(v)
|
r[1] = protoreflect.FieldNumber(v)
|
||||||
}
|
}
|
||||||
case protowire.BytesType:
|
case protowire.BytesType:
|
||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
@@ -410,7 +410,7 @@ func unmarshalMessageExtensionRange(b []byte) (r [2]pref.FieldNumber, rawOptions
|
|||||||
return r, rawOptions
|
return r, rawOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
fd.L0.ParentFile = pf
|
fd.L0.ParentFile = pf
|
||||||
fd.L0.Parent = pd
|
fd.L0.Parent = pd
|
||||||
fd.L0.Index = i
|
fd.L0.Index = i
|
||||||
@@ -426,11 +426,11 @@ func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Des
|
|||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.FieldDescriptorProto_Number_field_number:
|
case genid.FieldDescriptorProto_Number_field_number:
|
||||||
fd.L1.Number = pref.FieldNumber(v)
|
fd.L1.Number = protoreflect.FieldNumber(v)
|
||||||
case genid.FieldDescriptorProto_Label_field_number:
|
case genid.FieldDescriptorProto_Label_field_number:
|
||||||
fd.L1.Cardinality = pref.Cardinality(v)
|
fd.L1.Cardinality = protoreflect.Cardinality(v)
|
||||||
case genid.FieldDescriptorProto_Type_field_number:
|
case genid.FieldDescriptorProto_Type_field_number:
|
||||||
fd.L1.Kind = pref.Kind(v)
|
fd.L1.Kind = protoreflect.Kind(v)
|
||||||
case genid.FieldDescriptorProto_OneofIndex_field_number:
|
case genid.FieldDescriptorProto_OneofIndex_field_number:
|
||||||
// In Message.unmarshalFull, we allocate slices for both
|
// In Message.unmarshalFull, we allocate slices for both
|
||||||
// the field and oneof descriptors before unmarshaling either
|
// the field and oneof descriptors before unmarshaling either
|
||||||
@@ -453,7 +453,7 @@ func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Des
|
|||||||
case genid.FieldDescriptorProto_JsonName_field_number:
|
case genid.FieldDescriptorProto_JsonName_field_number:
|
||||||
fd.L1.StringName.InitJSON(sb.MakeString(v))
|
fd.L1.StringName.InitJSON(sb.MakeString(v))
|
||||||
case genid.FieldDescriptorProto_DefaultValue_field_number:
|
case genid.FieldDescriptorProto_DefaultValue_field_number:
|
||||||
fd.L1.Default.val = pref.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages
|
fd.L1.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages
|
||||||
case genid.FieldDescriptorProto_TypeName_field_number:
|
case genid.FieldDescriptorProto_TypeName_field_number:
|
||||||
rawTypeName = v
|
rawTypeName = v
|
||||||
case genid.FieldDescriptorProto_Options_field_number:
|
case genid.FieldDescriptorProto_Options_field_number:
|
||||||
@@ -468,9 +468,9 @@ func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Des
|
|||||||
if rawTypeName != nil {
|
if rawTypeName != nil {
|
||||||
name := makeFullName(sb, rawTypeName)
|
name := makeFullName(sb, rawTypeName)
|
||||||
switch fd.L1.Kind {
|
switch fd.L1.Kind {
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
fd.L1.Enum = PlaceholderEnum(name)
|
fd.L1.Enum = PlaceholderEnum(name)
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
fd.L1.Message = PlaceholderMessage(name)
|
fd.L1.Message = PlaceholderMessage(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -504,7 +504,7 @@ func (fd *Field) unmarshalOptions(b []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
od.L0.ParentFile = pf
|
od.L0.ParentFile = pf
|
||||||
od.L0.Parent = pd
|
od.L0.Parent = pd
|
||||||
od.L0.Index = i
|
od.L0.Index = i
|
||||||
@@ -553,7 +553,7 @@ func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
case genid.FieldDescriptorProto_JsonName_field_number:
|
case genid.FieldDescriptorProto_JsonName_field_number:
|
||||||
xd.L2.StringName.InitJSON(sb.MakeString(v))
|
xd.L2.StringName.InitJSON(sb.MakeString(v))
|
||||||
case genid.FieldDescriptorProto_DefaultValue_field_number:
|
case genid.FieldDescriptorProto_DefaultValue_field_number:
|
||||||
xd.L2.Default.val = pref.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions
|
xd.L2.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions
|
||||||
case genid.FieldDescriptorProto_TypeName_field_number:
|
case genid.FieldDescriptorProto_TypeName_field_number:
|
||||||
rawTypeName = v
|
rawTypeName = v
|
||||||
case genid.FieldDescriptorProto_Options_field_number:
|
case genid.FieldDescriptorProto_Options_field_number:
|
||||||
@@ -568,9 +568,9 @@ func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
if rawTypeName != nil {
|
if rawTypeName != nil {
|
||||||
name := makeFullName(sb, rawTypeName)
|
name := makeFullName(sb, rawTypeName)
|
||||||
switch xd.L1.Kind {
|
switch xd.L1.Kind {
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
xd.L2.Enum = PlaceholderEnum(name)
|
xd.L2.Enum = PlaceholderEnum(name)
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
xd.L2.Message = PlaceholderMessage(name)
|
xd.L2.Message = PlaceholderMessage(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -627,7 +627,7 @@ func (sd *Service) unmarshalFull(b []byte, sb *strs.Builder) {
|
|||||||
sd.L2.Options = sd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Service, rawOptions)
|
sd.L2.Options = sd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Service, rawOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (md *Method) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) {
|
func (md *Method) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
|
||||||
md.L0.ParentFile = pf
|
md.L0.ParentFile = pf
|
||||||
md.L0.Parent = pd
|
md.L0.Parent = pd
|
||||||
md.L0.Index = i
|
md.L0.Index = i
|
||||||
@@ -680,18 +680,18 @@ func appendOptions(dst, src []byte) []byte {
|
|||||||
//
|
//
|
||||||
// The type of message to unmarshal to is passed as a pointer since the
|
// The type of message to unmarshal to is passed as a pointer since the
|
||||||
// vars in descopts may not yet be populated at the time this function is called.
|
// vars in descopts may not yet be populated at the time this function is called.
|
||||||
func (db *Builder) optionsUnmarshaler(p *pref.ProtoMessage, b []byte) func() pref.ProtoMessage {
|
func (db *Builder) optionsUnmarshaler(p *protoreflect.ProtoMessage, b []byte) func() protoreflect.ProtoMessage {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var opts pref.ProtoMessage
|
var opts protoreflect.ProtoMessage
|
||||||
var once sync.Once
|
var once sync.Once
|
||||||
return func() pref.ProtoMessage {
|
return func() protoreflect.ProtoMessage {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
if *p == nil {
|
if *p == nil {
|
||||||
panic("Descriptor.Options called without importing the descriptor package")
|
panic("Descriptor.Options called without importing the descriptor package")
|
||||||
}
|
}
|
||||||
opts = reflect.New(reflect.TypeOf(*p).Elem()).Interface().(pref.ProtoMessage)
|
opts = reflect.New(reflect.TypeOf(*p).Elem()).Interface().(protoreflect.ProtoMessage)
|
||||||
if err := (proto.UnmarshalOptions{
|
if err := (proto.UnmarshalOptions{
|
||||||
AllowPartial: true,
|
AllowPartial: true,
|
||||||
Resolver: db.TypeResolver,
|
Resolver: db.TypeResolver,
|
||||||
|
|||||||
+87
-80
@@ -17,31 +17,30 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
"google.golang.org/protobuf/internal/pragma"
|
"google.golang.org/protobuf/internal/pragma"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type FileImports []pref.FileImport
|
type FileImports []protoreflect.FileImport
|
||||||
|
|
||||||
func (p *FileImports) Len() int { return len(*p) }
|
func (p *FileImports) Len() int { return len(*p) }
|
||||||
func (p *FileImports) Get(i int) pref.FileImport { return (*p)[i] }
|
func (p *FileImports) Get(i int) protoreflect.FileImport { return (*p)[i] }
|
||||||
func (p *FileImports) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
|
func (p *FileImports) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
|
||||||
func (p *FileImports) ProtoInternal(pragma.DoNotImplement) {}
|
func (p *FileImports) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
|
|
||||||
type Names struct {
|
type Names struct {
|
||||||
List []pref.Name
|
List []protoreflect.Name
|
||||||
once sync.Once
|
once sync.Once
|
||||||
has map[pref.Name]int // protected by once
|
has map[protoreflect.Name]int // protected by once
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Names) Len() int { return len(p.List) }
|
func (p *Names) Len() int { return len(p.List) }
|
||||||
func (p *Names) Get(i int) pref.Name { return p.List[i] }
|
func (p *Names) Get(i int) protoreflect.Name { return p.List[i] }
|
||||||
func (p *Names) Has(s pref.Name) bool { return p.lazyInit().has[s] > 0 }
|
func (p *Names) Has(s protoreflect.Name) bool { return p.lazyInit().has[s] > 0 }
|
||||||
func (p *Names) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
|
func (p *Names) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
|
||||||
func (p *Names) ProtoInternal(pragma.DoNotImplement) {}
|
func (p *Names) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
func (p *Names) lazyInit() *Names {
|
func (p *Names) lazyInit() *Names {
|
||||||
p.once.Do(func() {
|
p.once.Do(func() {
|
||||||
if len(p.List) > 0 {
|
if len(p.List) > 0 {
|
||||||
p.has = make(map[pref.Name]int, len(p.List))
|
p.has = make(map[protoreflect.Name]int, len(p.List))
|
||||||
for _, s := range p.List {
|
for _, s := range p.List {
|
||||||
p.has[s] = p.has[s] + 1
|
p.has[s] = p.has[s] + 1
|
||||||
}
|
}
|
||||||
@@ -67,14 +66,14 @@ func (p *Names) CheckValid() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type EnumRanges struct {
|
type EnumRanges struct {
|
||||||
List [][2]pref.EnumNumber // start inclusive; end inclusive
|
List [][2]protoreflect.EnumNumber // start inclusive; end inclusive
|
||||||
once sync.Once
|
once sync.Once
|
||||||
sorted [][2]pref.EnumNumber // protected by once
|
sorted [][2]protoreflect.EnumNumber // protected by once
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *EnumRanges) Len() int { return len(p.List) }
|
func (p *EnumRanges) Len() int { return len(p.List) }
|
||||||
func (p *EnumRanges) Get(i int) [2]pref.EnumNumber { return p.List[i] }
|
func (p *EnumRanges) Get(i int) [2]protoreflect.EnumNumber { return p.List[i] }
|
||||||
func (p *EnumRanges) Has(n pref.EnumNumber) bool {
|
func (p *EnumRanges) Has(n protoreflect.EnumNumber) bool {
|
||||||
for ls := p.lazyInit().sorted; len(ls) > 0; {
|
for ls := p.lazyInit().sorted; len(ls) > 0; {
|
||||||
i := len(ls) / 2
|
i := len(ls) / 2
|
||||||
switch r := enumRange(ls[i]); {
|
switch r := enumRange(ls[i]); {
|
||||||
@@ -129,14 +128,14 @@ func (r enumRange) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type FieldRanges struct {
|
type FieldRanges struct {
|
||||||
List [][2]pref.FieldNumber // start inclusive; end exclusive
|
List [][2]protoreflect.FieldNumber // start inclusive; end exclusive
|
||||||
once sync.Once
|
once sync.Once
|
||||||
sorted [][2]pref.FieldNumber // protected by once
|
sorted [][2]protoreflect.FieldNumber // protected by once
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *FieldRanges) Len() int { return len(p.List) }
|
func (p *FieldRanges) Len() int { return len(p.List) }
|
||||||
func (p *FieldRanges) Get(i int) [2]pref.FieldNumber { return p.List[i] }
|
func (p *FieldRanges) Get(i int) [2]protoreflect.FieldNumber { return p.List[i] }
|
||||||
func (p *FieldRanges) Has(n pref.FieldNumber) bool {
|
func (p *FieldRanges) Has(n protoreflect.FieldNumber) bool {
|
||||||
for ls := p.lazyInit().sorted; len(ls) > 0; {
|
for ls := p.lazyInit().sorted; len(ls) > 0; {
|
||||||
i := len(ls) / 2
|
i := len(ls) / 2
|
||||||
switch r := fieldRange(ls[i]); {
|
switch r := fieldRange(ls[i]); {
|
||||||
@@ -221,17 +220,17 @@ func (r fieldRange) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type FieldNumbers struct {
|
type FieldNumbers struct {
|
||||||
List []pref.FieldNumber
|
List []protoreflect.FieldNumber
|
||||||
once sync.Once
|
once sync.Once
|
||||||
has map[pref.FieldNumber]struct{} // protected by once
|
has map[protoreflect.FieldNumber]struct{} // protected by once
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *FieldNumbers) Len() int { return len(p.List) }
|
func (p *FieldNumbers) Len() int { return len(p.List) }
|
||||||
func (p *FieldNumbers) Get(i int) pref.FieldNumber { return p.List[i] }
|
func (p *FieldNumbers) Get(i int) protoreflect.FieldNumber { return p.List[i] }
|
||||||
func (p *FieldNumbers) Has(n pref.FieldNumber) bool {
|
func (p *FieldNumbers) Has(n protoreflect.FieldNumber) bool {
|
||||||
p.once.Do(func() {
|
p.once.Do(func() {
|
||||||
if len(p.List) > 0 {
|
if len(p.List) > 0 {
|
||||||
p.has = make(map[pref.FieldNumber]struct{}, len(p.List))
|
p.has = make(map[protoreflect.FieldNumber]struct{}, len(p.List))
|
||||||
for _, n := range p.List {
|
for _, n := range p.List {
|
||||||
p.has[n] = struct{}{}
|
p.has[n] = struct{}{}
|
||||||
}
|
}
|
||||||
@@ -244,30 +243,38 @@ func (p *FieldNumbers) Format(s fmt.State, r rune) { descfmt.FormatList
|
|||||||
func (p *FieldNumbers) ProtoInternal(pragma.DoNotImplement) {}
|
func (p *FieldNumbers) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
|
|
||||||
type OneofFields struct {
|
type OneofFields struct {
|
||||||
List []pref.FieldDescriptor
|
List []protoreflect.FieldDescriptor
|
||||||
once sync.Once
|
once sync.Once
|
||||||
byName map[pref.Name]pref.FieldDescriptor // protected by once
|
byName map[protoreflect.Name]protoreflect.FieldDescriptor // protected by once
|
||||||
byJSON map[string]pref.FieldDescriptor // protected by once
|
byJSON map[string]protoreflect.FieldDescriptor // protected by once
|
||||||
byText map[string]pref.FieldDescriptor // protected by once
|
byText map[string]protoreflect.FieldDescriptor // protected by once
|
||||||
byNum map[pref.FieldNumber]pref.FieldDescriptor // protected by once
|
byNum map[protoreflect.FieldNumber]protoreflect.FieldDescriptor // protected by once
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *OneofFields) Len() int { return len(p.List) }
|
func (p *OneofFields) Len() int { return len(p.List) }
|
||||||
func (p *OneofFields) Get(i int) pref.FieldDescriptor { return p.List[i] }
|
func (p *OneofFields) Get(i int) protoreflect.FieldDescriptor { return p.List[i] }
|
||||||
func (p *OneofFields) ByName(s pref.Name) pref.FieldDescriptor { return p.lazyInit().byName[s] }
|
func (p *OneofFields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {
|
||||||
func (p *OneofFields) ByJSONName(s string) pref.FieldDescriptor { return p.lazyInit().byJSON[s] }
|
return p.lazyInit().byName[s]
|
||||||
func (p *OneofFields) ByTextName(s string) pref.FieldDescriptor { return p.lazyInit().byText[s] }
|
}
|
||||||
func (p *OneofFields) ByNumber(n pref.FieldNumber) pref.FieldDescriptor { return p.lazyInit().byNum[n] }
|
func (p *OneofFields) ByJSONName(s string) protoreflect.FieldDescriptor {
|
||||||
func (p *OneofFields) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
|
return p.lazyInit().byJSON[s]
|
||||||
func (p *OneofFields) ProtoInternal(pragma.DoNotImplement) {}
|
}
|
||||||
|
func (p *OneofFields) ByTextName(s string) protoreflect.FieldDescriptor {
|
||||||
|
return p.lazyInit().byText[s]
|
||||||
|
}
|
||||||
|
func (p *OneofFields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {
|
||||||
|
return p.lazyInit().byNum[n]
|
||||||
|
}
|
||||||
|
func (p *OneofFields) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
|
||||||
|
func (p *OneofFields) ProtoInternal(pragma.DoNotImplement) {}
|
||||||
|
|
||||||
func (p *OneofFields) lazyInit() *OneofFields {
|
func (p *OneofFields) lazyInit() *OneofFields {
|
||||||
p.once.Do(func() {
|
p.once.Do(func() {
|
||||||
if len(p.List) > 0 {
|
if len(p.List) > 0 {
|
||||||
p.byName = make(map[pref.Name]pref.FieldDescriptor, len(p.List))
|
p.byName = make(map[protoreflect.Name]protoreflect.FieldDescriptor, len(p.List))
|
||||||
p.byJSON = make(map[string]pref.FieldDescriptor, len(p.List))
|
p.byJSON = make(map[string]protoreflect.FieldDescriptor, len(p.List))
|
||||||
p.byText = make(map[string]pref.FieldDescriptor, len(p.List))
|
p.byText = make(map[string]protoreflect.FieldDescriptor, len(p.List))
|
||||||
p.byNum = make(map[pref.FieldNumber]pref.FieldDescriptor, len(p.List))
|
p.byNum = make(map[protoreflect.FieldNumber]protoreflect.FieldDescriptor, len(p.List))
|
||||||
for _, f := range p.List {
|
for _, f := range p.List {
|
||||||
// Field names and numbers are guaranteed to be unique.
|
// Field names and numbers are guaranteed to be unique.
|
||||||
p.byName[f.Name()] = f
|
p.byName[f.Name()] = f
|
||||||
@@ -284,123 +291,123 @@ type SourceLocations struct {
|
|||||||
// List is a list of SourceLocations.
|
// List is a list of SourceLocations.
|
||||||
// The SourceLocation.Next field does not need to be populated
|
// The SourceLocation.Next field does not need to be populated
|
||||||
// as it will be lazily populated upon first need.
|
// as it will be lazily populated upon first need.
|
||||||
List []pref.SourceLocation
|
List []protoreflect.SourceLocation
|
||||||
|
|
||||||
// File is the parent file descriptor that these locations are relative to.
|
// File is the parent file descriptor that these locations are relative to.
|
||||||
// If non-nil, ByDescriptor verifies that the provided descriptor
|
// If non-nil, ByDescriptor verifies that the provided descriptor
|
||||||
// is a child of this file descriptor.
|
// is a child of this file descriptor.
|
||||||
File pref.FileDescriptor
|
File protoreflect.FileDescriptor
|
||||||
|
|
||||||
once sync.Once
|
once sync.Once
|
||||||
byPath map[pathKey]int
|
byPath map[pathKey]int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *SourceLocations) Len() int { return len(p.List) }
|
func (p *SourceLocations) Len() int { return len(p.List) }
|
||||||
func (p *SourceLocations) Get(i int) pref.SourceLocation { return p.lazyInit().List[i] }
|
func (p *SourceLocations) Get(i int) protoreflect.SourceLocation { return p.lazyInit().List[i] }
|
||||||
func (p *SourceLocations) byKey(k pathKey) pref.SourceLocation {
|
func (p *SourceLocations) byKey(k pathKey) protoreflect.SourceLocation {
|
||||||
if i, ok := p.lazyInit().byPath[k]; ok {
|
if i, ok := p.lazyInit().byPath[k]; ok {
|
||||||
return p.List[i]
|
return p.List[i]
|
||||||
}
|
}
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
func (p *SourceLocations) ByPath(path pref.SourcePath) pref.SourceLocation {
|
func (p *SourceLocations) ByPath(path protoreflect.SourcePath) protoreflect.SourceLocation {
|
||||||
return p.byKey(newPathKey(path))
|
return p.byKey(newPathKey(path))
|
||||||
}
|
}
|
||||||
func (p *SourceLocations) ByDescriptor(desc pref.Descriptor) pref.SourceLocation {
|
func (p *SourceLocations) ByDescriptor(desc protoreflect.Descriptor) protoreflect.SourceLocation {
|
||||||
if p.File != nil && desc != nil && p.File != desc.ParentFile() {
|
if p.File != nil && desc != nil && p.File != desc.ParentFile() {
|
||||||
return pref.SourceLocation{} // mismatching parent files
|
return protoreflect.SourceLocation{} // mismatching parent files
|
||||||
}
|
}
|
||||||
var pathArr [16]int32
|
var pathArr [16]int32
|
||||||
path := pathArr[:0]
|
path := pathArr[:0]
|
||||||
for {
|
for {
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.FileDescriptor:
|
case protoreflect.FileDescriptor:
|
||||||
// Reverse the path since it was constructed in reverse.
|
// Reverse the path since it was constructed in reverse.
|
||||||
for i, j := 0, len(path)-1; i < j; i, j = i+1, j-1 {
|
for i, j := 0, len(path)-1; i < j; i, j = i+1, j-1 {
|
||||||
path[i], path[j] = path[j], path[i]
|
path[i], path[j] = path[j], path[i]
|
||||||
}
|
}
|
||||||
return p.byKey(newPathKey(path))
|
return p.byKey(newPathKey(path))
|
||||||
case pref.MessageDescriptor:
|
case protoreflect.MessageDescriptor:
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.FileDescriptor:
|
case protoreflect.FileDescriptor:
|
||||||
path = append(path, int32(genid.FileDescriptorProto_MessageType_field_number))
|
path = append(path, int32(genid.FileDescriptorProto_MessageType_field_number))
|
||||||
case pref.MessageDescriptor:
|
case protoreflect.MessageDescriptor:
|
||||||
path = append(path, int32(genid.DescriptorProto_NestedType_field_number))
|
path = append(path, int32(genid.DescriptorProto_NestedType_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
case pref.FieldDescriptor:
|
case protoreflect.FieldDescriptor:
|
||||||
isExtension := desc.(pref.FieldDescriptor).IsExtension()
|
isExtension := desc.(protoreflect.FieldDescriptor).IsExtension()
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
if isExtension {
|
if isExtension {
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.FileDescriptor:
|
case protoreflect.FileDescriptor:
|
||||||
path = append(path, int32(genid.FileDescriptorProto_Extension_field_number))
|
path = append(path, int32(genid.FileDescriptorProto_Extension_field_number))
|
||||||
case pref.MessageDescriptor:
|
case protoreflect.MessageDescriptor:
|
||||||
path = append(path, int32(genid.DescriptorProto_Extension_field_number))
|
path = append(path, int32(genid.DescriptorProto_Extension_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.MessageDescriptor:
|
case protoreflect.MessageDescriptor:
|
||||||
path = append(path, int32(genid.DescriptorProto_Field_field_number))
|
path = append(path, int32(genid.DescriptorProto_Field_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case pref.OneofDescriptor:
|
case protoreflect.OneofDescriptor:
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.MessageDescriptor:
|
case protoreflect.MessageDescriptor:
|
||||||
path = append(path, int32(genid.DescriptorProto_OneofDecl_field_number))
|
path = append(path, int32(genid.DescriptorProto_OneofDecl_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
case pref.EnumDescriptor:
|
case protoreflect.EnumDescriptor:
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.FileDescriptor:
|
case protoreflect.FileDescriptor:
|
||||||
path = append(path, int32(genid.FileDescriptorProto_EnumType_field_number))
|
path = append(path, int32(genid.FileDescriptorProto_EnumType_field_number))
|
||||||
case pref.MessageDescriptor:
|
case protoreflect.MessageDescriptor:
|
||||||
path = append(path, int32(genid.DescriptorProto_EnumType_field_number))
|
path = append(path, int32(genid.DescriptorProto_EnumType_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
case pref.EnumValueDescriptor:
|
case protoreflect.EnumValueDescriptor:
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.EnumDescriptor:
|
case protoreflect.EnumDescriptor:
|
||||||
path = append(path, int32(genid.EnumDescriptorProto_Value_field_number))
|
path = append(path, int32(genid.EnumDescriptorProto_Value_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
case pref.ServiceDescriptor:
|
case protoreflect.ServiceDescriptor:
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.FileDescriptor:
|
case protoreflect.FileDescriptor:
|
||||||
path = append(path, int32(genid.FileDescriptorProto_Service_field_number))
|
path = append(path, int32(genid.FileDescriptorProto_Service_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
case pref.MethodDescriptor:
|
case protoreflect.MethodDescriptor:
|
||||||
path = append(path, int32(desc.Index()))
|
path = append(path, int32(desc.Index()))
|
||||||
desc = desc.Parent()
|
desc = desc.Parent()
|
||||||
switch desc.(type) {
|
switch desc.(type) {
|
||||||
case pref.ServiceDescriptor:
|
case protoreflect.ServiceDescriptor:
|
||||||
path = append(path, int32(genid.ServiceDescriptorProto_Method_field_number))
|
path = append(path, int32(genid.ServiceDescriptorProto_Method_field_number))
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return pref.SourceLocation{}
|
return protoreflect.SourceLocation{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -435,7 +442,7 @@ type pathKey struct {
|
|||||||
str string // used if the path does not fit in arr
|
str string // used if the path does not fit in arr
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPathKey(p pref.SourcePath) (k pathKey) {
|
func newPathKey(p protoreflect.SourcePath) (k pathKey) {
|
||||||
if len(p) < len(k.arr) {
|
if len(p) < len(k.arr) {
|
||||||
for i, ps := range p {
|
for i, ps := range p {
|
||||||
if ps < 0 || math.MaxUint8 <= ps {
|
if ps < 0 || math.MaxUint8 <= ps {
|
||||||
|
|||||||
+69
-67
@@ -7,7 +7,7 @@ package filedesc
|
|||||||
import (
|
import (
|
||||||
"google.golang.org/protobuf/internal/descopts"
|
"google.golang.org/protobuf/internal/descopts"
|
||||||
"google.golang.org/protobuf/internal/pragma"
|
"google.golang.org/protobuf/internal/pragma"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -30,78 +30,80 @@ var (
|
|||||||
// PlaceholderFile is a placeholder, representing only the file path.
|
// PlaceholderFile is a placeholder, representing only the file path.
|
||||||
type PlaceholderFile string
|
type PlaceholderFile string
|
||||||
|
|
||||||
func (f PlaceholderFile) ParentFile() pref.FileDescriptor { return f }
|
func (f PlaceholderFile) ParentFile() protoreflect.FileDescriptor { return f }
|
||||||
func (f PlaceholderFile) Parent() pref.Descriptor { return nil }
|
func (f PlaceholderFile) Parent() protoreflect.Descriptor { return nil }
|
||||||
func (f PlaceholderFile) Index() int { return 0 }
|
func (f PlaceholderFile) Index() int { return 0 }
|
||||||
func (f PlaceholderFile) Syntax() pref.Syntax { return 0 }
|
func (f PlaceholderFile) Syntax() protoreflect.Syntax { return 0 }
|
||||||
func (f PlaceholderFile) Name() pref.Name { return "" }
|
func (f PlaceholderFile) Name() protoreflect.Name { return "" }
|
||||||
func (f PlaceholderFile) FullName() pref.FullName { return "" }
|
func (f PlaceholderFile) FullName() protoreflect.FullName { return "" }
|
||||||
func (f PlaceholderFile) IsPlaceholder() bool { return true }
|
func (f PlaceholderFile) IsPlaceholder() bool { return true }
|
||||||
func (f PlaceholderFile) Options() pref.ProtoMessage { return descopts.File }
|
func (f PlaceholderFile) Options() protoreflect.ProtoMessage { return descopts.File }
|
||||||
func (f PlaceholderFile) Path() string { return string(f) }
|
func (f PlaceholderFile) Path() string { return string(f) }
|
||||||
func (f PlaceholderFile) Package() pref.FullName { return "" }
|
func (f PlaceholderFile) Package() protoreflect.FullName { return "" }
|
||||||
func (f PlaceholderFile) Imports() pref.FileImports { return emptyFiles }
|
func (f PlaceholderFile) Imports() protoreflect.FileImports { return emptyFiles }
|
||||||
func (f PlaceholderFile) Messages() pref.MessageDescriptors { return emptyMessages }
|
func (f PlaceholderFile) Messages() protoreflect.MessageDescriptors { return emptyMessages }
|
||||||
func (f PlaceholderFile) Enums() pref.EnumDescriptors { return emptyEnums }
|
func (f PlaceholderFile) Enums() protoreflect.EnumDescriptors { return emptyEnums }
|
||||||
func (f PlaceholderFile) Extensions() pref.ExtensionDescriptors { return emptyExtensions }
|
func (f PlaceholderFile) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions }
|
||||||
func (f PlaceholderFile) Services() pref.ServiceDescriptors { return emptyServices }
|
func (f PlaceholderFile) Services() protoreflect.ServiceDescriptors { return emptyServices }
|
||||||
func (f PlaceholderFile) SourceLocations() pref.SourceLocations { return emptySourceLocations }
|
func (f PlaceholderFile) SourceLocations() protoreflect.SourceLocations { return emptySourceLocations }
|
||||||
func (f PlaceholderFile) ProtoType(pref.FileDescriptor) { return }
|
func (f PlaceholderFile) ProtoType(protoreflect.FileDescriptor) { return }
|
||||||
func (f PlaceholderFile) ProtoInternal(pragma.DoNotImplement) { return }
|
func (f PlaceholderFile) ProtoInternal(pragma.DoNotImplement) { return }
|
||||||
|
|
||||||
// PlaceholderEnum is a placeholder, representing only the full name.
|
// PlaceholderEnum is a placeholder, representing only the full name.
|
||||||
type PlaceholderEnum pref.FullName
|
type PlaceholderEnum protoreflect.FullName
|
||||||
|
|
||||||
func (e PlaceholderEnum) ParentFile() pref.FileDescriptor { return nil }
|
func (e PlaceholderEnum) ParentFile() protoreflect.FileDescriptor { return nil }
|
||||||
func (e PlaceholderEnum) Parent() pref.Descriptor { return nil }
|
func (e PlaceholderEnum) Parent() protoreflect.Descriptor { return nil }
|
||||||
func (e PlaceholderEnum) Index() int { return 0 }
|
func (e PlaceholderEnum) Index() int { return 0 }
|
||||||
func (e PlaceholderEnum) Syntax() pref.Syntax { return 0 }
|
func (e PlaceholderEnum) Syntax() protoreflect.Syntax { return 0 }
|
||||||
func (e PlaceholderEnum) Name() pref.Name { return pref.FullName(e).Name() }
|
func (e PlaceholderEnum) Name() protoreflect.Name { return protoreflect.FullName(e).Name() }
|
||||||
func (e PlaceholderEnum) FullName() pref.FullName { return pref.FullName(e) }
|
func (e PlaceholderEnum) FullName() protoreflect.FullName { return protoreflect.FullName(e) }
|
||||||
func (e PlaceholderEnum) IsPlaceholder() bool { return true }
|
func (e PlaceholderEnum) IsPlaceholder() bool { return true }
|
||||||
func (e PlaceholderEnum) Options() pref.ProtoMessage { return descopts.Enum }
|
func (e PlaceholderEnum) Options() protoreflect.ProtoMessage { return descopts.Enum }
|
||||||
func (e PlaceholderEnum) Values() pref.EnumValueDescriptors { return emptyEnumValues }
|
func (e PlaceholderEnum) Values() protoreflect.EnumValueDescriptors { return emptyEnumValues }
|
||||||
func (e PlaceholderEnum) ReservedNames() pref.Names { return emptyNames }
|
func (e PlaceholderEnum) ReservedNames() protoreflect.Names { return emptyNames }
|
||||||
func (e PlaceholderEnum) ReservedRanges() pref.EnumRanges { return emptyEnumRanges }
|
func (e PlaceholderEnum) ReservedRanges() protoreflect.EnumRanges { return emptyEnumRanges }
|
||||||
func (e PlaceholderEnum) ProtoType(pref.EnumDescriptor) { return }
|
func (e PlaceholderEnum) ProtoType(protoreflect.EnumDescriptor) { return }
|
||||||
func (e PlaceholderEnum) ProtoInternal(pragma.DoNotImplement) { return }
|
func (e PlaceholderEnum) ProtoInternal(pragma.DoNotImplement) { return }
|
||||||
|
|
||||||
// PlaceholderEnumValue is a placeholder, representing only the full name.
|
// PlaceholderEnumValue is a placeholder, representing only the full name.
|
||||||
type PlaceholderEnumValue pref.FullName
|
type PlaceholderEnumValue protoreflect.FullName
|
||||||
|
|
||||||
func (e PlaceholderEnumValue) ParentFile() pref.FileDescriptor { return nil }
|
func (e PlaceholderEnumValue) ParentFile() protoreflect.FileDescriptor { return nil }
|
||||||
func (e PlaceholderEnumValue) Parent() pref.Descriptor { return nil }
|
func (e PlaceholderEnumValue) Parent() protoreflect.Descriptor { return nil }
|
||||||
func (e PlaceholderEnumValue) Index() int { return 0 }
|
func (e PlaceholderEnumValue) Index() int { return 0 }
|
||||||
func (e PlaceholderEnumValue) Syntax() pref.Syntax { return 0 }
|
func (e PlaceholderEnumValue) Syntax() protoreflect.Syntax { return 0 }
|
||||||
func (e PlaceholderEnumValue) Name() pref.Name { return pref.FullName(e).Name() }
|
func (e PlaceholderEnumValue) Name() protoreflect.Name { return protoreflect.FullName(e).Name() }
|
||||||
func (e PlaceholderEnumValue) FullName() pref.FullName { return pref.FullName(e) }
|
func (e PlaceholderEnumValue) FullName() protoreflect.FullName { return protoreflect.FullName(e) }
|
||||||
func (e PlaceholderEnumValue) IsPlaceholder() bool { return true }
|
func (e PlaceholderEnumValue) IsPlaceholder() bool { return true }
|
||||||
func (e PlaceholderEnumValue) Options() pref.ProtoMessage { return descopts.EnumValue }
|
func (e PlaceholderEnumValue) Options() protoreflect.ProtoMessage { return descopts.EnumValue }
|
||||||
func (e PlaceholderEnumValue) Number() pref.EnumNumber { return 0 }
|
func (e PlaceholderEnumValue) Number() protoreflect.EnumNumber { return 0 }
|
||||||
func (e PlaceholderEnumValue) ProtoType(pref.EnumValueDescriptor) { return }
|
func (e PlaceholderEnumValue) ProtoType(protoreflect.EnumValueDescriptor) { return }
|
||||||
func (e PlaceholderEnumValue) ProtoInternal(pragma.DoNotImplement) { return }
|
func (e PlaceholderEnumValue) ProtoInternal(pragma.DoNotImplement) { return }
|
||||||
|
|
||||||
// PlaceholderMessage is a placeholder, representing only the full name.
|
// PlaceholderMessage is a placeholder, representing only the full name.
|
||||||
type PlaceholderMessage pref.FullName
|
type PlaceholderMessage protoreflect.FullName
|
||||||
|
|
||||||
func (m PlaceholderMessage) ParentFile() pref.FileDescriptor { return nil }
|
func (m PlaceholderMessage) ParentFile() protoreflect.FileDescriptor { return nil }
|
||||||
func (m PlaceholderMessage) Parent() pref.Descriptor { return nil }
|
func (m PlaceholderMessage) Parent() protoreflect.Descriptor { return nil }
|
||||||
func (m PlaceholderMessage) Index() int { return 0 }
|
func (m PlaceholderMessage) Index() int { return 0 }
|
||||||
func (m PlaceholderMessage) Syntax() pref.Syntax { return 0 }
|
func (m PlaceholderMessage) Syntax() protoreflect.Syntax { return 0 }
|
||||||
func (m PlaceholderMessage) Name() pref.Name { return pref.FullName(m).Name() }
|
func (m PlaceholderMessage) Name() protoreflect.Name { return protoreflect.FullName(m).Name() }
|
||||||
func (m PlaceholderMessage) FullName() pref.FullName { return pref.FullName(m) }
|
func (m PlaceholderMessage) FullName() protoreflect.FullName { return protoreflect.FullName(m) }
|
||||||
func (m PlaceholderMessage) IsPlaceholder() bool { return true }
|
func (m PlaceholderMessage) IsPlaceholder() bool { return true }
|
||||||
func (m PlaceholderMessage) Options() pref.ProtoMessage { return descopts.Message }
|
func (m PlaceholderMessage) Options() protoreflect.ProtoMessage { return descopts.Message }
|
||||||
func (m PlaceholderMessage) IsMapEntry() bool { return false }
|
func (m PlaceholderMessage) IsMapEntry() bool { return false }
|
||||||
func (m PlaceholderMessage) Fields() pref.FieldDescriptors { return emptyFields }
|
func (m PlaceholderMessage) Fields() protoreflect.FieldDescriptors { return emptyFields }
|
||||||
func (m PlaceholderMessage) Oneofs() pref.OneofDescriptors { return emptyOneofs }
|
func (m PlaceholderMessage) Oneofs() protoreflect.OneofDescriptors { return emptyOneofs }
|
||||||
func (m PlaceholderMessage) ReservedNames() pref.Names { return emptyNames }
|
func (m PlaceholderMessage) ReservedNames() protoreflect.Names { return emptyNames }
|
||||||
func (m PlaceholderMessage) ReservedRanges() pref.FieldRanges { return emptyFieldRanges }
|
func (m PlaceholderMessage) ReservedRanges() protoreflect.FieldRanges { return emptyFieldRanges }
|
||||||
func (m PlaceholderMessage) RequiredNumbers() pref.FieldNumbers { return emptyFieldNumbers }
|
func (m PlaceholderMessage) RequiredNumbers() protoreflect.FieldNumbers { return emptyFieldNumbers }
|
||||||
func (m PlaceholderMessage) ExtensionRanges() pref.FieldRanges { return emptyFieldRanges }
|
func (m PlaceholderMessage) ExtensionRanges() protoreflect.FieldRanges { return emptyFieldRanges }
|
||||||
func (m PlaceholderMessage) ExtensionRangeOptions(int) pref.ProtoMessage { panic("index out of range") }
|
func (m PlaceholderMessage) ExtensionRangeOptions(int) protoreflect.ProtoMessage {
|
||||||
func (m PlaceholderMessage) Messages() pref.MessageDescriptors { return emptyMessages }
|
panic("index out of range")
|
||||||
func (m PlaceholderMessage) Enums() pref.EnumDescriptors { return emptyEnums }
|
}
|
||||||
func (m PlaceholderMessage) Extensions() pref.ExtensionDescriptors { return emptyExtensions }
|
func (m PlaceholderMessage) Messages() protoreflect.MessageDescriptors { return emptyMessages }
|
||||||
func (m PlaceholderMessage) ProtoType(pref.MessageDescriptor) { return }
|
func (m PlaceholderMessage) Enums() protoreflect.EnumDescriptors { return emptyEnums }
|
||||||
func (m PlaceholderMessage) ProtoInternal(pragma.DoNotImplement) { return }
|
func (m PlaceholderMessage) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions }
|
||||||
|
func (m PlaceholderMessage) ProtoType(protoreflect.MessageDescriptor) { return }
|
||||||
|
func (m PlaceholderMessage) ProtoInternal(pragma.DoNotImplement) { return }
|
||||||
|
|||||||
+43
-44
@@ -10,17 +10,16 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"google.golang.org/protobuf/internal/descopts"
|
"google.golang.org/protobuf/internal/descopts"
|
||||||
fdesc "google.golang.org/protobuf/internal/filedesc"
|
"google.golang.org/protobuf/internal/filedesc"
|
||||||
pimpl "google.golang.org/protobuf/internal/impl"
|
pimpl "google.golang.org/protobuf/internal/impl"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
preg "google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Builder constructs type descriptors from a raw file descriptor
|
// Builder constructs type descriptors from a raw file descriptor
|
||||||
// and associated Go types for each enum and message declaration.
|
// and associated Go types for each enum and message declaration.
|
||||||
//
|
//
|
||||||
//
|
// # Flattened Ordering
|
||||||
// Flattened Ordering
|
|
||||||
//
|
//
|
||||||
// The protobuf type system represents declarations as a tree. Certain nodes in
|
// The protobuf type system represents declarations as a tree. Certain nodes in
|
||||||
// the tree require us to either associate it with a concrete Go type or to
|
// the tree require us to either associate it with a concrete Go type or to
|
||||||
@@ -52,7 +51,7 @@ import (
|
|||||||
// that children themselves may have.
|
// that children themselves may have.
|
||||||
type Builder struct {
|
type Builder struct {
|
||||||
// File is the underlying file descriptor builder.
|
// File is the underlying file descriptor builder.
|
||||||
File fdesc.Builder
|
File filedesc.Builder
|
||||||
|
|
||||||
// GoTypes is a unique set of the Go types for all declarations and
|
// GoTypes is a unique set of the Go types for all declarations and
|
||||||
// dependencies. Each type is represented as a zero value of the Go type.
|
// dependencies. Each type is represented as a zero value of the Go type.
|
||||||
@@ -108,22 +107,22 @@ type Builder struct {
|
|||||||
// TypeRegistry is the registry to register each type descriptor.
|
// TypeRegistry is the registry to register each type descriptor.
|
||||||
// If nil, it uses protoregistry.GlobalTypes.
|
// If nil, it uses protoregistry.GlobalTypes.
|
||||||
TypeRegistry interface {
|
TypeRegistry interface {
|
||||||
RegisterMessage(pref.MessageType) error
|
RegisterMessage(protoreflect.MessageType) error
|
||||||
RegisterEnum(pref.EnumType) error
|
RegisterEnum(protoreflect.EnumType) error
|
||||||
RegisterExtension(pref.ExtensionType) error
|
RegisterExtension(protoreflect.ExtensionType) error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Out is the output of the builder.
|
// Out is the output of the builder.
|
||||||
type Out struct {
|
type Out struct {
|
||||||
File pref.FileDescriptor
|
File protoreflect.FileDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tb Builder) Build() (out Out) {
|
func (tb Builder) Build() (out Out) {
|
||||||
// Replace the resolver with one that resolves dependencies by index,
|
// Replace the resolver with one that resolves dependencies by index,
|
||||||
// which is faster and more reliable than relying on the global registry.
|
// which is faster and more reliable than relying on the global registry.
|
||||||
if tb.File.FileRegistry == nil {
|
if tb.File.FileRegistry == nil {
|
||||||
tb.File.FileRegistry = preg.GlobalFiles
|
tb.File.FileRegistry = protoregistry.GlobalFiles
|
||||||
}
|
}
|
||||||
tb.File.FileRegistry = &resolverByIndex{
|
tb.File.FileRegistry = &resolverByIndex{
|
||||||
goTypes: tb.GoTypes,
|
goTypes: tb.GoTypes,
|
||||||
@@ -133,7 +132,7 @@ func (tb Builder) Build() (out Out) {
|
|||||||
|
|
||||||
// Initialize registry if unpopulated.
|
// Initialize registry if unpopulated.
|
||||||
if tb.TypeRegistry == nil {
|
if tb.TypeRegistry == nil {
|
||||||
tb.TypeRegistry = preg.GlobalTypes
|
tb.TypeRegistry = protoregistry.GlobalTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
fbOut := tb.File.Build()
|
fbOut := tb.File.Build()
|
||||||
@@ -183,23 +182,23 @@ func (tb Builder) Build() (out Out) {
|
|||||||
for i := range fbOut.Messages {
|
for i := range fbOut.Messages {
|
||||||
switch fbOut.Messages[i].Name() {
|
switch fbOut.Messages[i].Name() {
|
||||||
case "FileOptions":
|
case "FileOptions":
|
||||||
descopts.File = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.File = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "EnumOptions":
|
case "EnumOptions":
|
||||||
descopts.Enum = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.Enum = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "EnumValueOptions":
|
case "EnumValueOptions":
|
||||||
descopts.EnumValue = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.EnumValue = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "MessageOptions":
|
case "MessageOptions":
|
||||||
descopts.Message = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.Message = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "FieldOptions":
|
case "FieldOptions":
|
||||||
descopts.Field = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.Field = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "OneofOptions":
|
case "OneofOptions":
|
||||||
descopts.Oneof = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.Oneof = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "ExtensionRangeOptions":
|
case "ExtensionRangeOptions":
|
||||||
descopts.ExtensionRange = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.ExtensionRange = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "ServiceOptions":
|
case "ServiceOptions":
|
||||||
descopts.Service = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.Service = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
case "MethodOptions":
|
case "MethodOptions":
|
||||||
descopts.Method = messageGoTypes[i].(pref.ProtoMessage)
|
descopts.Method = messageGoTypes[i].(protoreflect.ProtoMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,11 +215,11 @@ func (tb Builder) Build() (out Out) {
|
|||||||
const listExtDeps = 2
|
const listExtDeps = 2
|
||||||
var goType reflect.Type
|
var goType reflect.Type
|
||||||
switch fbOut.Extensions[i].L1.Kind {
|
switch fbOut.Extensions[i].L1.Kind {
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)
|
j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)
|
||||||
goType = reflect.TypeOf(tb.GoTypes[j])
|
goType = reflect.TypeOf(tb.GoTypes[j])
|
||||||
depIdx++
|
depIdx++
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)
|
j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)
|
||||||
goType = reflect.TypeOf(tb.GoTypes[j])
|
goType = reflect.TypeOf(tb.GoTypes[j])
|
||||||
depIdx++
|
depIdx++
|
||||||
@@ -242,22 +241,22 @@ func (tb Builder) Build() (out Out) {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
var goTypeForPBKind = map[pref.Kind]reflect.Type{
|
var goTypeForPBKind = map[protoreflect.Kind]reflect.Type{
|
||||||
pref.BoolKind: reflect.TypeOf(bool(false)),
|
protoreflect.BoolKind: reflect.TypeOf(bool(false)),
|
||||||
pref.Int32Kind: reflect.TypeOf(int32(0)),
|
protoreflect.Int32Kind: reflect.TypeOf(int32(0)),
|
||||||
pref.Sint32Kind: reflect.TypeOf(int32(0)),
|
protoreflect.Sint32Kind: reflect.TypeOf(int32(0)),
|
||||||
pref.Sfixed32Kind: reflect.TypeOf(int32(0)),
|
protoreflect.Sfixed32Kind: reflect.TypeOf(int32(0)),
|
||||||
pref.Int64Kind: reflect.TypeOf(int64(0)),
|
protoreflect.Int64Kind: reflect.TypeOf(int64(0)),
|
||||||
pref.Sint64Kind: reflect.TypeOf(int64(0)),
|
protoreflect.Sint64Kind: reflect.TypeOf(int64(0)),
|
||||||
pref.Sfixed64Kind: reflect.TypeOf(int64(0)),
|
protoreflect.Sfixed64Kind: reflect.TypeOf(int64(0)),
|
||||||
pref.Uint32Kind: reflect.TypeOf(uint32(0)),
|
protoreflect.Uint32Kind: reflect.TypeOf(uint32(0)),
|
||||||
pref.Fixed32Kind: reflect.TypeOf(uint32(0)),
|
protoreflect.Fixed32Kind: reflect.TypeOf(uint32(0)),
|
||||||
pref.Uint64Kind: reflect.TypeOf(uint64(0)),
|
protoreflect.Uint64Kind: reflect.TypeOf(uint64(0)),
|
||||||
pref.Fixed64Kind: reflect.TypeOf(uint64(0)),
|
protoreflect.Fixed64Kind: reflect.TypeOf(uint64(0)),
|
||||||
pref.FloatKind: reflect.TypeOf(float32(0)),
|
protoreflect.FloatKind: reflect.TypeOf(float32(0)),
|
||||||
pref.DoubleKind: reflect.TypeOf(float64(0)),
|
protoreflect.DoubleKind: reflect.TypeOf(float64(0)),
|
||||||
pref.StringKind: reflect.TypeOf(string("")),
|
protoreflect.StringKind: reflect.TypeOf(string("")),
|
||||||
pref.BytesKind: reflect.TypeOf([]byte(nil)),
|
protoreflect.BytesKind: reflect.TypeOf([]byte(nil)),
|
||||||
}
|
}
|
||||||
|
|
||||||
type depIdxs []int32
|
type depIdxs []int32
|
||||||
@@ -274,13 +273,13 @@ type (
|
|||||||
fileRegistry
|
fileRegistry
|
||||||
}
|
}
|
||||||
fileRegistry interface {
|
fileRegistry interface {
|
||||||
FindFileByPath(string) (pref.FileDescriptor, error)
|
FindFileByPath(string) (protoreflect.FileDescriptor, error)
|
||||||
FindDescriptorByName(pref.FullName) (pref.Descriptor, error)
|
FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
|
||||||
RegisterFile(pref.FileDescriptor) error
|
RegisterFile(protoreflect.FileDescriptor) error
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (r *resolverByIndex) FindEnumByIndex(i, j int32, es []fdesc.Enum, ms []fdesc.Message) pref.EnumDescriptor {
|
func (r *resolverByIndex) FindEnumByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.EnumDescriptor {
|
||||||
if depIdx := int(r.depIdxs.Get(i, j)); int(depIdx) < len(es)+len(ms) {
|
if depIdx := int(r.depIdxs.Get(i, j)); int(depIdx) < len(es)+len(ms) {
|
||||||
return &es[depIdx]
|
return &es[depIdx]
|
||||||
} else {
|
} else {
|
||||||
@@ -288,7 +287,7 @@ func (r *resolverByIndex) FindEnumByIndex(i, j int32, es []fdesc.Enum, ms []fdes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *resolverByIndex) FindMessageByIndex(i, j int32, es []fdesc.Enum, ms []fdesc.Message) pref.MessageDescriptor {
|
func (r *resolverByIndex) FindMessageByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.MessageDescriptor {
|
||||||
if depIdx := int(r.depIdxs.Get(i, j)); depIdx < len(es)+len(ms) {
|
if depIdx := int(r.depIdxs.Get(i, j)); depIdx < len(es)+len(ms) {
|
||||||
return &ms[depIdx-len(es)]
|
return &ms[depIdx-len(es)]
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+114
-24
@@ -50,6 +50,7 @@ const (
|
|||||||
FileDescriptorProto_Options_field_name protoreflect.Name = "options"
|
FileDescriptorProto_Options_field_name protoreflect.Name = "options"
|
||||||
FileDescriptorProto_SourceCodeInfo_field_name protoreflect.Name = "source_code_info"
|
FileDescriptorProto_SourceCodeInfo_field_name protoreflect.Name = "source_code_info"
|
||||||
FileDescriptorProto_Syntax_field_name protoreflect.Name = "syntax"
|
FileDescriptorProto_Syntax_field_name protoreflect.Name = "syntax"
|
||||||
|
FileDescriptorProto_Edition_field_name protoreflect.Name = "edition"
|
||||||
|
|
||||||
FileDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.name"
|
FileDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.name"
|
||||||
FileDescriptorProto_Package_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.package"
|
FileDescriptorProto_Package_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.package"
|
||||||
@@ -63,6 +64,7 @@ const (
|
|||||||
FileDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.options"
|
FileDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.options"
|
||||||
FileDescriptorProto_SourceCodeInfo_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.source_code_info"
|
FileDescriptorProto_SourceCodeInfo_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.source_code_info"
|
||||||
FileDescriptorProto_Syntax_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.syntax"
|
FileDescriptorProto_Syntax_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.syntax"
|
||||||
|
FileDescriptorProto_Edition_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.edition"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.FileDescriptorProto.
|
// Field numbers for google.protobuf.FileDescriptorProto.
|
||||||
@@ -79,6 +81,7 @@ const (
|
|||||||
FileDescriptorProto_Options_field_number protoreflect.FieldNumber = 8
|
FileDescriptorProto_Options_field_number protoreflect.FieldNumber = 8
|
||||||
FileDescriptorProto_SourceCodeInfo_field_number protoreflect.FieldNumber = 9
|
FileDescriptorProto_SourceCodeInfo_field_number protoreflect.FieldNumber = 9
|
||||||
FileDescriptorProto_Syntax_field_number protoreflect.FieldNumber = 12
|
FileDescriptorProto_Syntax_field_number protoreflect.FieldNumber = 12
|
||||||
|
FileDescriptorProto_Edition_field_number protoreflect.FieldNumber = 13
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.DescriptorProto.
|
// Names for google.protobuf.DescriptorProto.
|
||||||
@@ -180,13 +183,58 @@ const (
|
|||||||
// Field names for google.protobuf.ExtensionRangeOptions.
|
// Field names for google.protobuf.ExtensionRangeOptions.
|
||||||
const (
|
const (
|
||||||
ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration"
|
||||||
|
ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification"
|
||||||
|
|
||||||
ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option"
|
ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option"
|
||||||
|
ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration"
|
||||||
|
ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.ExtensionRangeOptions.
|
// Field numbers for google.protobuf.ExtensionRangeOptions.
|
||||||
const (
|
const (
|
||||||
ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
|
ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2
|
||||||
|
ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState.
|
||||||
|
const (
|
||||||
|
ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState"
|
||||||
|
ExtensionRangeOptions_VerificationState_enum_name = "VerificationState"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Names for google.protobuf.ExtensionRangeOptions.Declaration.
|
||||||
|
const (
|
||||||
|
ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration"
|
||||||
|
ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field names for google.protobuf.ExtensionRangeOptions.Declaration.
|
||||||
|
const (
|
||||||
|
ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number"
|
||||||
|
ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name"
|
||||||
|
ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type"
|
||||||
|
ExtensionRangeOptions_Declaration_IsRepeated_field_name protoreflect.Name = "is_repeated"
|
||||||
|
ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved"
|
||||||
|
ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated"
|
||||||
|
|
||||||
|
ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number"
|
||||||
|
ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name"
|
||||||
|
ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type"
|
||||||
|
ExtensionRangeOptions_Declaration_IsRepeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.is_repeated"
|
||||||
|
ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved"
|
||||||
|
ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration.
|
||||||
|
const (
|
||||||
|
ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1
|
||||||
|
ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2
|
||||||
|
ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3
|
||||||
|
ExtensionRangeOptions_Declaration_IsRepeated_field_number protoreflect.FieldNumber = 4
|
||||||
|
ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5
|
||||||
|
ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.FieldDescriptorProto.
|
// Names for google.protobuf.FieldDescriptorProto.
|
||||||
@@ -494,26 +542,29 @@ const (
|
|||||||
|
|
||||||
// Field names for google.protobuf.MessageOptions.
|
// Field names for google.protobuf.MessageOptions.
|
||||||
const (
|
const (
|
||||||
MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format"
|
MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format"
|
||||||
MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor"
|
MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor"
|
||||||
MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry"
|
MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry"
|
||||||
MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
|
||||||
|
MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format"
|
MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format"
|
||||||
MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor"
|
MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor"
|
||||||
MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated"
|
MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated"
|
||||||
MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry"
|
MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry"
|
||||||
MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option"
|
MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts"
|
||||||
|
MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.MessageOptions.
|
// Field numbers for google.protobuf.MessageOptions.
|
||||||
const (
|
const (
|
||||||
MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1
|
MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1
|
||||||
MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2
|
MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2
|
||||||
MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3
|
MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3
|
||||||
MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7
|
MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7
|
||||||
MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11
|
||||||
|
MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.FieldOptions.
|
// Names for google.protobuf.FieldOptions.
|
||||||
@@ -528,16 +579,26 @@ const (
|
|||||||
FieldOptions_Packed_field_name protoreflect.Name = "packed"
|
FieldOptions_Packed_field_name protoreflect.Name = "packed"
|
||||||
FieldOptions_Jstype_field_name protoreflect.Name = "jstype"
|
FieldOptions_Jstype_field_name protoreflect.Name = "jstype"
|
||||||
FieldOptions_Lazy_field_name protoreflect.Name = "lazy"
|
FieldOptions_Lazy_field_name protoreflect.Name = "lazy"
|
||||||
|
FieldOptions_UnverifiedLazy_field_name protoreflect.Name = "unverified_lazy"
|
||||||
FieldOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
FieldOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
FieldOptions_Weak_field_name protoreflect.Name = "weak"
|
FieldOptions_Weak_field_name protoreflect.Name = "weak"
|
||||||
|
FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
|
||||||
|
FieldOptions_Retention_field_name protoreflect.Name = "retention"
|
||||||
|
FieldOptions_Target_field_name protoreflect.Name = "target"
|
||||||
|
FieldOptions_Targets_field_name protoreflect.Name = "targets"
|
||||||
FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype"
|
FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype"
|
||||||
FieldOptions_Packed_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.packed"
|
FieldOptions_Packed_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.packed"
|
||||||
FieldOptions_Jstype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.jstype"
|
FieldOptions_Jstype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.jstype"
|
||||||
FieldOptions_Lazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.lazy"
|
FieldOptions_Lazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.lazy"
|
||||||
|
FieldOptions_UnverifiedLazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.unverified_lazy"
|
||||||
FieldOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.deprecated"
|
FieldOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.deprecated"
|
||||||
FieldOptions_Weak_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.weak"
|
FieldOptions_Weak_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.weak"
|
||||||
|
FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact"
|
||||||
|
FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention"
|
||||||
|
FieldOptions_Target_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.target"
|
||||||
|
FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets"
|
||||||
FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option"
|
FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -547,8 +608,13 @@ const (
|
|||||||
FieldOptions_Packed_field_number protoreflect.FieldNumber = 2
|
FieldOptions_Packed_field_number protoreflect.FieldNumber = 2
|
||||||
FieldOptions_Jstype_field_number protoreflect.FieldNumber = 6
|
FieldOptions_Jstype_field_number protoreflect.FieldNumber = 6
|
||||||
FieldOptions_Lazy_field_number protoreflect.FieldNumber = 5
|
FieldOptions_Lazy_field_number protoreflect.FieldNumber = 5
|
||||||
|
FieldOptions_UnverifiedLazy_field_number protoreflect.FieldNumber = 15
|
||||||
FieldOptions_Deprecated_field_number protoreflect.FieldNumber = 3
|
FieldOptions_Deprecated_field_number protoreflect.FieldNumber = 3
|
||||||
FieldOptions_Weak_field_number protoreflect.FieldNumber = 10
|
FieldOptions_Weak_field_number protoreflect.FieldNumber = 10
|
||||||
|
FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16
|
||||||
|
FieldOptions_Retention_field_number protoreflect.FieldNumber = 17
|
||||||
|
FieldOptions_Target_field_number protoreflect.FieldNumber = 18
|
||||||
|
FieldOptions_Targets_field_number protoreflect.FieldNumber = 19
|
||||||
FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -564,6 +630,18 @@ const (
|
|||||||
FieldOptions_JSType_enum_name = "JSType"
|
FieldOptions_JSType_enum_name = "JSType"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FieldOptions.OptionRetention.
|
||||||
|
const (
|
||||||
|
FieldOptions_OptionRetention_enum_fullname = "google.protobuf.FieldOptions.OptionRetention"
|
||||||
|
FieldOptions_OptionRetention_enum_name = "OptionRetention"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FieldOptions.OptionTargetType.
|
||||||
|
const (
|
||||||
|
FieldOptions_OptionTargetType_enum_fullname = "google.protobuf.FieldOptions.OptionTargetType"
|
||||||
|
FieldOptions_OptionTargetType_enum_name = "OptionTargetType"
|
||||||
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.OneofOptions.
|
// Names for google.protobuf.OneofOptions.
|
||||||
const (
|
const (
|
||||||
OneofOptions_message_name protoreflect.Name = "OneofOptions"
|
OneofOptions_message_name protoreflect.Name = "OneofOptions"
|
||||||
@@ -590,20 +668,23 @@ const (
|
|||||||
|
|
||||||
// Field names for google.protobuf.EnumOptions.
|
// Field names for google.protobuf.EnumOptions.
|
||||||
const (
|
const (
|
||||||
EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias"
|
EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias"
|
||||||
EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
|
||||||
|
EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias"
|
EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias"
|
||||||
EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated"
|
EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated"
|
||||||
EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option"
|
EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts"
|
||||||
|
EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.EnumOptions.
|
// Field numbers for google.protobuf.EnumOptions.
|
||||||
const (
|
const (
|
||||||
EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2
|
EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2
|
||||||
EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3
|
EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3
|
||||||
EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6
|
||||||
|
EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.EnumValueOptions.
|
// Names for google.protobuf.EnumValueOptions.
|
||||||
@@ -813,11 +894,13 @@ const (
|
|||||||
GeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = "source_file"
|
GeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = "source_file"
|
||||||
GeneratedCodeInfo_Annotation_Begin_field_name protoreflect.Name = "begin"
|
GeneratedCodeInfo_Annotation_Begin_field_name protoreflect.Name = "begin"
|
||||||
GeneratedCodeInfo_Annotation_End_field_name protoreflect.Name = "end"
|
GeneratedCodeInfo_Annotation_End_field_name protoreflect.Name = "end"
|
||||||
|
GeneratedCodeInfo_Annotation_Semantic_field_name protoreflect.Name = "semantic"
|
||||||
|
|
||||||
GeneratedCodeInfo_Annotation_Path_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.path"
|
GeneratedCodeInfo_Annotation_Path_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.path"
|
||||||
GeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.source_file"
|
GeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.source_file"
|
||||||
GeneratedCodeInfo_Annotation_Begin_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.begin"
|
GeneratedCodeInfo_Annotation_Begin_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.begin"
|
||||||
GeneratedCodeInfo_Annotation_End_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.end"
|
GeneratedCodeInfo_Annotation_End_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.end"
|
||||||
|
GeneratedCodeInfo_Annotation_Semantic_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.semantic"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.GeneratedCodeInfo.Annotation.
|
// Field numbers for google.protobuf.GeneratedCodeInfo.Annotation.
|
||||||
@@ -826,4 +909,11 @@ const (
|
|||||||
GeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2
|
GeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2
|
||||||
GeneratedCodeInfo_Annotation_Begin_field_number protoreflect.FieldNumber = 3
|
GeneratedCodeInfo_Annotation_Begin_field_number protoreflect.FieldNumber = 3
|
||||||
GeneratedCodeInfo_Annotation_End_field_number protoreflect.FieldNumber = 4
|
GeneratedCodeInfo_Annotation_End_field_number protoreflect.FieldNumber = 4
|
||||||
|
GeneratedCodeInfo_Annotation_Semantic_field_number protoreflect.FieldNumber = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.GeneratedCodeInfo.Annotation.Semantic.
|
||||||
|
const (
|
||||||
|
GeneratedCodeInfo_Annotation_Semantic_enum_fullname = "google.protobuf.GeneratedCodeInfo.Annotation.Semantic"
|
||||||
|
GeneratedCodeInfo_Annotation_Semantic_enum_name = "Semantic"
|
||||||
)
|
)
|
||||||
|
|||||||
+6
@@ -32,6 +32,7 @@ const (
|
|||||||
Type_Options_field_name protoreflect.Name = "options"
|
Type_Options_field_name protoreflect.Name = "options"
|
||||||
Type_SourceContext_field_name protoreflect.Name = "source_context"
|
Type_SourceContext_field_name protoreflect.Name = "source_context"
|
||||||
Type_Syntax_field_name protoreflect.Name = "syntax"
|
Type_Syntax_field_name protoreflect.Name = "syntax"
|
||||||
|
Type_Edition_field_name protoreflect.Name = "edition"
|
||||||
|
|
||||||
Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name"
|
Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name"
|
||||||
Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields"
|
Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields"
|
||||||
@@ -39,6 +40,7 @@ const (
|
|||||||
Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options"
|
Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options"
|
||||||
Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context"
|
Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context"
|
||||||
Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax"
|
Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax"
|
||||||
|
Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.Type.
|
// Field numbers for google.protobuf.Type.
|
||||||
@@ -49,6 +51,7 @@ const (
|
|||||||
Type_Options_field_number protoreflect.FieldNumber = 4
|
Type_Options_field_number protoreflect.FieldNumber = 4
|
||||||
Type_SourceContext_field_number protoreflect.FieldNumber = 5
|
Type_SourceContext_field_number protoreflect.FieldNumber = 5
|
||||||
Type_Syntax_field_number protoreflect.FieldNumber = 6
|
Type_Syntax_field_number protoreflect.FieldNumber = 6
|
||||||
|
Type_Edition_field_number protoreflect.FieldNumber = 7
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.Field.
|
// Names for google.protobuf.Field.
|
||||||
@@ -121,12 +124,14 @@ const (
|
|||||||
Enum_Options_field_name protoreflect.Name = "options"
|
Enum_Options_field_name protoreflect.Name = "options"
|
||||||
Enum_SourceContext_field_name protoreflect.Name = "source_context"
|
Enum_SourceContext_field_name protoreflect.Name = "source_context"
|
||||||
Enum_Syntax_field_name protoreflect.Name = "syntax"
|
Enum_Syntax_field_name protoreflect.Name = "syntax"
|
||||||
|
Enum_Edition_field_name protoreflect.Name = "edition"
|
||||||
|
|
||||||
Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name"
|
Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name"
|
||||||
Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue"
|
Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue"
|
||||||
Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options"
|
Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options"
|
||||||
Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context"
|
Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context"
|
||||||
Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax"
|
Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax"
|
||||||
|
Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.Enum.
|
// Field numbers for google.protobuf.Enum.
|
||||||
@@ -136,6 +141,7 @@ const (
|
|||||||
Enum_Options_field_number protoreflect.FieldNumber = 3
|
Enum_Options_field_number protoreflect.FieldNumber = 3
|
||||||
Enum_SourceContext_field_number protoreflect.FieldNumber = 4
|
Enum_SourceContext_field_number protoreflect.FieldNumber = 4
|
||||||
Enum_Syntax_field_number protoreflect.FieldNumber = 5
|
Enum_Syntax_field_number protoreflect.FieldNumber = 5
|
||||||
|
Enum_Edition_field_number protoreflect.FieldNumber = 6
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.EnumValue.
|
// Names for google.protobuf.EnumValue.
|
||||||
|
|||||||
+21
-21
@@ -12,8 +12,8 @@ import (
|
|||||||
"google.golang.org/protobuf/encoding/prototext"
|
"google.golang.org/protobuf/encoding/prototext"
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Export is a zero-length named type that exists only to export a set of
|
// Export is a zero-length named type that exists only to export a set of
|
||||||
@@ -32,11 +32,11 @@ type enum = interface{}
|
|||||||
|
|
||||||
// EnumOf returns the protoreflect.Enum interface over e.
|
// EnumOf returns the protoreflect.Enum interface over e.
|
||||||
// It returns nil if e is nil.
|
// It returns nil if e is nil.
|
||||||
func (Export) EnumOf(e enum) pref.Enum {
|
func (Export) EnumOf(e enum) protoreflect.Enum {
|
||||||
switch e := e.(type) {
|
switch e := e.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return nil
|
return nil
|
||||||
case pref.Enum:
|
case protoreflect.Enum:
|
||||||
return e
|
return e
|
||||||
default:
|
default:
|
||||||
return legacyWrapEnum(reflect.ValueOf(e))
|
return legacyWrapEnum(reflect.ValueOf(e))
|
||||||
@@ -45,11 +45,11 @@ func (Export) EnumOf(e enum) pref.Enum {
|
|||||||
|
|
||||||
// EnumDescriptorOf returns the protoreflect.EnumDescriptor for e.
|
// EnumDescriptorOf returns the protoreflect.EnumDescriptor for e.
|
||||||
// It returns nil if e is nil.
|
// It returns nil if e is nil.
|
||||||
func (Export) EnumDescriptorOf(e enum) pref.EnumDescriptor {
|
func (Export) EnumDescriptorOf(e enum) protoreflect.EnumDescriptor {
|
||||||
switch e := e.(type) {
|
switch e := e.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return nil
|
return nil
|
||||||
case pref.Enum:
|
case protoreflect.Enum:
|
||||||
return e.Descriptor()
|
return e.Descriptor()
|
||||||
default:
|
default:
|
||||||
return LegacyLoadEnumDesc(reflect.TypeOf(e))
|
return LegacyLoadEnumDesc(reflect.TypeOf(e))
|
||||||
@@ -58,11 +58,11 @@ func (Export) EnumDescriptorOf(e enum) pref.EnumDescriptor {
|
|||||||
|
|
||||||
// EnumTypeOf returns the protoreflect.EnumType for e.
|
// EnumTypeOf returns the protoreflect.EnumType for e.
|
||||||
// It returns nil if e is nil.
|
// It returns nil if e is nil.
|
||||||
func (Export) EnumTypeOf(e enum) pref.EnumType {
|
func (Export) EnumTypeOf(e enum) protoreflect.EnumType {
|
||||||
switch e := e.(type) {
|
switch e := e.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return nil
|
return nil
|
||||||
case pref.Enum:
|
case protoreflect.Enum:
|
||||||
return e.Type()
|
return e.Type()
|
||||||
default:
|
default:
|
||||||
return legacyLoadEnumType(reflect.TypeOf(e))
|
return legacyLoadEnumType(reflect.TypeOf(e))
|
||||||
@@ -71,7 +71,7 @@ func (Export) EnumTypeOf(e enum) pref.EnumType {
|
|||||||
|
|
||||||
// EnumStringOf returns the enum value as a string, either as the name if
|
// EnumStringOf returns the enum value as a string, either as the name if
|
||||||
// the number is resolvable, or the number formatted as a string.
|
// the number is resolvable, or the number formatted as a string.
|
||||||
func (Export) EnumStringOf(ed pref.EnumDescriptor, n pref.EnumNumber) string {
|
func (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNumber) string {
|
||||||
ev := ed.Values().ByNumber(n)
|
ev := ed.Values().ByNumber(n)
|
||||||
if ev != nil {
|
if ev != nil {
|
||||||
return string(ev.Name())
|
return string(ev.Name())
|
||||||
@@ -84,7 +84,7 @@ func (Export) EnumStringOf(ed pref.EnumDescriptor, n pref.EnumNumber) string {
|
|||||||
type message = interface{}
|
type message = interface{}
|
||||||
|
|
||||||
// legacyMessageWrapper wraps a v2 message as a v1 message.
|
// legacyMessageWrapper wraps a v2 message as a v1 message.
|
||||||
type legacyMessageWrapper struct{ m pref.ProtoMessage }
|
type legacyMessageWrapper struct{ m protoreflect.ProtoMessage }
|
||||||
|
|
||||||
func (m legacyMessageWrapper) Reset() { proto.Reset(m.m) }
|
func (m legacyMessageWrapper) Reset() { proto.Reset(m.m) }
|
||||||
func (m legacyMessageWrapper) String() string { return Export{}.MessageStringOf(m.m) }
|
func (m legacyMessageWrapper) String() string { return Export{}.MessageStringOf(m.m) }
|
||||||
@@ -92,30 +92,30 @@ func (m legacyMessageWrapper) ProtoMessage() {}
|
|||||||
|
|
||||||
// ProtoMessageV1Of converts either a v1 or v2 message to a v1 message.
|
// ProtoMessageV1Of converts either a v1 or v2 message to a v1 message.
|
||||||
// It returns nil if m is nil.
|
// It returns nil if m is nil.
|
||||||
func (Export) ProtoMessageV1Of(m message) piface.MessageV1 {
|
func (Export) ProtoMessageV1Of(m message) protoiface.MessageV1 {
|
||||||
switch mv := m.(type) {
|
switch mv := m.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return nil
|
return nil
|
||||||
case piface.MessageV1:
|
case protoiface.MessageV1:
|
||||||
return mv
|
return mv
|
||||||
case unwrapper:
|
case unwrapper:
|
||||||
return Export{}.ProtoMessageV1Of(mv.protoUnwrap())
|
return Export{}.ProtoMessageV1Of(mv.protoUnwrap())
|
||||||
case pref.ProtoMessage:
|
case protoreflect.ProtoMessage:
|
||||||
return legacyMessageWrapper{mv}
|
return legacyMessageWrapper{mv}
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m))
|
panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Export) protoMessageV2Of(m message) pref.ProtoMessage {
|
func (Export) protoMessageV2Of(m message) protoreflect.ProtoMessage {
|
||||||
switch mv := m.(type) {
|
switch mv := m.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return nil
|
return nil
|
||||||
case pref.ProtoMessage:
|
case protoreflect.ProtoMessage:
|
||||||
return mv
|
return mv
|
||||||
case legacyMessageWrapper:
|
case legacyMessageWrapper:
|
||||||
return mv.m
|
return mv.m
|
||||||
case piface.MessageV1:
|
case protoiface.MessageV1:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m))
|
panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m))
|
||||||
@@ -124,7 +124,7 @@ func (Export) protoMessageV2Of(m message) pref.ProtoMessage {
|
|||||||
|
|
||||||
// ProtoMessageV2Of converts either a v1 or v2 message to a v2 message.
|
// ProtoMessageV2Of converts either a v1 or v2 message to a v2 message.
|
||||||
// It returns nil if m is nil.
|
// It returns nil if m is nil.
|
||||||
func (Export) ProtoMessageV2Of(m message) pref.ProtoMessage {
|
func (Export) ProtoMessageV2Of(m message) protoreflect.ProtoMessage {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -136,7 +136,7 @@ func (Export) ProtoMessageV2Of(m message) pref.ProtoMessage {
|
|||||||
|
|
||||||
// MessageOf returns the protoreflect.Message interface over m.
|
// MessageOf returns the protoreflect.Message interface over m.
|
||||||
// It returns nil if m is nil.
|
// It returns nil if m is nil.
|
||||||
func (Export) MessageOf(m message) pref.Message {
|
func (Export) MessageOf(m message) protoreflect.Message {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ func (Export) MessageOf(m message) pref.Message {
|
|||||||
|
|
||||||
// MessageDescriptorOf returns the protoreflect.MessageDescriptor for m.
|
// MessageDescriptorOf returns the protoreflect.MessageDescriptor for m.
|
||||||
// It returns nil if m is nil.
|
// It returns nil if m is nil.
|
||||||
func (Export) MessageDescriptorOf(m message) pref.MessageDescriptor {
|
func (Export) MessageDescriptorOf(m message) protoreflect.MessageDescriptor {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -160,7 +160,7 @@ func (Export) MessageDescriptorOf(m message) pref.MessageDescriptor {
|
|||||||
|
|
||||||
// MessageTypeOf returns the protoreflect.MessageType for m.
|
// MessageTypeOf returns the protoreflect.MessageType for m.
|
||||||
// It returns nil if m is nil.
|
// It returns nil if m is nil.
|
||||||
func (Export) MessageTypeOf(m message) pref.MessageType {
|
func (Export) MessageTypeOf(m message) protoreflect.MessageType {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -172,6 +172,6 @@ func (Export) MessageTypeOf(m message) pref.MessageType {
|
|||||||
|
|
||||||
// MessageStringOf returns the message value as a string,
|
// MessageStringOf returns the message value as a string,
|
||||||
// which is the message serialized in the protobuf text format.
|
// which is the message serialized in the protobuf text format.
|
||||||
func (Export) MessageStringOf(m pref.ProtoMessage) string {
|
func (Export) MessageStringOf(m protoreflect.ProtoMessage) string {
|
||||||
return prototext.MarshalOptions{Multiline: false}.Format(m)
|
return prototext.MarshalOptions{Multiline: false}.Format(m)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -8,18 +8,18 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (mi *MessageInfo) checkInitialized(in piface.CheckInitializedInput) (piface.CheckInitializedOutput, error) {
|
func (mi *MessageInfo) checkInitialized(in protoiface.CheckInitializedInput) (protoiface.CheckInitializedOutput, error) {
|
||||||
var p pointer
|
var p pointer
|
||||||
if ms, ok := in.Message.(*messageState); ok {
|
if ms, ok := in.Message.(*messageState); ok {
|
||||||
p = ms.pointer()
|
p = ms.pointer()
|
||||||
} else {
|
} else {
|
||||||
p = in.Message.(*messageReflectWrapper).pointer()
|
p = in.Message.(*messageReflectWrapper).pointer()
|
||||||
}
|
}
|
||||||
return piface.CheckInitializedOutput{}, mi.checkInitializedPointer(p)
|
return protoiface.CheckInitializedOutput{}, mi.checkInitializedPointer(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mi *MessageInfo) checkInitializedPointer(p pointer) error {
|
func (mi *MessageInfo) checkInitializedPointer(p pointer) error {
|
||||||
@@ -90,7 +90,7 @@ var (
|
|||||||
// needsInitCheck reports whether a message needs to be checked for partial initialization.
|
// needsInitCheck reports whether a message needs to be checked for partial initialization.
|
||||||
//
|
//
|
||||||
// It returns true if the message transitively includes any required or extension fields.
|
// It returns true if the message transitively includes any required or extension fields.
|
||||||
func needsInitCheck(md pref.MessageDescriptor) bool {
|
func needsInitCheck(md protoreflect.MessageDescriptor) bool {
|
||||||
if v, ok := needsInitCheckMap.Load(md); ok {
|
if v, ok := needsInitCheckMap.Load(md); ok {
|
||||||
if has, ok := v.(bool); ok {
|
if has, ok := v.(bool); ok {
|
||||||
return has
|
return has
|
||||||
@@ -101,7 +101,7 @@ func needsInitCheck(md pref.MessageDescriptor) bool {
|
|||||||
return needsInitCheckLocked(md)
|
return needsInitCheckLocked(md)
|
||||||
}
|
}
|
||||||
|
|
||||||
func needsInitCheckLocked(md pref.MessageDescriptor) (has bool) {
|
func needsInitCheckLocked(md protoreflect.MessageDescriptor) (has bool) {
|
||||||
if v, ok := needsInitCheckMap.Load(md); ok {
|
if v, ok := needsInitCheckMap.Load(md); ok {
|
||||||
// If has is true, we've previously determined that this message
|
// If has is true, we've previously determined that this message
|
||||||
// needs init checks.
|
// needs init checks.
|
||||||
|
|||||||
+18
-18
@@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type extensionFieldInfo struct {
|
type extensionFieldInfo struct {
|
||||||
@@ -23,7 +23,7 @@ type extensionFieldInfo struct {
|
|||||||
|
|
||||||
var legacyExtensionFieldInfoCache sync.Map // map[protoreflect.ExtensionType]*extensionFieldInfo
|
var legacyExtensionFieldInfoCache sync.Map // map[protoreflect.ExtensionType]*extensionFieldInfo
|
||||||
|
|
||||||
func getExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo {
|
func getExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo {
|
||||||
if xi, ok := xt.(*ExtensionInfo); ok {
|
if xi, ok := xt.(*ExtensionInfo); ok {
|
||||||
xi.lazyInit()
|
xi.lazyInit()
|
||||||
return xi.info
|
return xi.info
|
||||||
@@ -32,7 +32,7 @@ func getExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// legacyLoadExtensionFieldInfo dynamically loads a *ExtensionInfo for xt.
|
// legacyLoadExtensionFieldInfo dynamically loads a *ExtensionInfo for xt.
|
||||||
func legacyLoadExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo {
|
func legacyLoadExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo {
|
||||||
if xi, ok := legacyExtensionFieldInfoCache.Load(xt); ok {
|
if xi, ok := legacyExtensionFieldInfoCache.Load(xt); ok {
|
||||||
return xi.(*extensionFieldInfo)
|
return xi.(*extensionFieldInfo)
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ func legacyLoadExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo {
|
|||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeExtensionFieldInfo(xd pref.ExtensionDescriptor) *extensionFieldInfo {
|
func makeExtensionFieldInfo(xd protoreflect.ExtensionDescriptor) *extensionFieldInfo {
|
||||||
var wiretag uint64
|
var wiretag uint64
|
||||||
if !xd.IsPacked() {
|
if !xd.IsPacked() {
|
||||||
wiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()])
|
wiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()])
|
||||||
@@ -59,10 +59,10 @@ func makeExtensionFieldInfo(xd pref.ExtensionDescriptor) *extensionFieldInfo {
|
|||||||
// This is true for composite types, where we pass in a message, list, or map to fill in,
|
// This is true for composite types, where we pass in a message, list, or map to fill in,
|
||||||
// and for enums, where we pass in a prototype value to specify the concrete enum type.
|
// and for enums, where we pass in a prototype value to specify the concrete enum type.
|
||||||
switch xd.Kind() {
|
switch xd.Kind() {
|
||||||
case pref.MessageKind, pref.GroupKind, pref.EnumKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.EnumKind:
|
||||||
e.unmarshalNeedsValue = true
|
e.unmarshalNeedsValue = true
|
||||||
default:
|
default:
|
||||||
if xd.Cardinality() == pref.Repeated {
|
if xd.Cardinality() == protoreflect.Repeated {
|
||||||
e.unmarshalNeedsValue = true
|
e.unmarshalNeedsValue = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -73,21 +73,21 @@ type lazyExtensionValue struct {
|
|||||||
atomicOnce uint32 // atomically set if value is valid
|
atomicOnce uint32 // atomically set if value is valid
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
xi *extensionFieldInfo
|
xi *extensionFieldInfo
|
||||||
value pref.Value
|
value protoreflect.Value
|
||||||
b []byte
|
b []byte
|
||||||
fn func() pref.Value
|
fn func() protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
type ExtensionField struct {
|
type ExtensionField struct {
|
||||||
typ pref.ExtensionType
|
typ protoreflect.ExtensionType
|
||||||
|
|
||||||
// value is either the value of GetValue,
|
// value is either the value of GetValue,
|
||||||
// or a *lazyExtensionValue that then returns the value of GetValue.
|
// or a *lazyExtensionValue that then returns the value of GetValue.
|
||||||
value pref.Value
|
value protoreflect.Value
|
||||||
lazy *lazyExtensionValue
|
lazy *lazyExtensionValue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ExtensionField) appendLazyBytes(xt pref.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) {
|
func (f *ExtensionField) appendLazyBytes(xt protoreflect.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) {
|
||||||
if f.lazy == nil {
|
if f.lazy == nil {
|
||||||
f.lazy = &lazyExtensionValue{xi: xi}
|
f.lazy = &lazyExtensionValue{xi: xi}
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ func (f *ExtensionField) appendLazyBytes(xt pref.ExtensionType, xi *extensionFie
|
|||||||
f.lazy.b = append(f.lazy.b, b...)
|
f.lazy.b = append(f.lazy.b, b...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ExtensionField) canLazy(xt pref.ExtensionType) bool {
|
func (f *ExtensionField) canLazy(xt protoreflect.ExtensionType) bool {
|
||||||
if f.typ == nil {
|
if f.typ == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ func (f *ExtensionField) lazyInit() {
|
|||||||
|
|
||||||
// Set sets the type and value of the extension field.
|
// Set sets the type and value of the extension field.
|
||||||
// This must not be called concurrently.
|
// This must not be called concurrently.
|
||||||
func (f *ExtensionField) Set(t pref.ExtensionType, v pref.Value) {
|
func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value) {
|
||||||
f.typ = t
|
f.typ = t
|
||||||
f.value = v
|
f.value = v
|
||||||
f.lazy = nil
|
f.lazy = nil
|
||||||
@@ -162,14 +162,14 @@ func (f *ExtensionField) Set(t pref.ExtensionType, v pref.Value) {
|
|||||||
|
|
||||||
// SetLazy sets the type and a value that is to be lazily evaluated upon first use.
|
// SetLazy sets the type and a value that is to be lazily evaluated upon first use.
|
||||||
// This must not be called concurrently.
|
// This must not be called concurrently.
|
||||||
func (f *ExtensionField) SetLazy(t pref.ExtensionType, fn func() pref.Value) {
|
func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value) {
|
||||||
f.typ = t
|
f.typ = t
|
||||||
f.lazy = &lazyExtensionValue{fn: fn}
|
f.lazy = &lazyExtensionValue{fn: fn}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value returns the value of the extension field.
|
// Value returns the value of the extension field.
|
||||||
// This may be called concurrently.
|
// This may be called concurrently.
|
||||||
func (f *ExtensionField) Value() pref.Value {
|
func (f *ExtensionField) Value() protoreflect.Value {
|
||||||
if f.lazy != nil {
|
if f.lazy != nil {
|
||||||
if atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {
|
if atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {
|
||||||
f.lazyInit()
|
f.lazyInit()
|
||||||
@@ -181,7 +181,7 @@ func (f *ExtensionField) Value() pref.Value {
|
|||||||
|
|
||||||
// Type returns the type of the extension field.
|
// Type returns the type of the extension field.
|
||||||
// This may be called concurrently.
|
// This may be called concurrently.
|
||||||
func (f ExtensionField) Type() pref.ExtensionType {
|
func (f ExtensionField) Type() protoreflect.ExtensionType {
|
||||||
return f.typ
|
return f.typ
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ func (f ExtensionField) IsSet() bool {
|
|||||||
|
|
||||||
// IsLazy reports whether a field is lazily encoded.
|
// IsLazy reports whether a field is lazily encoded.
|
||||||
// It is exported for testing.
|
// It is exported for testing.
|
||||||
func IsLazy(m pref.Message, fd pref.FieldDescriptor) bool {
|
func IsLazy(m protoreflect.Message, fd protoreflect.FieldDescriptor) bool {
|
||||||
var mi *MessageInfo
|
var mi *MessageInfo
|
||||||
var p pointer
|
var p pointer
|
||||||
switch m := m.(type) {
|
switch m := m.(type) {
|
||||||
@@ -206,7 +206,7 @@ func IsLazy(m pref.Message, fd pref.FieldDescriptor) bool {
|
|||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
xd, ok := fd.(pref.ExtensionTypeDescriptor)
|
xd, ok := fd.(protoreflect.ExtensionTypeDescriptor)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
+45
-45
@@ -12,9 +12,9 @@ import (
|
|||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
preg "google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
type errInvalidUTF8 struct{}
|
type errInvalidUTF8 struct{}
|
||||||
@@ -30,7 +30,7 @@ func (errInvalidUTF8) Unwrap() error { return errors.Error }
|
|||||||
// to the appropriate field-specific function as necessary.
|
// to the appropriate field-specific function as necessary.
|
||||||
//
|
//
|
||||||
// The unmarshal function is set on each field individually as usual.
|
// The unmarshal function is set on each field individually as usual.
|
||||||
func (mi *MessageInfo) initOneofFieldCoders(od pref.OneofDescriptor, si structInfo) {
|
func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si structInfo) {
|
||||||
fs := si.oneofsByName[od.Name()]
|
fs := si.oneofsByName[od.Name()]
|
||||||
ft := fs.Type
|
ft := fs.Type
|
||||||
oneofFields := make(map[reflect.Type]*coderFieldInfo)
|
oneofFields := make(map[reflect.Type]*coderFieldInfo)
|
||||||
@@ -118,13 +118,13 @@ func (mi *MessageInfo) initOneofFieldCoders(od pref.OneofDescriptor, si structIn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeWeakMessageFieldCoder(fd pref.FieldDescriptor) pointerCoderFuncs {
|
func makeWeakMessageFieldCoder(fd protoreflect.FieldDescriptor) pointerCoderFuncs {
|
||||||
var once sync.Once
|
var once sync.Once
|
||||||
var messageType pref.MessageType
|
var messageType protoreflect.MessageType
|
||||||
lazyInit := func() {
|
lazyInit := func() {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
messageName := fd.Message().FullName()
|
messageName := fd.Message().FullName()
|
||||||
messageType, _ = preg.GlobalTypes.FindMessageByName(messageName)
|
messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@ func makeWeakMessageFieldCoder(fd pref.FieldDescriptor) pointerCoderFuncs {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeMessageFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
func makeMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
||||||
if mi := getMessageInfo(ft); mi != nil {
|
if mi := getMessageInfo(ft); mi != nil {
|
||||||
funcs := pointerCoderFuncs{
|
funcs := pointerCoderFuncs{
|
||||||
size: sizeMessageInfo,
|
size: sizeMessageInfo,
|
||||||
@@ -280,7 +280,7 @@ func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarsh
|
|||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
|
o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
|
||||||
Buf: v,
|
Buf: v,
|
||||||
Message: m.ProtoReflect(),
|
Message: m.ProtoReflect(),
|
||||||
})
|
})
|
||||||
@@ -288,27 +288,27 @@ func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarsh
|
|||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
out.n = n
|
out.n = n
|
||||||
out.initialized = o.Flags&piface.UnmarshalInitialized != 0
|
out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func sizeMessageValue(v pref.Value, tagsize int, opts marshalOptions) int {
|
func sizeMessageValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
return sizeMessage(m, tagsize, opts)
|
return sizeMessage(m, tagsize, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendMessageValue(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
func appendMessageValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
return appendMessage(b, m, wiretag, opts)
|
return appendMessage(b, m, wiretag, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func consumeMessageValue(b []byte, v pref.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) {
|
func consumeMessageValue(b []byte, v protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
out, err := consumeMessage(b, m, wtyp, opts)
|
out, err := consumeMessage(b, m, wtyp, opts)
|
||||||
return v, out, err
|
return v, out, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func isInitMessageValue(v pref.Value) error {
|
func isInitMessageValue(v protoreflect.Value) error {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
return proto.CheckInitialized(m)
|
return proto.CheckInitialized(m)
|
||||||
}
|
}
|
||||||
@@ -321,17 +321,17 @@ var coderMessageValue = valueCoderFuncs{
|
|||||||
merge: mergeMessageValue,
|
merge: mergeMessageValue,
|
||||||
}
|
}
|
||||||
|
|
||||||
func sizeGroupValue(v pref.Value, tagsize int, opts marshalOptions) int {
|
func sizeGroupValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
return sizeGroup(m, tagsize, opts)
|
return sizeGroup(m, tagsize, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendGroupValue(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
func appendGroupValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
return appendGroup(b, m, wiretag, opts)
|
return appendGroup(b, m, wiretag, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func consumeGroupValue(b []byte, v pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) {
|
func consumeGroupValue(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) {
|
||||||
m := v.Message().Interface()
|
m := v.Message().Interface()
|
||||||
out, err := consumeGroup(b, m, num, wtyp, opts)
|
out, err := consumeGroup(b, m, num, wtyp, opts)
|
||||||
return v, out, err
|
return v, out, err
|
||||||
@@ -345,7 +345,7 @@ var coderGroupValue = valueCoderFuncs{
|
|||||||
merge: mergeMessageValue,
|
merge: mergeMessageValue,
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeGroupFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
func makeGroupFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
||||||
num := fd.Number()
|
num := fd.Number()
|
||||||
if mi := getMessageInfo(ft); mi != nil {
|
if mi := getMessageInfo(ft); mi != nil {
|
||||||
funcs := pointerCoderFuncs{
|
funcs := pointerCoderFuncs{
|
||||||
@@ -424,7 +424,7 @@ func consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowir
|
|||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
|
o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
|
||||||
Buf: b,
|
Buf: b,
|
||||||
Message: m.ProtoReflect(),
|
Message: m.ProtoReflect(),
|
||||||
})
|
})
|
||||||
@@ -432,11 +432,11 @@ func consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowir
|
|||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
out.n = n
|
out.n = n
|
||||||
out.initialized = o.Flags&piface.UnmarshalInitialized != 0
|
out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeMessageSliceFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
func makeMessageSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
||||||
if mi := getMessageInfo(ft); mi != nil {
|
if mi := getMessageInfo(ft); mi != nil {
|
||||||
funcs := pointerCoderFuncs{
|
funcs := pointerCoderFuncs{
|
||||||
size: sizeMessageSliceInfo,
|
size: sizeMessageSliceInfo,
|
||||||
@@ -555,7 +555,7 @@ func consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowir
|
|||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
mp := reflect.New(goType.Elem())
|
mp := reflect.New(goType.Elem())
|
||||||
o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
|
o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
|
||||||
Buf: v,
|
Buf: v,
|
||||||
Message: asMessage(mp).ProtoReflect(),
|
Message: asMessage(mp).ProtoReflect(),
|
||||||
})
|
})
|
||||||
@@ -564,7 +564,7 @@ func consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowir
|
|||||||
}
|
}
|
||||||
p.AppendPointerSlice(pointerOfValue(mp))
|
p.AppendPointerSlice(pointerOfValue(mp))
|
||||||
out.n = n
|
out.n = n
|
||||||
out.initialized = o.Flags&piface.UnmarshalInitialized != 0
|
out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,7 +581,7 @@ func isInitMessageSlice(p pointer, goType reflect.Type) error {
|
|||||||
|
|
||||||
// Slices of messages
|
// Slices of messages
|
||||||
|
|
||||||
func sizeMessageSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int {
|
func sizeMessageSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
n := 0
|
n := 0
|
||||||
for i, llen := 0, list.Len(); i < llen; i++ {
|
for i, llen := 0, list.Len(); i < llen; i++ {
|
||||||
@@ -591,7 +591,7 @@ func sizeMessageSliceValue(listv pref.Value, tagsize int, opts marshalOptions) i
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendMessageSliceValue(b []byte, listv pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
func appendMessageSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
mopts := opts.Options()
|
mopts := opts.Options()
|
||||||
for i, llen := 0, list.Len(); i < llen; i++ {
|
for i, llen := 0, list.Len(); i < llen; i++ {
|
||||||
@@ -608,30 +608,30 @@ func appendMessageSliceValue(b []byte, listv pref.Value, wiretag uint64, opts ma
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func consumeMessageSliceValue(b []byte, listv pref.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ pref.Value, out unmarshalOutput, err error) {
|
func consumeMessageSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
if wtyp != protowire.BytesType {
|
if wtyp != protowire.BytesType {
|
||||||
return pref.Value{}, out, errUnknown
|
return protoreflect.Value{}, out, errUnknown
|
||||||
}
|
}
|
||||||
v, n := protowire.ConsumeBytes(b)
|
v, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return pref.Value{}, out, errDecode
|
return protoreflect.Value{}, out, errDecode
|
||||||
}
|
}
|
||||||
m := list.NewElement()
|
m := list.NewElement()
|
||||||
o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
|
o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
|
||||||
Buf: v,
|
Buf: v,
|
||||||
Message: m.Message(),
|
Message: m.Message(),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return pref.Value{}, out, err
|
return protoreflect.Value{}, out, err
|
||||||
}
|
}
|
||||||
list.Append(m)
|
list.Append(m)
|
||||||
out.n = n
|
out.n = n
|
||||||
out.initialized = o.Flags&piface.UnmarshalInitialized != 0
|
out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
|
||||||
return listv, out, nil
|
return listv, out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func isInitMessageSliceValue(listv pref.Value) error {
|
func isInitMessageSliceValue(listv protoreflect.Value) error {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
for i, llen := 0, list.Len(); i < llen; i++ {
|
for i, llen := 0, list.Len(); i < llen; i++ {
|
||||||
m := list.Get(i).Message().Interface()
|
m := list.Get(i).Message().Interface()
|
||||||
@@ -650,7 +650,7 @@ var coderMessageSliceValue = valueCoderFuncs{
|
|||||||
merge: mergeMessageListValue,
|
merge: mergeMessageListValue,
|
||||||
}
|
}
|
||||||
|
|
||||||
func sizeGroupSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int {
|
func sizeGroupSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
n := 0
|
n := 0
|
||||||
for i, llen := 0, list.Len(); i < llen; i++ {
|
for i, llen := 0, list.Len(); i < llen; i++ {
|
||||||
@@ -660,7 +660,7 @@ func sizeGroupSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendGroupSliceValue(b []byte, listv pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
func appendGroupSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
mopts := opts.Options()
|
mopts := opts.Options()
|
||||||
for i, llen := 0, list.Len(); i < llen; i++ {
|
for i, llen := 0, list.Len(); i < llen; i++ {
|
||||||
@@ -676,26 +676,26 @@ func appendGroupSliceValue(b []byte, listv pref.Value, wiretag uint64, opts mars
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func consumeGroupSliceValue(b []byte, listv pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ pref.Value, out unmarshalOutput, err error) {
|
func consumeGroupSliceValue(b []byte, listv protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
|
||||||
list := listv.List()
|
list := listv.List()
|
||||||
if wtyp != protowire.StartGroupType {
|
if wtyp != protowire.StartGroupType {
|
||||||
return pref.Value{}, out, errUnknown
|
return protoreflect.Value{}, out, errUnknown
|
||||||
}
|
}
|
||||||
b, n := protowire.ConsumeGroup(num, b)
|
b, n := protowire.ConsumeGroup(num, b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return pref.Value{}, out, errDecode
|
return protoreflect.Value{}, out, errDecode
|
||||||
}
|
}
|
||||||
m := list.NewElement()
|
m := list.NewElement()
|
||||||
o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
|
o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
|
||||||
Buf: b,
|
Buf: b,
|
||||||
Message: m.Message(),
|
Message: m.Message(),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return pref.Value{}, out, err
|
return protoreflect.Value{}, out, err
|
||||||
}
|
}
|
||||||
list.Append(m)
|
list.Append(m)
|
||||||
out.n = n
|
out.n = n
|
||||||
out.initialized = o.Flags&piface.UnmarshalInitialized != 0
|
out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
|
||||||
return listv, out, nil
|
return listv, out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -707,7 +707,7 @@ var coderGroupSliceValue = valueCoderFuncs{
|
|||||||
merge: mergeMessageListValue,
|
merge: mergeMessageListValue,
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeGroupSliceFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
func makeGroupSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
|
||||||
num := fd.Number()
|
num := fd.Number()
|
||||||
if mi := getMessageInfo(ft); mi != nil {
|
if mi := getMessageInfo(ft); mi != nil {
|
||||||
funcs := pointerCoderFuncs{
|
funcs := pointerCoderFuncs{
|
||||||
@@ -772,7 +772,7 @@ func consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire
|
|||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
mp := reflect.New(goType.Elem())
|
mp := reflect.New(goType.Elem())
|
||||||
o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
|
o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
|
||||||
Buf: b,
|
Buf: b,
|
||||||
Message: asMessage(mp).ProtoReflect(),
|
Message: asMessage(mp).ProtoReflect(),
|
||||||
})
|
})
|
||||||
@@ -781,7 +781,7 @@ func consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire
|
|||||||
}
|
}
|
||||||
p.AppendPointerSlice(pointerOfValue(mp))
|
p.AppendPointerSlice(pointerOfValue(mp))
|
||||||
out.n = n
|
out.n = n
|
||||||
out.initialized = o.Flags&piface.UnmarshalInitialized != 0
|
out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -822,8 +822,8 @@ func consumeGroupSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFie
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func asMessage(v reflect.Value) pref.ProtoMessage {
|
func asMessage(v reflect.Value) protoreflect.ProtoMessage {
|
||||||
if m, ok := v.Interface().(pref.ProtoMessage); ok {
|
if m, ok := v.Interface().(protoreflect.ProtoMessage); ok {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
return legacyWrapMessage(v).Interface()
|
return legacyWrapMessage(v).Interface()
|
||||||
|
|||||||
+10
-10
@@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/genid"
|
"google.golang.org/protobuf/internal/genid"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mapInfo struct {
|
type mapInfo struct {
|
||||||
@@ -19,12 +19,12 @@ type mapInfo struct {
|
|||||||
valWiretag uint64
|
valWiretag uint64
|
||||||
keyFuncs valueCoderFuncs
|
keyFuncs valueCoderFuncs
|
||||||
valFuncs valueCoderFuncs
|
valFuncs valueCoderFuncs
|
||||||
keyZero pref.Value
|
keyZero protoreflect.Value
|
||||||
keyKind pref.Kind
|
keyKind protoreflect.Kind
|
||||||
conv *mapConverter
|
conv *mapConverter
|
||||||
}
|
}
|
||||||
|
|
||||||
func encoderFuncsForMap(fd pref.FieldDescriptor, ft reflect.Type) (valueMessage *MessageInfo, funcs pointerCoderFuncs) {
|
func encoderFuncsForMap(fd protoreflect.FieldDescriptor, ft reflect.Type) (valueMessage *MessageInfo, funcs pointerCoderFuncs) {
|
||||||
// TODO: Consider generating specialized map coders.
|
// TODO: Consider generating specialized map coders.
|
||||||
keyField := fd.MapKey()
|
keyField := fd.MapKey()
|
||||||
valField := fd.MapValue()
|
valField := fd.MapValue()
|
||||||
@@ -44,7 +44,7 @@ func encoderFuncsForMap(fd pref.FieldDescriptor, ft reflect.Type) (valueMessage
|
|||||||
keyKind: keyField.Kind(),
|
keyKind: keyField.Kind(),
|
||||||
conv: conv,
|
conv: conv,
|
||||||
}
|
}
|
||||||
if valField.Kind() == pref.MessageKind {
|
if valField.Kind() == protoreflect.MessageKind {
|
||||||
valueMessage = getMessageInfo(ft.Elem())
|
valueMessage = getMessageInfo(ft.Elem())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,9 +68,9 @@ func encoderFuncsForMap(fd pref.FieldDescriptor, ft reflect.Type) (valueMessage
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
switch valField.Kind() {
|
switch valField.Kind() {
|
||||||
case pref.MessageKind:
|
case protoreflect.MessageKind:
|
||||||
funcs.merge = mergeMapOfMessage
|
funcs.merge = mergeMapOfMessage
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
funcs.merge = mergeMapOfBytes
|
funcs.merge = mergeMapOfBytes
|
||||||
default:
|
default:
|
||||||
funcs.merge = mergeMap
|
funcs.merge = mergeMap
|
||||||
@@ -135,7 +135,7 @@ func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo
|
|||||||
err := errUnknown
|
err := errUnknown
|
||||||
switch num {
|
switch num {
|
||||||
case genid.MapEntry_Key_field_number:
|
case genid.MapEntry_Key_field_number:
|
||||||
var v pref.Value
|
var v protoreflect.Value
|
||||||
var o unmarshalOutput
|
var o unmarshalOutput
|
||||||
v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)
|
v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -144,7 +144,7 @@ func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo
|
|||||||
key = v
|
key = v
|
||||||
n = o.n
|
n = o.n
|
||||||
case genid.MapEntry_Value_field_number:
|
case genid.MapEntry_Value_field_number:
|
||||||
var v pref.Value
|
var v protoreflect.Value
|
||||||
var o unmarshalOutput
|
var o unmarshalOutput
|
||||||
v, o, err = mapi.valFuncs.unmarshal(b, val, num, wtyp, opts)
|
v, o, err = mapi.valFuncs.unmarshal(b, val, num, wtyp, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -192,7 +192,7 @@ func consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi
|
|||||||
err := errUnknown
|
err := errUnknown
|
||||||
switch num {
|
switch num {
|
||||||
case 1:
|
case 1:
|
||||||
var v pref.Value
|
var v protoreflect.Value
|
||||||
var o unmarshalOutput
|
var o unmarshalOutput
|
||||||
v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)
|
v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
+15
-15
@@ -12,15 +12,15 @@ import (
|
|||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/encoding/messageset"
|
"google.golang.org/protobuf/internal/encoding/messageset"
|
||||||
"google.golang.org/protobuf/internal/order"
|
"google.golang.org/protobuf/internal/order"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
// coderMessageInfo contains per-message information used by the fast-path functions.
|
// coderMessageInfo contains per-message information used by the fast-path functions.
|
||||||
// This is a different type from MessageInfo to keep MessageInfo as general-purpose as
|
// This is a different type from MessageInfo to keep MessageInfo as general-purpose as
|
||||||
// possible.
|
// possible.
|
||||||
type coderMessageInfo struct {
|
type coderMessageInfo struct {
|
||||||
methods piface.Methods
|
methods protoiface.Methods
|
||||||
|
|
||||||
orderedCoderFields []*coderFieldInfo
|
orderedCoderFields []*coderFieldInfo
|
||||||
denseCoderFields []*coderFieldInfo
|
denseCoderFields []*coderFieldInfo
|
||||||
@@ -38,13 +38,13 @@ type coderFieldInfo struct {
|
|||||||
funcs pointerCoderFuncs // fast-path per-field functions
|
funcs pointerCoderFuncs // fast-path per-field functions
|
||||||
mi *MessageInfo // field's message
|
mi *MessageInfo // field's message
|
||||||
ft reflect.Type
|
ft reflect.Type
|
||||||
validation validationInfo // information used by message validation
|
validation validationInfo // information used by message validation
|
||||||
num pref.FieldNumber // field number
|
num protoreflect.FieldNumber // field number
|
||||||
offset offset // struct field offset
|
offset offset // struct field offset
|
||||||
wiretag uint64 // field tag (number + wire type)
|
wiretag uint64 // field tag (number + wire type)
|
||||||
tagsize int // size of the varint-encoded tag
|
tagsize int // size of the varint-encoded tag
|
||||||
isPointer bool // true if IsNil may be called on the struct field
|
isPointer bool // true if IsNil may be called on the struct field
|
||||||
isRequired bool // true if field is required
|
isRequired bool // true if field is required
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
||||||
@@ -125,8 +125,8 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
|||||||
funcs: funcs,
|
funcs: funcs,
|
||||||
mi: childMessage,
|
mi: childMessage,
|
||||||
validation: newFieldValidationInfo(mi, si, fd, ft),
|
validation: newFieldValidationInfo(mi, si, fd, ft),
|
||||||
isPointer: fd.Cardinality() == pref.Repeated || fd.HasPresence(),
|
isPointer: fd.Cardinality() == protoreflect.Repeated || fd.HasPresence(),
|
||||||
isRequired: fd.Cardinality() == pref.Required,
|
isRequired: fd.Cardinality() == protoreflect.Required,
|
||||||
}
|
}
|
||||||
mi.orderedCoderFields = append(mi.orderedCoderFields, cf)
|
mi.orderedCoderFields = append(mi.orderedCoderFields, cf)
|
||||||
mi.coderFields[cf.num] = cf
|
mi.coderFields[cf.num] = cf
|
||||||
@@ -149,7 +149,7 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
|||||||
return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num
|
return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num
|
||||||
})
|
})
|
||||||
|
|
||||||
var maxDense pref.FieldNumber
|
var maxDense protoreflect.FieldNumber
|
||||||
for _, cf := range mi.orderedCoderFields {
|
for _, cf := range mi.orderedCoderFields {
|
||||||
if cf.num >= 16 && cf.num >= 2*maxDense {
|
if cf.num >= 16 && cf.num >= 2*maxDense {
|
||||||
break
|
break
|
||||||
@@ -175,12 +175,12 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
|||||||
|
|
||||||
mi.needsInitCheck = needsInitCheck(mi.Desc)
|
mi.needsInitCheck = needsInitCheck(mi.Desc)
|
||||||
if mi.methods.Marshal == nil && mi.methods.Size == nil {
|
if mi.methods.Marshal == nil && mi.methods.Size == nil {
|
||||||
mi.methods.Flags |= piface.SupportMarshalDeterministic
|
mi.methods.Flags |= protoiface.SupportMarshalDeterministic
|
||||||
mi.methods.Marshal = mi.marshal
|
mi.methods.Marshal = mi.marshal
|
||||||
mi.methods.Size = mi.size
|
mi.methods.Size = mi.size
|
||||||
}
|
}
|
||||||
if mi.methods.Unmarshal == nil {
|
if mi.methods.Unmarshal == nil {
|
||||||
mi.methods.Flags |= piface.SupportUnmarshalDiscardUnknown
|
mi.methods.Flags |= protoiface.SupportUnmarshalDiscardUnknown
|
||||||
mi.methods.Unmarshal = mi.unmarshal
|
mi.methods.Unmarshal = mi.unmarshal
|
||||||
}
|
}
|
||||||
if mi.methods.CheckInitialized == nil {
|
if mi.methods.CheckInitialized == nil {
|
||||||
|
|||||||
+145
-145
@@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protowire"
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
// pointerCoderFuncs is a set of pointer encoding functions.
|
// pointerCoderFuncs is a set of pointer encoding functions.
|
||||||
@@ -25,83 +25,83 @@ type pointerCoderFuncs struct {
|
|||||||
|
|
||||||
// valueCoderFuncs is a set of protoreflect.Value encoding functions.
|
// valueCoderFuncs is a set of protoreflect.Value encoding functions.
|
||||||
type valueCoderFuncs struct {
|
type valueCoderFuncs struct {
|
||||||
size func(v pref.Value, tagsize int, opts marshalOptions) int
|
size func(v protoreflect.Value, tagsize int, opts marshalOptions) int
|
||||||
marshal func(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error)
|
marshal func(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error)
|
||||||
unmarshal func(b []byte, v pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error)
|
unmarshal func(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error)
|
||||||
isInit func(v pref.Value) error
|
isInit func(v protoreflect.Value) error
|
||||||
merge func(dst, src pref.Value, opts mergeOptions) pref.Value
|
merge func(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
// fieldCoder returns pointer functions for a field, used for operating on
|
// fieldCoder returns pointer functions for a field, used for operating on
|
||||||
// struct fields.
|
// struct fields.
|
||||||
func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {
|
func fieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {
|
||||||
switch {
|
switch {
|
||||||
case fd.IsMap():
|
case fd.IsMap():
|
||||||
return encoderFuncsForMap(fd, ft)
|
return encoderFuncsForMap(fd, ft)
|
||||||
case fd.Cardinality() == pref.Repeated && !fd.IsPacked():
|
case fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked():
|
||||||
// Repeated fields (not packed).
|
// Repeated fields (not packed).
|
||||||
if ft.Kind() != reflect.Slice {
|
if ft.Kind() != reflect.Slice {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
ft := ft.Elem()
|
ft := ft.Elem()
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if ft.Kind() == reflect.Bool {
|
if ft.Kind() == reflect.Bool {
|
||||||
return nil, coderBoolSlice
|
return nil, coderBoolSlice
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderEnumSlice
|
return nil, coderEnumSlice
|
||||||
}
|
}
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderInt32Slice
|
return nil, coderInt32Slice
|
||||||
}
|
}
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSint32Slice
|
return nil, coderSint32Slice
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderUint32Slice
|
return nil, coderUint32Slice
|
||||||
}
|
}
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderInt64Slice
|
return nil, coderInt64Slice
|
||||||
}
|
}
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSint64Slice
|
return nil, coderSint64Slice
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderUint64Slice
|
return nil, coderUint64Slice
|
||||||
}
|
}
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSfixed32Slice
|
return nil, coderSfixed32Slice
|
||||||
}
|
}
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderFixed32Slice
|
return nil, coderFixed32Slice
|
||||||
}
|
}
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if ft.Kind() == reflect.Float32 {
|
if ft.Kind() == reflect.Float32 {
|
||||||
return nil, coderFloatSlice
|
return nil, coderFloatSlice
|
||||||
}
|
}
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSfixed64Slice
|
return nil, coderSfixed64Slice
|
||||||
}
|
}
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderFixed64Slice
|
return nil, coderFixed64Slice
|
||||||
}
|
}
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if ft.Kind() == reflect.Float64 {
|
if ft.Kind() == reflect.Float64 {
|
||||||
return nil, coderDoubleSlice
|
return nil, coderDoubleSlice
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
||||||
return nil, coderStringSliceValidateUTF8
|
return nil, coderStringSliceValidateUTF8
|
||||||
}
|
}
|
||||||
@@ -114,19 +114,19 @@ func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointer
|
|||||||
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
||||||
return nil, coderBytesSlice
|
return nil, coderBytesSlice
|
||||||
}
|
}
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if ft.Kind() == reflect.String {
|
if ft.Kind() == reflect.String {
|
||||||
return nil, coderStringSlice
|
return nil, coderStringSlice
|
||||||
}
|
}
|
||||||
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
||||||
return nil, coderBytesSlice
|
return nil, coderBytesSlice
|
||||||
}
|
}
|
||||||
case pref.MessageKind:
|
case protoreflect.MessageKind:
|
||||||
return getMessageInfo(ft), makeMessageSliceFieldCoder(fd, ft)
|
return getMessageInfo(ft), makeMessageSliceFieldCoder(fd, ft)
|
||||||
case pref.GroupKind:
|
case protoreflect.GroupKind:
|
||||||
return getMessageInfo(ft), makeGroupSliceFieldCoder(fd, ft)
|
return getMessageInfo(ft), makeGroupSliceFieldCoder(fd, ft)
|
||||||
}
|
}
|
||||||
case fd.Cardinality() == pref.Repeated && fd.IsPacked():
|
case fd.Cardinality() == protoreflect.Repeated && fd.IsPacked():
|
||||||
// Packed repeated fields.
|
// Packed repeated fields.
|
||||||
//
|
//
|
||||||
// Only repeated fields of primitive numeric types
|
// Only repeated fields of primitive numeric types
|
||||||
@@ -136,128 +136,128 @@ func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointer
|
|||||||
}
|
}
|
||||||
ft := ft.Elem()
|
ft := ft.Elem()
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if ft.Kind() == reflect.Bool {
|
if ft.Kind() == reflect.Bool {
|
||||||
return nil, coderBoolPackedSlice
|
return nil, coderBoolPackedSlice
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderEnumPackedSlice
|
return nil, coderEnumPackedSlice
|
||||||
}
|
}
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderInt32PackedSlice
|
return nil, coderInt32PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSint32PackedSlice
|
return nil, coderSint32PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderUint32PackedSlice
|
return nil, coderUint32PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderInt64PackedSlice
|
return nil, coderInt64PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSint64PackedSlice
|
return nil, coderSint64PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderUint64PackedSlice
|
return nil, coderUint64PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSfixed32PackedSlice
|
return nil, coderSfixed32PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderFixed32PackedSlice
|
return nil, coderFixed32PackedSlice
|
||||||
}
|
}
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if ft.Kind() == reflect.Float32 {
|
if ft.Kind() == reflect.Float32 {
|
||||||
return nil, coderFloatPackedSlice
|
return nil, coderFloatPackedSlice
|
||||||
}
|
}
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSfixed64PackedSlice
|
return nil, coderSfixed64PackedSlice
|
||||||
}
|
}
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderFixed64PackedSlice
|
return nil, coderFixed64PackedSlice
|
||||||
}
|
}
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if ft.Kind() == reflect.Float64 {
|
if ft.Kind() == reflect.Float64 {
|
||||||
return nil, coderDoublePackedSlice
|
return nil, coderDoublePackedSlice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case fd.Kind() == pref.MessageKind:
|
case fd.Kind() == protoreflect.MessageKind:
|
||||||
return getMessageInfo(ft), makeMessageFieldCoder(fd, ft)
|
return getMessageInfo(ft), makeMessageFieldCoder(fd, ft)
|
||||||
case fd.Kind() == pref.GroupKind:
|
case fd.Kind() == protoreflect.GroupKind:
|
||||||
return getMessageInfo(ft), makeGroupFieldCoder(fd, ft)
|
return getMessageInfo(ft), makeGroupFieldCoder(fd, ft)
|
||||||
case fd.Syntax() == pref.Proto3 && fd.ContainingOneof() == nil:
|
case fd.Syntax() == protoreflect.Proto3 && fd.ContainingOneof() == nil:
|
||||||
// Populated oneof fields always encode even if set to the zero value,
|
// Populated oneof fields always encode even if set to the zero value,
|
||||||
// which normally are not encoded in proto3.
|
// which normally are not encoded in proto3.
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if ft.Kind() == reflect.Bool {
|
if ft.Kind() == reflect.Bool {
|
||||||
return nil, coderBoolNoZero
|
return nil, coderBoolNoZero
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderEnumNoZero
|
return nil, coderEnumNoZero
|
||||||
}
|
}
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderInt32NoZero
|
return nil, coderInt32NoZero
|
||||||
}
|
}
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSint32NoZero
|
return nil, coderSint32NoZero
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderUint32NoZero
|
return nil, coderUint32NoZero
|
||||||
}
|
}
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderInt64NoZero
|
return nil, coderInt64NoZero
|
||||||
}
|
}
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSint64NoZero
|
return nil, coderSint64NoZero
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderUint64NoZero
|
return nil, coderUint64NoZero
|
||||||
}
|
}
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSfixed32NoZero
|
return nil, coderSfixed32NoZero
|
||||||
}
|
}
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderFixed32NoZero
|
return nil, coderFixed32NoZero
|
||||||
}
|
}
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if ft.Kind() == reflect.Float32 {
|
if ft.Kind() == reflect.Float32 {
|
||||||
return nil, coderFloatNoZero
|
return nil, coderFloatNoZero
|
||||||
}
|
}
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSfixed64NoZero
|
return nil, coderSfixed64NoZero
|
||||||
}
|
}
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderFixed64NoZero
|
return nil, coderFixed64NoZero
|
||||||
}
|
}
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if ft.Kind() == reflect.Float64 {
|
if ft.Kind() == reflect.Float64 {
|
||||||
return nil, coderDoubleNoZero
|
return nil, coderDoubleNoZero
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
||||||
return nil, coderStringNoZeroValidateUTF8
|
return nil, coderStringNoZeroValidateUTF8
|
||||||
}
|
}
|
||||||
@@ -270,7 +270,7 @@ func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointer
|
|||||||
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
||||||
return nil, coderBytesNoZero
|
return nil, coderBytesNoZero
|
||||||
}
|
}
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if ft.Kind() == reflect.String {
|
if ft.Kind() == reflect.String {
|
||||||
return nil, coderStringNoZero
|
return nil, coderStringNoZero
|
||||||
}
|
}
|
||||||
@@ -281,133 +281,133 @@ func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointer
|
|||||||
case ft.Kind() == reflect.Ptr:
|
case ft.Kind() == reflect.Ptr:
|
||||||
ft := ft.Elem()
|
ft := ft.Elem()
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if ft.Kind() == reflect.Bool {
|
if ft.Kind() == reflect.Bool {
|
||||||
return nil, coderBoolPtr
|
return nil, coderBoolPtr
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderEnumPtr
|
return nil, coderEnumPtr
|
||||||
}
|
}
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderInt32Ptr
|
return nil, coderInt32Ptr
|
||||||
}
|
}
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSint32Ptr
|
return nil, coderSint32Ptr
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderUint32Ptr
|
return nil, coderUint32Ptr
|
||||||
}
|
}
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderInt64Ptr
|
return nil, coderInt64Ptr
|
||||||
}
|
}
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSint64Ptr
|
return nil, coderSint64Ptr
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderUint64Ptr
|
return nil, coderUint64Ptr
|
||||||
}
|
}
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSfixed32Ptr
|
return nil, coderSfixed32Ptr
|
||||||
}
|
}
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderFixed32Ptr
|
return nil, coderFixed32Ptr
|
||||||
}
|
}
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if ft.Kind() == reflect.Float32 {
|
if ft.Kind() == reflect.Float32 {
|
||||||
return nil, coderFloatPtr
|
return nil, coderFloatPtr
|
||||||
}
|
}
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSfixed64Ptr
|
return nil, coderSfixed64Ptr
|
||||||
}
|
}
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderFixed64Ptr
|
return nil, coderFixed64Ptr
|
||||||
}
|
}
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if ft.Kind() == reflect.Float64 {
|
if ft.Kind() == reflect.Float64 {
|
||||||
return nil, coderDoublePtr
|
return nil, coderDoublePtr
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
||||||
return nil, coderStringPtrValidateUTF8
|
return nil, coderStringPtrValidateUTF8
|
||||||
}
|
}
|
||||||
if ft.Kind() == reflect.String {
|
if ft.Kind() == reflect.String {
|
||||||
return nil, coderStringPtr
|
return nil, coderStringPtr
|
||||||
}
|
}
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if ft.Kind() == reflect.String {
|
if ft.Kind() == reflect.String {
|
||||||
return nil, coderStringPtr
|
return nil, coderStringPtr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if ft.Kind() == reflect.Bool {
|
if ft.Kind() == reflect.Bool {
|
||||||
return nil, coderBool
|
return nil, coderBool
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderEnum
|
return nil, coderEnum
|
||||||
}
|
}
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderInt32
|
return nil, coderInt32
|
||||||
}
|
}
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSint32
|
return nil, coderSint32
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderUint32
|
return nil, coderUint32
|
||||||
}
|
}
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderInt64
|
return nil, coderInt64
|
||||||
}
|
}
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSint64
|
return nil, coderSint64
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderUint64
|
return nil, coderUint64
|
||||||
}
|
}
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
if ft.Kind() == reflect.Int32 {
|
if ft.Kind() == reflect.Int32 {
|
||||||
return nil, coderSfixed32
|
return nil, coderSfixed32
|
||||||
}
|
}
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
if ft.Kind() == reflect.Uint32 {
|
if ft.Kind() == reflect.Uint32 {
|
||||||
return nil, coderFixed32
|
return nil, coderFixed32
|
||||||
}
|
}
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if ft.Kind() == reflect.Float32 {
|
if ft.Kind() == reflect.Float32 {
|
||||||
return nil, coderFloat
|
return nil, coderFloat
|
||||||
}
|
}
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
if ft.Kind() == reflect.Int64 {
|
if ft.Kind() == reflect.Int64 {
|
||||||
return nil, coderSfixed64
|
return nil, coderSfixed64
|
||||||
}
|
}
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
if ft.Kind() == reflect.Uint64 {
|
if ft.Kind() == reflect.Uint64 {
|
||||||
return nil, coderFixed64
|
return nil, coderFixed64
|
||||||
}
|
}
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if ft.Kind() == reflect.Float64 {
|
if ft.Kind() == reflect.Float64 {
|
||||||
return nil, coderDouble
|
return nil, coderDouble
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
|
||||||
return nil, coderStringValidateUTF8
|
return nil, coderStringValidateUTF8
|
||||||
}
|
}
|
||||||
@@ -420,7 +420,7 @@ func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointer
|
|||||||
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
|
||||||
return nil, coderBytes
|
return nil, coderBytes
|
||||||
}
|
}
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if ft.Kind() == reflect.String {
|
if ft.Kind() == reflect.String {
|
||||||
return nil, coderString
|
return nil, coderString
|
||||||
}
|
}
|
||||||
@@ -434,122 +434,122 @@ func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointer
|
|||||||
|
|
||||||
// encoderFuncsForValue returns value functions for a field, used for
|
// encoderFuncsForValue returns value functions for a field, used for
|
||||||
// extension values and map encoding.
|
// extension values and map encoding.
|
||||||
func encoderFuncsForValue(fd pref.FieldDescriptor) valueCoderFuncs {
|
func encoderFuncsForValue(fd protoreflect.FieldDescriptor) valueCoderFuncs {
|
||||||
switch {
|
switch {
|
||||||
case fd.Cardinality() == pref.Repeated && !fd.IsPacked():
|
case fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked():
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
return coderBoolSliceValue
|
return coderBoolSliceValue
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
return coderEnumSliceValue
|
return coderEnumSliceValue
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
return coderInt32SliceValue
|
return coderInt32SliceValue
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
return coderSint32SliceValue
|
return coderSint32SliceValue
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
return coderUint32SliceValue
|
return coderUint32SliceValue
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
return coderInt64SliceValue
|
return coderInt64SliceValue
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
return coderSint64SliceValue
|
return coderSint64SliceValue
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
return coderUint64SliceValue
|
return coderUint64SliceValue
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
return coderSfixed32SliceValue
|
return coderSfixed32SliceValue
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
return coderFixed32SliceValue
|
return coderFixed32SliceValue
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
return coderFloatSliceValue
|
return coderFloatSliceValue
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
return coderSfixed64SliceValue
|
return coderSfixed64SliceValue
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
return coderFixed64SliceValue
|
return coderFixed64SliceValue
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
return coderDoubleSliceValue
|
return coderDoubleSliceValue
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
// We don't have a UTF-8 validating coder for repeated string fields.
|
// We don't have a UTF-8 validating coder for repeated string fields.
|
||||||
// Value coders are used for extensions and maps.
|
// Value coders are used for extensions and maps.
|
||||||
// Extensions are never proto3, and maps never contain lists.
|
// Extensions are never proto3, and maps never contain lists.
|
||||||
return coderStringSliceValue
|
return coderStringSliceValue
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
return coderBytesSliceValue
|
return coderBytesSliceValue
|
||||||
case pref.MessageKind:
|
case protoreflect.MessageKind:
|
||||||
return coderMessageSliceValue
|
return coderMessageSliceValue
|
||||||
case pref.GroupKind:
|
case protoreflect.GroupKind:
|
||||||
return coderGroupSliceValue
|
return coderGroupSliceValue
|
||||||
}
|
}
|
||||||
case fd.Cardinality() == pref.Repeated && fd.IsPacked():
|
case fd.Cardinality() == protoreflect.Repeated && fd.IsPacked():
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
return coderBoolPackedSliceValue
|
return coderBoolPackedSliceValue
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
return coderEnumPackedSliceValue
|
return coderEnumPackedSliceValue
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
return coderInt32PackedSliceValue
|
return coderInt32PackedSliceValue
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
return coderSint32PackedSliceValue
|
return coderSint32PackedSliceValue
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
return coderUint32PackedSliceValue
|
return coderUint32PackedSliceValue
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
return coderInt64PackedSliceValue
|
return coderInt64PackedSliceValue
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
return coderSint64PackedSliceValue
|
return coderSint64PackedSliceValue
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
return coderUint64PackedSliceValue
|
return coderUint64PackedSliceValue
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
return coderSfixed32PackedSliceValue
|
return coderSfixed32PackedSliceValue
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
return coderFixed32PackedSliceValue
|
return coderFixed32PackedSliceValue
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
return coderFloatPackedSliceValue
|
return coderFloatPackedSliceValue
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
return coderSfixed64PackedSliceValue
|
return coderSfixed64PackedSliceValue
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
return coderFixed64PackedSliceValue
|
return coderFixed64PackedSliceValue
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
return coderDoublePackedSliceValue
|
return coderDoublePackedSliceValue
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
default:
|
default:
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
return coderBoolValue
|
return coderBoolValue
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
return coderEnumValue
|
return coderEnumValue
|
||||||
case pref.Int32Kind:
|
case protoreflect.Int32Kind:
|
||||||
return coderInt32Value
|
return coderInt32Value
|
||||||
case pref.Sint32Kind:
|
case protoreflect.Sint32Kind:
|
||||||
return coderSint32Value
|
return coderSint32Value
|
||||||
case pref.Uint32Kind:
|
case protoreflect.Uint32Kind:
|
||||||
return coderUint32Value
|
return coderUint32Value
|
||||||
case pref.Int64Kind:
|
case protoreflect.Int64Kind:
|
||||||
return coderInt64Value
|
return coderInt64Value
|
||||||
case pref.Sint64Kind:
|
case protoreflect.Sint64Kind:
|
||||||
return coderSint64Value
|
return coderSint64Value
|
||||||
case pref.Uint64Kind:
|
case protoreflect.Uint64Kind:
|
||||||
return coderUint64Value
|
return coderUint64Value
|
||||||
case pref.Sfixed32Kind:
|
case protoreflect.Sfixed32Kind:
|
||||||
return coderSfixed32Value
|
return coderSfixed32Value
|
||||||
case pref.Fixed32Kind:
|
case protoreflect.Fixed32Kind:
|
||||||
return coderFixed32Value
|
return coderFixed32Value
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
return coderFloatValue
|
return coderFloatValue
|
||||||
case pref.Sfixed64Kind:
|
case protoreflect.Sfixed64Kind:
|
||||||
return coderSfixed64Value
|
return coderSfixed64Value
|
||||||
case pref.Fixed64Kind:
|
case protoreflect.Fixed64Kind:
|
||||||
return coderFixed64Value
|
return coderFixed64Value
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
return coderDoubleValue
|
return coderDoubleValue
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if strs.EnforceUTF8(fd) {
|
if strs.EnforceUTF8(fd) {
|
||||||
return coderStringValueValidateUTF8
|
return coderStringValueValidateUTF8
|
||||||
}
|
}
|
||||||
return coderStringValue
|
return coderStringValue
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
return coderBytesValue
|
return coderBytesValue
|
||||||
case pref.MessageKind:
|
case protoreflect.MessageKind:
|
||||||
return coderMessageValue
|
return coderMessageValue
|
||||||
case pref.GroupKind:
|
case protoreflect.GroupKind:
|
||||||
return coderGroupValue
|
return coderGroupValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+114
-115
@@ -8,7 +8,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
// unwrapper unwraps the value to the underlying value.
|
// unwrapper unwraps the value to the underlying value.
|
||||||
@@ -20,13 +20,13 @@ type unwrapper interface {
|
|||||||
// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.
|
// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.
|
||||||
type Converter interface {
|
type Converter interface {
|
||||||
// PBValueOf converts a reflect.Value to a protoreflect.Value.
|
// PBValueOf converts a reflect.Value to a protoreflect.Value.
|
||||||
PBValueOf(reflect.Value) pref.Value
|
PBValueOf(reflect.Value) protoreflect.Value
|
||||||
|
|
||||||
// GoValueOf converts a protoreflect.Value to a reflect.Value.
|
// GoValueOf converts a protoreflect.Value to a reflect.Value.
|
||||||
GoValueOf(pref.Value) reflect.Value
|
GoValueOf(protoreflect.Value) reflect.Value
|
||||||
|
|
||||||
// IsValidPB returns whether a protoreflect.Value is compatible with this type.
|
// IsValidPB returns whether a protoreflect.Value is compatible with this type.
|
||||||
IsValidPB(pref.Value) bool
|
IsValidPB(protoreflect.Value) bool
|
||||||
|
|
||||||
// IsValidGo returns whether a reflect.Value is compatible with this type.
|
// IsValidGo returns whether a reflect.Value is compatible with this type.
|
||||||
IsValidGo(reflect.Value) bool
|
IsValidGo(reflect.Value) bool
|
||||||
@@ -34,12 +34,12 @@ type Converter interface {
|
|||||||
// New returns a new field value.
|
// New returns a new field value.
|
||||||
// For scalars, it returns the default value of the field.
|
// For scalars, it returns the default value of the field.
|
||||||
// For composite types, it returns a new mutable value.
|
// For composite types, it returns a new mutable value.
|
||||||
New() pref.Value
|
New() protoreflect.Value
|
||||||
|
|
||||||
// Zero returns a new field value.
|
// Zero returns a new field value.
|
||||||
// For scalars, it returns the default value of the field.
|
// For scalars, it returns the default value of the field.
|
||||||
// For composite types, it returns an immutable, empty value.
|
// For composite types, it returns an immutable, empty value.
|
||||||
Zero() pref.Value
|
Zero() protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConverter matches a Go type with a protobuf field and returns a Converter
|
// NewConverter matches a Go type with a protobuf field and returns a Converter
|
||||||
@@ -50,7 +50,7 @@ type Converter interface {
|
|||||||
// This matcher deliberately supports a wider range of Go types than what
|
// This matcher deliberately supports a wider range of Go types than what
|
||||||
// protoc-gen-go historically generated to be able to automatically wrap some
|
// protoc-gen-go historically generated to be able to automatically wrap some
|
||||||
// v1 messages generated by other forks of protoc-gen-go.
|
// v1 messages generated by other forks of protoc-gen-go.
|
||||||
func NewConverter(t reflect.Type, fd pref.FieldDescriptor) Converter {
|
func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {
|
||||||
switch {
|
switch {
|
||||||
case fd.IsList():
|
case fd.IsList():
|
||||||
return newListConverter(t, fd)
|
return newListConverter(t, fd)
|
||||||
@@ -59,7 +59,6 @@ func NewConverter(t reflect.Type, fd pref.FieldDescriptor) Converter {
|
|||||||
default:
|
default:
|
||||||
return newSingularConverter(t, fd)
|
return newSingularConverter(t, fd)
|
||||||
}
|
}
|
||||||
panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -76,68 +75,68 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
boolZero = pref.ValueOfBool(false)
|
boolZero = protoreflect.ValueOfBool(false)
|
||||||
int32Zero = pref.ValueOfInt32(0)
|
int32Zero = protoreflect.ValueOfInt32(0)
|
||||||
int64Zero = pref.ValueOfInt64(0)
|
int64Zero = protoreflect.ValueOfInt64(0)
|
||||||
uint32Zero = pref.ValueOfUint32(0)
|
uint32Zero = protoreflect.ValueOfUint32(0)
|
||||||
uint64Zero = pref.ValueOfUint64(0)
|
uint64Zero = protoreflect.ValueOfUint64(0)
|
||||||
float32Zero = pref.ValueOfFloat32(0)
|
float32Zero = protoreflect.ValueOfFloat32(0)
|
||||||
float64Zero = pref.ValueOfFloat64(0)
|
float64Zero = protoreflect.ValueOfFloat64(0)
|
||||||
stringZero = pref.ValueOfString("")
|
stringZero = protoreflect.ValueOfString("")
|
||||||
bytesZero = pref.ValueOfBytes(nil)
|
bytesZero = protoreflect.ValueOfBytes(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
func newSingularConverter(t reflect.Type, fd pref.FieldDescriptor) Converter {
|
func newSingularConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {
|
||||||
defVal := func(fd pref.FieldDescriptor, zero pref.Value) pref.Value {
|
defVal := func(fd protoreflect.FieldDescriptor, zero protoreflect.Value) protoreflect.Value {
|
||||||
if fd.Cardinality() == pref.Repeated {
|
if fd.Cardinality() == protoreflect.Repeated {
|
||||||
// Default isn't defined for repeated fields.
|
// Default isn't defined for repeated fields.
|
||||||
return zero
|
return zero
|
||||||
}
|
}
|
||||||
return fd.Default()
|
return fd.Default()
|
||||||
}
|
}
|
||||||
switch fd.Kind() {
|
switch fd.Kind() {
|
||||||
case pref.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
if t.Kind() == reflect.Bool {
|
if t.Kind() == reflect.Bool {
|
||||||
return &boolConverter{t, defVal(fd, boolZero)}
|
return &boolConverter{t, defVal(fd, boolZero)}
|
||||||
}
|
}
|
||||||
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||||
if t.Kind() == reflect.Int32 {
|
if t.Kind() == reflect.Int32 {
|
||||||
return &int32Converter{t, defVal(fd, int32Zero)}
|
return &int32Converter{t, defVal(fd, int32Zero)}
|
||||||
}
|
}
|
||||||
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
|
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
if t.Kind() == reflect.Int64 {
|
if t.Kind() == reflect.Int64 {
|
||||||
return &int64Converter{t, defVal(fd, int64Zero)}
|
return &int64Converter{t, defVal(fd, int64Zero)}
|
||||||
}
|
}
|
||||||
case pref.Uint32Kind, pref.Fixed32Kind:
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||||
if t.Kind() == reflect.Uint32 {
|
if t.Kind() == reflect.Uint32 {
|
||||||
return &uint32Converter{t, defVal(fd, uint32Zero)}
|
return &uint32Converter{t, defVal(fd, uint32Zero)}
|
||||||
}
|
}
|
||||||
case pref.Uint64Kind, pref.Fixed64Kind:
|
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
if t.Kind() == reflect.Uint64 {
|
if t.Kind() == reflect.Uint64 {
|
||||||
return &uint64Converter{t, defVal(fd, uint64Zero)}
|
return &uint64Converter{t, defVal(fd, uint64Zero)}
|
||||||
}
|
}
|
||||||
case pref.FloatKind:
|
case protoreflect.FloatKind:
|
||||||
if t.Kind() == reflect.Float32 {
|
if t.Kind() == reflect.Float32 {
|
||||||
return &float32Converter{t, defVal(fd, float32Zero)}
|
return &float32Converter{t, defVal(fd, float32Zero)}
|
||||||
}
|
}
|
||||||
case pref.DoubleKind:
|
case protoreflect.DoubleKind:
|
||||||
if t.Kind() == reflect.Float64 {
|
if t.Kind() == reflect.Float64 {
|
||||||
return &float64Converter{t, defVal(fd, float64Zero)}
|
return &float64Converter{t, defVal(fd, float64Zero)}
|
||||||
}
|
}
|
||||||
case pref.StringKind:
|
case protoreflect.StringKind:
|
||||||
if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {
|
if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {
|
||||||
return &stringConverter{t, defVal(fd, stringZero)}
|
return &stringConverter{t, defVal(fd, stringZero)}
|
||||||
}
|
}
|
||||||
case pref.BytesKind:
|
case protoreflect.BytesKind:
|
||||||
if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {
|
if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {
|
||||||
return &bytesConverter{t, defVal(fd, bytesZero)}
|
return &bytesConverter{t, defVal(fd, bytesZero)}
|
||||||
}
|
}
|
||||||
case pref.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
// Handle enums, which must be a named int32 type.
|
// Handle enums, which must be a named int32 type.
|
||||||
if t.Kind() == reflect.Int32 {
|
if t.Kind() == reflect.Int32 {
|
||||||
return newEnumConverter(t, fd)
|
return newEnumConverter(t, fd)
|
||||||
}
|
}
|
||||||
case pref.MessageKind, pref.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
return newMessageConverter(t)
|
return newMessageConverter(t)
|
||||||
}
|
}
|
||||||
panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
|
panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
|
||||||
@@ -145,184 +144,184 @@ func newSingularConverter(t reflect.Type, fd pref.FieldDescriptor) Converter {
|
|||||||
|
|
||||||
type boolConverter struct {
|
type boolConverter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *boolConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *boolConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfBool(v.Bool())
|
return protoreflect.ValueOfBool(v.Bool())
|
||||||
}
|
}
|
||||||
func (c *boolConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *boolConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(v.Bool()).Convert(c.goType)
|
return reflect.ValueOf(v.Bool()).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *boolConverter) IsValidPB(v pref.Value) bool {
|
func (c *boolConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(bool)
|
_, ok := v.Interface().(bool)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *boolConverter) IsValidGo(v reflect.Value) bool {
|
func (c *boolConverter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *boolConverter) New() pref.Value { return c.def }
|
func (c *boolConverter) New() protoreflect.Value { return c.def }
|
||||||
func (c *boolConverter) Zero() pref.Value { return c.def }
|
func (c *boolConverter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type int32Converter struct {
|
type int32Converter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *int32Converter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *int32Converter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfInt32(int32(v.Int()))
|
return protoreflect.ValueOfInt32(int32(v.Int()))
|
||||||
}
|
}
|
||||||
func (c *int32Converter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *int32Converter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(int32(v.Int())).Convert(c.goType)
|
return reflect.ValueOf(int32(v.Int())).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *int32Converter) IsValidPB(v pref.Value) bool {
|
func (c *int32Converter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(int32)
|
_, ok := v.Interface().(int32)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *int32Converter) IsValidGo(v reflect.Value) bool {
|
func (c *int32Converter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *int32Converter) New() pref.Value { return c.def }
|
func (c *int32Converter) New() protoreflect.Value { return c.def }
|
||||||
func (c *int32Converter) Zero() pref.Value { return c.def }
|
func (c *int32Converter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type int64Converter struct {
|
type int64Converter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *int64Converter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *int64Converter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfInt64(int64(v.Int()))
|
return protoreflect.ValueOfInt64(int64(v.Int()))
|
||||||
}
|
}
|
||||||
func (c *int64Converter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *int64Converter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(int64(v.Int())).Convert(c.goType)
|
return reflect.ValueOf(int64(v.Int())).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *int64Converter) IsValidPB(v pref.Value) bool {
|
func (c *int64Converter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(int64)
|
_, ok := v.Interface().(int64)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *int64Converter) IsValidGo(v reflect.Value) bool {
|
func (c *int64Converter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *int64Converter) New() pref.Value { return c.def }
|
func (c *int64Converter) New() protoreflect.Value { return c.def }
|
||||||
func (c *int64Converter) Zero() pref.Value { return c.def }
|
func (c *int64Converter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type uint32Converter struct {
|
type uint32Converter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *uint32Converter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *uint32Converter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfUint32(uint32(v.Uint()))
|
return protoreflect.ValueOfUint32(uint32(v.Uint()))
|
||||||
}
|
}
|
||||||
func (c *uint32Converter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *uint32Converter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(uint32(v.Uint())).Convert(c.goType)
|
return reflect.ValueOf(uint32(v.Uint())).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *uint32Converter) IsValidPB(v pref.Value) bool {
|
func (c *uint32Converter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(uint32)
|
_, ok := v.Interface().(uint32)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *uint32Converter) IsValidGo(v reflect.Value) bool {
|
func (c *uint32Converter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *uint32Converter) New() pref.Value { return c.def }
|
func (c *uint32Converter) New() protoreflect.Value { return c.def }
|
||||||
func (c *uint32Converter) Zero() pref.Value { return c.def }
|
func (c *uint32Converter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type uint64Converter struct {
|
type uint64Converter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *uint64Converter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *uint64Converter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfUint64(uint64(v.Uint()))
|
return protoreflect.ValueOfUint64(uint64(v.Uint()))
|
||||||
}
|
}
|
||||||
func (c *uint64Converter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *uint64Converter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(uint64(v.Uint())).Convert(c.goType)
|
return reflect.ValueOf(uint64(v.Uint())).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *uint64Converter) IsValidPB(v pref.Value) bool {
|
func (c *uint64Converter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(uint64)
|
_, ok := v.Interface().(uint64)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *uint64Converter) IsValidGo(v reflect.Value) bool {
|
func (c *uint64Converter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *uint64Converter) New() pref.Value { return c.def }
|
func (c *uint64Converter) New() protoreflect.Value { return c.def }
|
||||||
func (c *uint64Converter) Zero() pref.Value { return c.def }
|
func (c *uint64Converter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type float32Converter struct {
|
type float32Converter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *float32Converter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *float32Converter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfFloat32(float32(v.Float()))
|
return protoreflect.ValueOfFloat32(float32(v.Float()))
|
||||||
}
|
}
|
||||||
func (c *float32Converter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *float32Converter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(float32(v.Float())).Convert(c.goType)
|
return reflect.ValueOf(float32(v.Float())).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *float32Converter) IsValidPB(v pref.Value) bool {
|
func (c *float32Converter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(float32)
|
_, ok := v.Interface().(float32)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *float32Converter) IsValidGo(v reflect.Value) bool {
|
func (c *float32Converter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *float32Converter) New() pref.Value { return c.def }
|
func (c *float32Converter) New() protoreflect.Value { return c.def }
|
||||||
func (c *float32Converter) Zero() pref.Value { return c.def }
|
func (c *float32Converter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type float64Converter struct {
|
type float64Converter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *float64Converter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *float64Converter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfFloat64(float64(v.Float()))
|
return protoreflect.ValueOfFloat64(float64(v.Float()))
|
||||||
}
|
}
|
||||||
func (c *float64Converter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *float64Converter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(float64(v.Float())).Convert(c.goType)
|
return reflect.ValueOf(float64(v.Float())).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *float64Converter) IsValidPB(v pref.Value) bool {
|
func (c *float64Converter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(float64)
|
_, ok := v.Interface().(float64)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *float64Converter) IsValidGo(v reflect.Value) bool {
|
func (c *float64Converter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *float64Converter) New() pref.Value { return c.def }
|
func (c *float64Converter) New() protoreflect.Value { return c.def }
|
||||||
func (c *float64Converter) Zero() pref.Value { return c.def }
|
func (c *float64Converter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type stringConverter struct {
|
type stringConverter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *stringConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfString(v.Convert(stringType).String())
|
return protoreflect.ValueOfString(v.Convert(stringType).String())
|
||||||
}
|
}
|
||||||
func (c *stringConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
// pref.Value.String never panics, so we go through an interface
|
// pref.Value.String never panics, so we go through an interface
|
||||||
// conversion here to check the type.
|
// conversion here to check the type.
|
||||||
s := v.Interface().(string)
|
s := v.Interface().(string)
|
||||||
@@ -331,71 +330,71 @@ func (c *stringConverter) GoValueOf(v pref.Value) reflect.Value {
|
|||||||
}
|
}
|
||||||
return reflect.ValueOf(s).Convert(c.goType)
|
return reflect.ValueOf(s).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *stringConverter) IsValidPB(v pref.Value) bool {
|
func (c *stringConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(string)
|
_, ok := v.Interface().(string)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *stringConverter) IsValidGo(v reflect.Value) bool {
|
func (c *stringConverter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *stringConverter) New() pref.Value { return c.def }
|
func (c *stringConverter) New() protoreflect.Value { return c.def }
|
||||||
func (c *stringConverter) Zero() pref.Value { return c.def }
|
func (c *stringConverter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type bytesConverter struct {
|
type bytesConverter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *bytesConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *bytesConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
if c.goType.Kind() == reflect.String && v.Len() == 0 {
|
if c.goType.Kind() == reflect.String && v.Len() == 0 {
|
||||||
return pref.ValueOfBytes(nil) // ensure empty string is []byte(nil)
|
return protoreflect.ValueOfBytes(nil) // ensure empty string is []byte(nil)
|
||||||
}
|
}
|
||||||
return pref.ValueOfBytes(v.Convert(bytesType).Bytes())
|
return protoreflect.ValueOfBytes(v.Convert(bytesType).Bytes())
|
||||||
}
|
}
|
||||||
func (c *bytesConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *bytesConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(v.Bytes()).Convert(c.goType)
|
return reflect.ValueOf(v.Bytes()).Convert(c.goType)
|
||||||
}
|
}
|
||||||
func (c *bytesConverter) IsValidPB(v pref.Value) bool {
|
func (c *bytesConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().([]byte)
|
_, ok := v.Interface().([]byte)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func (c *bytesConverter) IsValidGo(v reflect.Value) bool {
|
func (c *bytesConverter) IsValidGo(v reflect.Value) bool {
|
||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
func (c *bytesConverter) New() pref.Value { return c.def }
|
func (c *bytesConverter) New() protoreflect.Value { return c.def }
|
||||||
func (c *bytesConverter) Zero() pref.Value { return c.def }
|
func (c *bytesConverter) Zero() protoreflect.Value { return c.def }
|
||||||
|
|
||||||
type enumConverter struct {
|
type enumConverter struct {
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
def pref.Value
|
def protoreflect.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
func newEnumConverter(goType reflect.Type, fd pref.FieldDescriptor) Converter {
|
func newEnumConverter(goType reflect.Type, fd protoreflect.FieldDescriptor) Converter {
|
||||||
var def pref.Value
|
var def protoreflect.Value
|
||||||
if fd.Cardinality() == pref.Repeated {
|
if fd.Cardinality() == protoreflect.Repeated {
|
||||||
def = pref.ValueOfEnum(fd.Enum().Values().Get(0).Number())
|
def = protoreflect.ValueOfEnum(fd.Enum().Values().Get(0).Number())
|
||||||
} else {
|
} else {
|
||||||
def = fd.Default()
|
def = fd.Default()
|
||||||
}
|
}
|
||||||
return &enumConverter{goType, def}
|
return &enumConverter{goType, def}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *enumConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *enumConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfEnum(pref.EnumNumber(v.Int()))
|
return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v.Int()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *enumConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *enumConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return reflect.ValueOf(v.Enum()).Convert(c.goType)
|
return reflect.ValueOf(v.Enum()).Convert(c.goType)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *enumConverter) IsValidPB(v pref.Value) bool {
|
func (c *enumConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
_, ok := v.Interface().(pref.EnumNumber)
|
_, ok := v.Interface().(protoreflect.EnumNumber)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -403,11 +402,11 @@ func (c *enumConverter) IsValidGo(v reflect.Value) bool {
|
|||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *enumConverter) New() pref.Value {
|
func (c *enumConverter) New() protoreflect.Value {
|
||||||
return c.def
|
return c.def
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *enumConverter) Zero() pref.Value {
|
func (c *enumConverter) Zero() protoreflect.Value {
|
||||||
return c.def
|
return c.def
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -419,7 +418,7 @@ func newMessageConverter(goType reflect.Type) Converter {
|
|||||||
return &messageConverter{goType}
|
return &messageConverter{goType}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *messageConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *messageConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
@@ -430,13 +429,13 @@ func (c *messageConverter) PBValueOf(v reflect.Value) pref.Value {
|
|||||||
v = reflect.Zero(reflect.PtrTo(v.Type()))
|
v = reflect.Zero(reflect.PtrTo(v.Type()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if m, ok := v.Interface().(pref.ProtoMessage); ok {
|
if m, ok := v.Interface().(protoreflect.ProtoMessage); ok {
|
||||||
return pref.ValueOfMessage(m.ProtoReflect())
|
return protoreflect.ValueOfMessage(m.ProtoReflect())
|
||||||
}
|
}
|
||||||
return pref.ValueOfMessage(legacyWrapMessage(v))
|
return protoreflect.ValueOfMessage(legacyWrapMessage(v))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *messageConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *messageConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
m := v.Message()
|
m := v.Message()
|
||||||
var rv reflect.Value
|
var rv reflect.Value
|
||||||
if u, ok := m.(unwrapper); ok {
|
if u, ok := m.(unwrapper); ok {
|
||||||
@@ -460,7 +459,7 @@ func (c *messageConverter) GoValueOf(v pref.Value) reflect.Value {
|
|||||||
return rv
|
return rv
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *messageConverter) IsValidPB(v pref.Value) bool {
|
func (c *messageConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
m := v.Message()
|
m := v.Message()
|
||||||
var rv reflect.Value
|
var rv reflect.Value
|
||||||
if u, ok := m.(unwrapper); ok {
|
if u, ok := m.(unwrapper); ok {
|
||||||
@@ -478,14 +477,14 @@ func (c *messageConverter) IsValidGo(v reflect.Value) bool {
|
|||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *messageConverter) New() pref.Value {
|
func (c *messageConverter) New() protoreflect.Value {
|
||||||
if c.isNonPointer() {
|
if c.isNonPointer() {
|
||||||
return c.PBValueOf(reflect.New(c.goType).Elem())
|
return c.PBValueOf(reflect.New(c.goType).Elem())
|
||||||
}
|
}
|
||||||
return c.PBValueOf(reflect.New(c.goType.Elem()))
|
return c.PBValueOf(reflect.New(c.goType.Elem()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *messageConverter) Zero() pref.Value {
|
func (c *messageConverter) Zero() protoreflect.Value {
|
||||||
return c.PBValueOf(reflect.Zero(c.goType))
|
return c.PBValueOf(reflect.Zero(c.goType))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+21
-21
@@ -8,10 +8,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newListConverter(t reflect.Type, fd pref.FieldDescriptor) Converter {
|
func newListConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {
|
||||||
switch {
|
switch {
|
||||||
case t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Slice:
|
case t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Slice:
|
||||||
return &listPtrConverter{t, newSingularConverter(t.Elem().Elem(), fd)}
|
return &listPtrConverter{t, newSingularConverter(t.Elem().Elem(), fd)}
|
||||||
@@ -26,16 +26,16 @@ type listConverter struct {
|
|||||||
c Converter
|
c Converter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *listConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
pv := reflect.New(c.goType)
|
pv := reflect.New(c.goType)
|
||||||
pv.Elem().Set(v)
|
pv.Elem().Set(v)
|
||||||
return pref.ValueOfList(&listReflect{pv, c.c})
|
return protoreflect.ValueOfList(&listReflect{pv, c.c})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *listConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
rv := v.List().(*listReflect).v
|
rv := v.List().(*listReflect).v
|
||||||
if rv.IsNil() {
|
if rv.IsNil() {
|
||||||
return reflect.Zero(c.goType)
|
return reflect.Zero(c.goType)
|
||||||
@@ -43,7 +43,7 @@ func (c *listConverter) GoValueOf(v pref.Value) reflect.Value {
|
|||||||
return rv.Elem()
|
return rv.Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listConverter) IsValidPB(v pref.Value) bool {
|
func (c *listConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
list, ok := v.Interface().(*listReflect)
|
list, ok := v.Interface().(*listReflect)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
@@ -55,12 +55,12 @@ func (c *listConverter) IsValidGo(v reflect.Value) bool {
|
|||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listConverter) New() pref.Value {
|
func (c *listConverter) New() protoreflect.Value {
|
||||||
return pref.ValueOfList(&listReflect{reflect.New(c.goType), c.c})
|
return protoreflect.ValueOfList(&listReflect{reflect.New(c.goType), c.c})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listConverter) Zero() pref.Value {
|
func (c *listConverter) Zero() protoreflect.Value {
|
||||||
return pref.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c})
|
return protoreflect.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c})
|
||||||
}
|
}
|
||||||
|
|
||||||
type listPtrConverter struct {
|
type listPtrConverter struct {
|
||||||
@@ -68,18 +68,18 @@ type listPtrConverter struct {
|
|||||||
c Converter
|
c Converter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listPtrConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *listPtrConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfList(&listReflect{v, c.c})
|
return protoreflect.ValueOfList(&listReflect{v, c.c})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listPtrConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *listPtrConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return v.List().(*listReflect).v
|
return v.List().(*listReflect).v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listPtrConverter) IsValidPB(v pref.Value) bool {
|
func (c *listPtrConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
list, ok := v.Interface().(*listReflect)
|
list, ok := v.Interface().(*listReflect)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
@@ -91,11 +91,11 @@ func (c *listPtrConverter) IsValidGo(v reflect.Value) bool {
|
|||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listPtrConverter) New() pref.Value {
|
func (c *listPtrConverter) New() protoreflect.Value {
|
||||||
return c.PBValueOf(reflect.New(c.goType.Elem()))
|
return c.PBValueOf(reflect.New(c.goType.Elem()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *listPtrConverter) Zero() pref.Value {
|
func (c *listPtrConverter) Zero() protoreflect.Value {
|
||||||
return c.PBValueOf(reflect.Zero(c.goType))
|
return c.PBValueOf(reflect.Zero(c.goType))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,16 +110,16 @@ func (ls *listReflect) Len() int {
|
|||||||
}
|
}
|
||||||
return ls.v.Elem().Len()
|
return ls.v.Elem().Len()
|
||||||
}
|
}
|
||||||
func (ls *listReflect) Get(i int) pref.Value {
|
func (ls *listReflect) Get(i int) protoreflect.Value {
|
||||||
return ls.conv.PBValueOf(ls.v.Elem().Index(i))
|
return ls.conv.PBValueOf(ls.v.Elem().Index(i))
|
||||||
}
|
}
|
||||||
func (ls *listReflect) Set(i int, v pref.Value) {
|
func (ls *listReflect) Set(i int, v protoreflect.Value) {
|
||||||
ls.v.Elem().Index(i).Set(ls.conv.GoValueOf(v))
|
ls.v.Elem().Index(i).Set(ls.conv.GoValueOf(v))
|
||||||
}
|
}
|
||||||
func (ls *listReflect) Append(v pref.Value) {
|
func (ls *listReflect) Append(v protoreflect.Value) {
|
||||||
ls.v.Elem().Set(reflect.Append(ls.v.Elem(), ls.conv.GoValueOf(v)))
|
ls.v.Elem().Set(reflect.Append(ls.v.Elem(), ls.conv.GoValueOf(v)))
|
||||||
}
|
}
|
||||||
func (ls *listReflect) AppendMutable() pref.Value {
|
func (ls *listReflect) AppendMutable() protoreflect.Value {
|
||||||
if _, ok := ls.conv.(*messageConverter); !ok {
|
if _, ok := ls.conv.(*messageConverter); !ok {
|
||||||
panic("invalid AppendMutable on list with non-message type")
|
panic("invalid AppendMutable on list with non-message type")
|
||||||
}
|
}
|
||||||
@@ -130,7 +130,7 @@ func (ls *listReflect) AppendMutable() pref.Value {
|
|||||||
func (ls *listReflect) Truncate(i int) {
|
func (ls *listReflect) Truncate(i int) {
|
||||||
ls.v.Elem().Set(ls.v.Elem().Slice(0, i))
|
ls.v.Elem().Set(ls.v.Elem().Slice(0, i))
|
||||||
}
|
}
|
||||||
func (ls *listReflect) NewElement() pref.Value {
|
func (ls *listReflect) NewElement() protoreflect.Value {
|
||||||
return ls.conv.New()
|
return ls.conv.New()
|
||||||
}
|
}
|
||||||
func (ls *listReflect) IsValid() bool {
|
func (ls *listReflect) IsValid() bool {
|
||||||
|
|||||||
+16
-16
@@ -8,7 +8,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mapConverter struct {
|
type mapConverter struct {
|
||||||
@@ -16,7 +16,7 @@ type mapConverter struct {
|
|||||||
keyConv, valConv Converter
|
keyConv, valConv Converter
|
||||||
}
|
}
|
||||||
|
|
||||||
func newMapConverter(t reflect.Type, fd pref.FieldDescriptor) *mapConverter {
|
func newMapConverter(t reflect.Type, fd protoreflect.FieldDescriptor) *mapConverter {
|
||||||
if t.Kind() != reflect.Map {
|
if t.Kind() != reflect.Map {
|
||||||
panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
|
panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
|
||||||
}
|
}
|
||||||
@@ -27,18 +27,18 @@ func newMapConverter(t reflect.Type, fd pref.FieldDescriptor) *mapConverter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *mapConverter) PBValueOf(v reflect.Value) pref.Value {
|
func (c *mapConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
if v.Type() != c.goType {
|
if v.Type() != c.goType {
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
|
||||||
}
|
}
|
||||||
return pref.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv})
|
return protoreflect.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *mapConverter) GoValueOf(v pref.Value) reflect.Value {
|
func (c *mapConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
return v.Map().(*mapReflect).v
|
return v.Map().(*mapReflect).v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *mapConverter) IsValidPB(v pref.Value) bool {
|
func (c *mapConverter) IsValidPB(v protoreflect.Value) bool {
|
||||||
mapv, ok := v.Interface().(*mapReflect)
|
mapv, ok := v.Interface().(*mapReflect)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
@@ -50,11 +50,11 @@ func (c *mapConverter) IsValidGo(v reflect.Value) bool {
|
|||||||
return v.IsValid() && v.Type() == c.goType
|
return v.IsValid() && v.Type() == c.goType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *mapConverter) New() pref.Value {
|
func (c *mapConverter) New() protoreflect.Value {
|
||||||
return c.PBValueOf(reflect.MakeMap(c.goType))
|
return c.PBValueOf(reflect.MakeMap(c.goType))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *mapConverter) Zero() pref.Value {
|
func (c *mapConverter) Zero() protoreflect.Value {
|
||||||
return c.PBValueOf(reflect.Zero(c.goType))
|
return c.PBValueOf(reflect.Zero(c.goType))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,29 +67,29 @@ type mapReflect struct {
|
|||||||
func (ms *mapReflect) Len() int {
|
func (ms *mapReflect) Len() int {
|
||||||
return ms.v.Len()
|
return ms.v.Len()
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) Has(k pref.MapKey) bool {
|
func (ms *mapReflect) Has(k protoreflect.MapKey) bool {
|
||||||
rk := ms.keyConv.GoValueOf(k.Value())
|
rk := ms.keyConv.GoValueOf(k.Value())
|
||||||
rv := ms.v.MapIndex(rk)
|
rv := ms.v.MapIndex(rk)
|
||||||
return rv.IsValid()
|
return rv.IsValid()
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) Get(k pref.MapKey) pref.Value {
|
func (ms *mapReflect) Get(k protoreflect.MapKey) protoreflect.Value {
|
||||||
rk := ms.keyConv.GoValueOf(k.Value())
|
rk := ms.keyConv.GoValueOf(k.Value())
|
||||||
rv := ms.v.MapIndex(rk)
|
rv := ms.v.MapIndex(rk)
|
||||||
if !rv.IsValid() {
|
if !rv.IsValid() {
|
||||||
return pref.Value{}
|
return protoreflect.Value{}
|
||||||
}
|
}
|
||||||
return ms.valConv.PBValueOf(rv)
|
return ms.valConv.PBValueOf(rv)
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) Set(k pref.MapKey, v pref.Value) {
|
func (ms *mapReflect) Set(k protoreflect.MapKey, v protoreflect.Value) {
|
||||||
rk := ms.keyConv.GoValueOf(k.Value())
|
rk := ms.keyConv.GoValueOf(k.Value())
|
||||||
rv := ms.valConv.GoValueOf(v)
|
rv := ms.valConv.GoValueOf(v)
|
||||||
ms.v.SetMapIndex(rk, rv)
|
ms.v.SetMapIndex(rk, rv)
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) Clear(k pref.MapKey) {
|
func (ms *mapReflect) Clear(k protoreflect.MapKey) {
|
||||||
rk := ms.keyConv.GoValueOf(k.Value())
|
rk := ms.keyConv.GoValueOf(k.Value())
|
||||||
ms.v.SetMapIndex(rk, reflect.Value{})
|
ms.v.SetMapIndex(rk, reflect.Value{})
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) Mutable(k pref.MapKey) pref.Value {
|
func (ms *mapReflect) Mutable(k protoreflect.MapKey) protoreflect.Value {
|
||||||
if _, ok := ms.valConv.(*messageConverter); !ok {
|
if _, ok := ms.valConv.(*messageConverter); !ok {
|
||||||
panic("invalid Mutable on map with non-message value type")
|
panic("invalid Mutable on map with non-message value type")
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ func (ms *mapReflect) Mutable(k pref.MapKey) pref.Value {
|
|||||||
}
|
}
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) Range(f func(pref.MapKey, pref.Value) bool) {
|
func (ms *mapReflect) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) {
|
||||||
iter := mapRange(ms.v)
|
iter := mapRange(ms.v)
|
||||||
for iter.Next() {
|
for iter.Next() {
|
||||||
k := ms.keyConv.PBValueOf(iter.Key()).MapKey()
|
k := ms.keyConv.PBValueOf(iter.Key()).MapKey()
|
||||||
@@ -110,7 +110,7 @@ func (ms *mapReflect) Range(f func(pref.MapKey, pref.Value) bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) NewValue() pref.Value {
|
func (ms *mapReflect) NewValue() protoreflect.Value {
|
||||||
return ms.valConv.New()
|
return ms.valConv.New()
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) IsValid() bool {
|
func (ms *mapReflect) IsValid() bool {
|
||||||
|
|||||||
+11
-10
@@ -12,9 +12,8 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/flags"
|
"google.golang.org/protobuf/internal/flags"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
preg "google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
"google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var errDecode = errors.New("cannot parse invalid wire-format data")
|
var errDecode = errors.New("cannot parse invalid wire-format data")
|
||||||
@@ -38,14 +37,16 @@ func (o unmarshalOptions) Options() proto.UnmarshalOptions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o unmarshalOptions) DiscardUnknown() bool { return o.flags&piface.UnmarshalDiscardUnknown != 0 }
|
func (o unmarshalOptions) DiscardUnknown() bool {
|
||||||
|
return o.flags&protoiface.UnmarshalDiscardUnknown != 0
|
||||||
|
}
|
||||||
|
|
||||||
func (o unmarshalOptions) IsDefault() bool {
|
func (o unmarshalOptions) IsDefault() bool {
|
||||||
return o.flags == 0 && o.resolver == preg.GlobalTypes
|
return o.flags == 0 && o.resolver == protoregistry.GlobalTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
var lazyUnmarshalOptions = unmarshalOptions{
|
var lazyUnmarshalOptions = unmarshalOptions{
|
||||||
resolver: preg.GlobalTypes,
|
resolver: protoregistry.GlobalTypes,
|
||||||
depth: protowire.DefaultRecursionLimit,
|
depth: protowire.DefaultRecursionLimit,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +56,7 @@ type unmarshalOutput struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// unmarshal is protoreflect.Methods.Unmarshal.
|
// unmarshal is protoreflect.Methods.Unmarshal.
|
||||||
func (mi *MessageInfo) unmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutput, error) {
|
func (mi *MessageInfo) unmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
|
||||||
var p pointer
|
var p pointer
|
||||||
if ms, ok := in.Message.(*messageState); ok {
|
if ms, ok := in.Message.(*messageState); ok {
|
||||||
p = ms.pointer()
|
p = ms.pointer()
|
||||||
@@ -67,11 +68,11 @@ func (mi *MessageInfo) unmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutp
|
|||||||
resolver: in.Resolver,
|
resolver: in.Resolver,
|
||||||
depth: in.Depth,
|
depth: in.Depth,
|
||||||
})
|
})
|
||||||
var flags piface.UnmarshalOutputFlags
|
var flags protoiface.UnmarshalOutputFlags
|
||||||
if out.initialized {
|
if out.initialized {
|
||||||
flags |= piface.UnmarshalInitialized
|
flags |= protoiface.UnmarshalInitialized
|
||||||
}
|
}
|
||||||
return piface.UnmarshalOutput{
|
return protoiface.UnmarshalOutput{
|
||||||
Flags: flags,
|
Flags: flags,
|
||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
@@ -210,7 +211,7 @@ func (mi *MessageInfo) unmarshalExtension(b []byte, num protowire.Number, wtyp p
|
|||||||
var err error
|
var err error
|
||||||
xt, err = opts.resolver.FindExtensionByNumber(mi.Desc.FullName(), num)
|
xt, err = opts.resolver.FindExtensionByNumber(mi.Desc.FullName(), num)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == preg.NotFound {
|
if err == protoregistry.NotFound {
|
||||||
return out, errUnknown
|
return out, errUnknown
|
||||||
}
|
}
|
||||||
return out, errors.New("%v: unable to resolve extension %v: %v", mi.Desc.FullName(), num, err)
|
return out, errors.New("%v: unable to resolve extension %v: %v", mi.Desc.FullName(), num, err)
|
||||||
|
|||||||
+5
-5
@@ -7,15 +7,15 @@ package impl
|
|||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type EnumInfo struct {
|
type EnumInfo struct {
|
||||||
GoReflectType reflect.Type // int32 kind
|
GoReflectType reflect.Type // int32 kind
|
||||||
Desc pref.EnumDescriptor
|
Desc protoreflect.EnumDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *EnumInfo) New(n pref.EnumNumber) pref.Enum {
|
func (t *EnumInfo) New(n protoreflect.EnumNumber) protoreflect.Enum {
|
||||||
return reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(pref.Enum)
|
return reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(protoreflect.Enum)
|
||||||
}
|
}
|
||||||
func (t *EnumInfo) Descriptor() pref.EnumDescriptor { return t.Desc }
|
func (t *EnumInfo) Descriptor() protoreflect.EnumDescriptor { return t.Desc }
|
||||||
|
|||||||
+13
-13
@@ -9,8 +9,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ExtensionInfo implements ExtensionType.
|
// ExtensionInfo implements ExtensionType.
|
||||||
@@ -45,7 +45,7 @@ type ExtensionInfo struct {
|
|||||||
// since the message may no longer implement the MessageV1 interface.
|
// since the message may no longer implement the MessageV1 interface.
|
||||||
//
|
//
|
||||||
// Deprecated: Use the ExtendedType method instead.
|
// Deprecated: Use the ExtendedType method instead.
|
||||||
ExtendedType piface.MessageV1
|
ExtendedType protoiface.MessageV1
|
||||||
|
|
||||||
// ExtensionType is the zero value of the extension type.
|
// ExtensionType is the zero value of the extension type.
|
||||||
//
|
//
|
||||||
@@ -83,31 +83,31 @@ const (
|
|||||||
extensionInfoFullInit = 2
|
extensionInfoFullInit = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitExtensionInfo(xi *ExtensionInfo, xd pref.ExtensionDescriptor, goType reflect.Type) {
|
func InitExtensionInfo(xi *ExtensionInfo, xd protoreflect.ExtensionDescriptor, goType reflect.Type) {
|
||||||
xi.goType = goType
|
xi.goType = goType
|
||||||
xi.desc = extensionTypeDescriptor{xd, xi}
|
xi.desc = extensionTypeDescriptor{xd, xi}
|
||||||
xi.init = extensionInfoDescInit
|
xi.init = extensionInfoDescInit
|
||||||
}
|
}
|
||||||
|
|
||||||
func (xi *ExtensionInfo) New() pref.Value {
|
func (xi *ExtensionInfo) New() protoreflect.Value {
|
||||||
return xi.lazyInit().New()
|
return xi.lazyInit().New()
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) Zero() pref.Value {
|
func (xi *ExtensionInfo) Zero() protoreflect.Value {
|
||||||
return xi.lazyInit().Zero()
|
return xi.lazyInit().Zero()
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) ValueOf(v interface{}) pref.Value {
|
func (xi *ExtensionInfo) ValueOf(v interface{}) protoreflect.Value {
|
||||||
return xi.lazyInit().PBValueOf(reflect.ValueOf(v))
|
return xi.lazyInit().PBValueOf(reflect.ValueOf(v))
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) InterfaceOf(v pref.Value) interface{} {
|
func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) interface{} {
|
||||||
return xi.lazyInit().GoValueOf(v).Interface()
|
return xi.lazyInit().GoValueOf(v).Interface()
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) IsValidValue(v pref.Value) bool {
|
func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool {
|
||||||
return xi.lazyInit().IsValidPB(v)
|
return xi.lazyInit().IsValidPB(v)
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool {
|
func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool {
|
||||||
return xi.lazyInit().IsValidGo(reflect.ValueOf(v))
|
return xi.lazyInit().IsValidGo(reflect.ValueOf(v))
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) TypeDescriptor() pref.ExtensionTypeDescriptor {
|
func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor {
|
||||||
if atomic.LoadUint32(&xi.init) < extensionInfoDescInit {
|
if atomic.LoadUint32(&xi.init) < extensionInfoDescInit {
|
||||||
xi.lazyInitSlow()
|
xi.lazyInitSlow()
|
||||||
}
|
}
|
||||||
@@ -144,13 +144,13 @@ func (xi *ExtensionInfo) lazyInitSlow() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type extensionTypeDescriptor struct {
|
type extensionTypeDescriptor struct {
|
||||||
pref.ExtensionDescriptor
|
protoreflect.ExtensionDescriptor
|
||||||
xi *ExtensionInfo
|
xi *ExtensionInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (xtd *extensionTypeDescriptor) Type() pref.ExtensionType {
|
func (xtd *extensionTypeDescriptor) Type() protoreflect.ExtensionType {
|
||||||
return xtd.xi
|
return xtd.xi
|
||||||
}
|
}
|
||||||
func (xtd *extensionTypeDescriptor) Descriptor() pref.ExtensionDescriptor {
|
func (xtd *extensionTypeDescriptor) Descriptor() protoreflect.ExtensionDescriptor {
|
||||||
return xtd.ExtensionDescriptor
|
return xtd.ExtensionDescriptor
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-29
@@ -13,13 +13,12 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/filedesc"
|
"google.golang.org/protobuf/internal/filedesc"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// legacyEnumName returns the name of enums used in legacy code.
|
// legacyEnumName returns the name of enums used in legacy code.
|
||||||
// It is neither the protobuf full name nor the qualified Go name,
|
// It is neither the protobuf full name nor the qualified Go name,
|
||||||
// but rather an odd hybrid of both.
|
// but rather an odd hybrid of both.
|
||||||
func legacyEnumName(ed pref.EnumDescriptor) string {
|
func legacyEnumName(ed protoreflect.EnumDescriptor) string {
|
||||||
var protoPkg string
|
var protoPkg string
|
||||||
enumName := string(ed.FullName())
|
enumName := string(ed.FullName())
|
||||||
if fd := ed.ParentFile(); fd != nil {
|
if fd := ed.ParentFile(); fd != nil {
|
||||||
@@ -34,68 +33,68 @@ func legacyEnumName(ed pref.EnumDescriptor) string {
|
|||||||
|
|
||||||
// legacyWrapEnum wraps v as a protoreflect.Enum,
|
// legacyWrapEnum wraps v as a protoreflect.Enum,
|
||||||
// where v must be a int32 kind and not implement the v2 API already.
|
// where v must be a int32 kind and not implement the v2 API already.
|
||||||
func legacyWrapEnum(v reflect.Value) pref.Enum {
|
func legacyWrapEnum(v reflect.Value) protoreflect.Enum {
|
||||||
et := legacyLoadEnumType(v.Type())
|
et := legacyLoadEnumType(v.Type())
|
||||||
return et.New(pref.EnumNumber(v.Int()))
|
return et.New(protoreflect.EnumNumber(v.Int()))
|
||||||
}
|
}
|
||||||
|
|
||||||
var legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType
|
var legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType
|
||||||
|
|
||||||
// legacyLoadEnumType dynamically loads a protoreflect.EnumType for t,
|
// legacyLoadEnumType dynamically loads a protoreflect.EnumType for t,
|
||||||
// where t must be an int32 kind and not implement the v2 API already.
|
// where t must be an int32 kind and not implement the v2 API already.
|
||||||
func legacyLoadEnumType(t reflect.Type) pref.EnumType {
|
func legacyLoadEnumType(t reflect.Type) protoreflect.EnumType {
|
||||||
// Fast-path: check if a EnumType is cached for this concrete type.
|
// Fast-path: check if a EnumType is cached for this concrete type.
|
||||||
if et, ok := legacyEnumTypeCache.Load(t); ok {
|
if et, ok := legacyEnumTypeCache.Load(t); ok {
|
||||||
return et.(pref.EnumType)
|
return et.(protoreflect.EnumType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slow-path: derive enum descriptor and initialize EnumType.
|
// Slow-path: derive enum descriptor and initialize EnumType.
|
||||||
var et pref.EnumType
|
var et protoreflect.EnumType
|
||||||
ed := LegacyLoadEnumDesc(t)
|
ed := LegacyLoadEnumDesc(t)
|
||||||
et = &legacyEnumType{
|
et = &legacyEnumType{
|
||||||
desc: ed,
|
desc: ed,
|
||||||
goType: t,
|
goType: t,
|
||||||
}
|
}
|
||||||
if et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok {
|
if et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok {
|
||||||
return et.(pref.EnumType)
|
return et.(protoreflect.EnumType)
|
||||||
}
|
}
|
||||||
return et
|
return et
|
||||||
}
|
}
|
||||||
|
|
||||||
type legacyEnumType struct {
|
type legacyEnumType struct {
|
||||||
desc pref.EnumDescriptor
|
desc protoreflect.EnumDescriptor
|
||||||
goType reflect.Type
|
goType reflect.Type
|
||||||
m sync.Map // map[protoreflect.EnumNumber]proto.Enum
|
m sync.Map // map[protoreflect.EnumNumber]proto.Enum
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *legacyEnumType) New(n pref.EnumNumber) pref.Enum {
|
func (t *legacyEnumType) New(n protoreflect.EnumNumber) protoreflect.Enum {
|
||||||
if e, ok := t.m.Load(n); ok {
|
if e, ok := t.m.Load(n); ok {
|
||||||
return e.(pref.Enum)
|
return e.(protoreflect.Enum)
|
||||||
}
|
}
|
||||||
e := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType}
|
e := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType}
|
||||||
t.m.Store(n, e)
|
t.m.Store(n, e)
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
func (t *legacyEnumType) Descriptor() pref.EnumDescriptor {
|
func (t *legacyEnumType) Descriptor() protoreflect.EnumDescriptor {
|
||||||
return t.desc
|
return t.desc
|
||||||
}
|
}
|
||||||
|
|
||||||
type legacyEnumWrapper struct {
|
type legacyEnumWrapper struct {
|
||||||
num pref.EnumNumber
|
num protoreflect.EnumNumber
|
||||||
pbTyp pref.EnumType
|
pbTyp protoreflect.EnumType
|
||||||
goTyp reflect.Type
|
goTyp reflect.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *legacyEnumWrapper) Descriptor() pref.EnumDescriptor {
|
func (e *legacyEnumWrapper) Descriptor() protoreflect.EnumDescriptor {
|
||||||
return e.pbTyp.Descriptor()
|
return e.pbTyp.Descriptor()
|
||||||
}
|
}
|
||||||
func (e *legacyEnumWrapper) Type() pref.EnumType {
|
func (e *legacyEnumWrapper) Type() protoreflect.EnumType {
|
||||||
return e.pbTyp
|
return e.pbTyp
|
||||||
}
|
}
|
||||||
func (e *legacyEnumWrapper) Number() pref.EnumNumber {
|
func (e *legacyEnumWrapper) Number() protoreflect.EnumNumber {
|
||||||
return e.num
|
return e.num
|
||||||
}
|
}
|
||||||
func (e *legacyEnumWrapper) ProtoReflect() pref.Enum {
|
func (e *legacyEnumWrapper) ProtoReflect() protoreflect.Enum {
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
func (e *legacyEnumWrapper) protoUnwrap() interface{} {
|
func (e *legacyEnumWrapper) protoUnwrap() interface{} {
|
||||||
@@ -105,8 +104,8 @@ func (e *legacyEnumWrapper) protoUnwrap() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ pref.Enum = (*legacyEnumWrapper)(nil)
|
_ protoreflect.Enum = (*legacyEnumWrapper)(nil)
|
||||||
_ unwrapper = (*legacyEnumWrapper)(nil)
|
_ unwrapper = (*legacyEnumWrapper)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
|
var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
|
||||||
@@ -115,15 +114,15 @@ var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
|
|||||||
// which must be an int32 kind and not implement the v2 API already.
|
// which must be an int32 kind and not implement the v2 API already.
|
||||||
//
|
//
|
||||||
// This is exported for testing purposes.
|
// This is exported for testing purposes.
|
||||||
func LegacyLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
|
func LegacyLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {
|
||||||
// Fast-path: check if an EnumDescriptor is cached for this concrete type.
|
// Fast-path: check if an EnumDescriptor is cached for this concrete type.
|
||||||
if ed, ok := legacyEnumDescCache.Load(t); ok {
|
if ed, ok := legacyEnumDescCache.Load(t); ok {
|
||||||
return ed.(pref.EnumDescriptor)
|
return ed.(protoreflect.EnumDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slow-path: initialize EnumDescriptor from the raw descriptor.
|
// Slow-path: initialize EnumDescriptor from the raw descriptor.
|
||||||
ev := reflect.Zero(t).Interface()
|
ev := reflect.Zero(t).Interface()
|
||||||
if _, ok := ev.(pref.Enum); ok {
|
if _, ok := ev.(protoreflect.Enum); ok {
|
||||||
panic(fmt.Sprintf("%v already implements proto.Enum", t))
|
panic(fmt.Sprintf("%v already implements proto.Enum", t))
|
||||||
}
|
}
|
||||||
edV1, ok := ev.(enumV1)
|
edV1, ok := ev.(enumV1)
|
||||||
@@ -132,7 +131,7 @@ func LegacyLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
|
|||||||
}
|
}
|
||||||
b, idxs := edV1.EnumDescriptor()
|
b, idxs := edV1.EnumDescriptor()
|
||||||
|
|
||||||
var ed pref.EnumDescriptor
|
var ed protoreflect.EnumDescriptor
|
||||||
if len(idxs) == 1 {
|
if len(idxs) == 1 {
|
||||||
ed = legacyLoadFileDesc(b).Enums().Get(idxs[0])
|
ed = legacyLoadFileDesc(b).Enums().Get(idxs[0])
|
||||||
} else {
|
} else {
|
||||||
@@ -158,10 +157,10 @@ var aberrantEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescript
|
|||||||
// We are unable to use the global enum registry since it is
|
// We are unable to use the global enum registry since it is
|
||||||
// unfortunately keyed by the protobuf full name, which we also do not know.
|
// unfortunately keyed by the protobuf full name, which we also do not know.
|
||||||
// Thus, this produces some bogus enum descriptor based on the Go type name.
|
// Thus, this produces some bogus enum descriptor based on the Go type name.
|
||||||
func aberrantLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
|
func aberrantLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {
|
||||||
// Fast-path: check if an EnumDescriptor is cached for this concrete type.
|
// Fast-path: check if an EnumDescriptor is cached for this concrete type.
|
||||||
if ed, ok := aberrantEnumDescCache.Load(t); ok {
|
if ed, ok := aberrantEnumDescCache.Load(t); ok {
|
||||||
return ed.(pref.EnumDescriptor)
|
return ed.(protoreflect.EnumDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slow-path: construct a bogus, but unique EnumDescriptor.
|
// Slow-path: construct a bogus, but unique EnumDescriptor.
|
||||||
@@ -182,7 +181,7 @@ func aberrantLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
|
|||||||
// An exhaustive query is clearly impractical, but can be best-effort.
|
// An exhaustive query is clearly impractical, but can be best-effort.
|
||||||
|
|
||||||
if ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok {
|
if ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok {
|
||||||
return ed.(pref.EnumDescriptor)
|
return ed.(protoreflect.EnumDescriptor)
|
||||||
}
|
}
|
||||||
return ed
|
return ed
|
||||||
}
|
}
|
||||||
@@ -192,7 +191,7 @@ func aberrantLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
|
|||||||
// It should be sufficiently unique within a program.
|
// It should be sufficiently unique within a program.
|
||||||
//
|
//
|
||||||
// This is exported for testing purposes.
|
// This is exported for testing purposes.
|
||||||
func AberrantDeriveFullName(t reflect.Type) pref.FullName {
|
func AberrantDeriveFullName(t reflect.Type) protoreflect.FullName {
|
||||||
sanitize := func(r rune) rune {
|
sanitize := func(r rune) rune {
|
||||||
switch {
|
switch {
|
||||||
case r == '/':
|
case r == '/':
|
||||||
@@ -215,5 +214,5 @@ func AberrantDeriveFullName(t reflect.Type) pref.FullName {
|
|||||||
ss[i] = "x" + s
|
ss[i] = "x" + s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pref.FullName(strings.Join(ss, "."))
|
return protoreflect.FullName(strings.Join(ss, "."))
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-9
@@ -12,21 +12,21 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
// These functions exist to support exported APIs in generated protobufs.
|
// These functions exist to support exported APIs in generated protobufs.
|
||||||
// While these are deprecated, they cannot be removed for compatibility reasons.
|
// While these are deprecated, they cannot be removed for compatibility reasons.
|
||||||
|
|
||||||
// LegacyEnumName returns the name of enums used in legacy code.
|
// LegacyEnumName returns the name of enums used in legacy code.
|
||||||
func (Export) LegacyEnumName(ed pref.EnumDescriptor) string {
|
func (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string {
|
||||||
return legacyEnumName(ed)
|
return legacyEnumName(ed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LegacyMessageTypeOf returns the protoreflect.MessageType for m,
|
// LegacyMessageTypeOf returns the protoreflect.MessageType for m,
|
||||||
// with name used as the message name if necessary.
|
// with name used as the message name if necessary.
|
||||||
func (Export) LegacyMessageTypeOf(m piface.MessageV1, name pref.FullName) pref.MessageType {
|
func (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType {
|
||||||
if mv := (Export{}).protoMessageV2Of(m); mv != nil {
|
if mv := (Export{}).protoMessageV2Of(m); mv != nil {
|
||||||
return mv.ProtoReflect().Type()
|
return mv.ProtoReflect().Type()
|
||||||
}
|
}
|
||||||
@@ -36,9 +36,9 @@ func (Export) LegacyMessageTypeOf(m piface.MessageV1, name pref.FullName) pref.M
|
|||||||
// UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input.
|
// UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input.
|
||||||
// The input can either be a string representing the enum value by name,
|
// The input can either be a string representing the enum value by name,
|
||||||
// or a number representing the enum number itself.
|
// or a number representing the enum number itself.
|
||||||
func (Export) UnmarshalJSONEnum(ed pref.EnumDescriptor, b []byte) (pref.EnumNumber, error) {
|
func (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error) {
|
||||||
if b[0] == '"' {
|
if b[0] == '"' {
|
||||||
var name pref.Name
|
var name protoreflect.Name
|
||||||
if err := json.Unmarshal(b, &name); err != nil {
|
if err := json.Unmarshal(b, &name); err != nil {
|
||||||
return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
|
return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@ func (Export) UnmarshalJSONEnum(ed pref.EnumDescriptor, b []byte) (pref.EnumNumb
|
|||||||
}
|
}
|
||||||
return ev.Number(), nil
|
return ev.Number(), nil
|
||||||
} else {
|
} else {
|
||||||
var num pref.EnumNumber
|
var num protoreflect.EnumNumber
|
||||||
if err := json.Unmarshal(b, &num); err != nil {
|
if err := json.Unmarshal(b, &num); err != nil {
|
||||||
return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
|
return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
|
||||||
}
|
}
|
||||||
@@ -81,8 +81,8 @@ func (Export) CompressGZIP(in []byte) (out []byte) {
|
|||||||
blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3.
|
blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3.
|
||||||
blockSize = len(in)
|
blockSize = len(in)
|
||||||
}
|
}
|
||||||
binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize)^0x0000)
|
binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize))
|
||||||
binary.LittleEndian.PutUint16(blockHeader[3:5], uint16(blockSize)^0xffff)
|
binary.LittleEndian.PutUint16(blockHeader[3:5], ^uint16(blockSize))
|
||||||
out = append(out, blockHeader[:]...)
|
out = append(out, blockHeader[:]...)
|
||||||
out = append(out, in[:blockSize]...)
|
out = append(out, in[:blockSize]...)
|
||||||
in = in[blockSize:]
|
in = in[blockSize:]
|
||||||
|
|||||||
+50
-50
@@ -12,16 +12,16 @@ import (
|
|||||||
ptag "google.golang.org/protobuf/internal/encoding/tag"
|
ptag "google.golang.org/protobuf/internal/encoding/tag"
|
||||||
"google.golang.org/protobuf/internal/filedesc"
|
"google.golang.org/protobuf/internal/filedesc"
|
||||||
"google.golang.org/protobuf/internal/pragma"
|
"google.golang.org/protobuf/internal/pragma"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
preg "google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (xi *ExtensionInfo) initToLegacy() {
|
func (xi *ExtensionInfo) initToLegacy() {
|
||||||
xd := xi.desc
|
xd := xi.desc
|
||||||
var parent piface.MessageV1
|
var parent protoiface.MessageV1
|
||||||
messageName := xd.ContainingMessage().FullName()
|
messageName := xd.ContainingMessage().FullName()
|
||||||
if mt, _ := preg.GlobalTypes.FindMessageByName(messageName); mt != nil {
|
if mt, _ := protoregistry.GlobalTypes.FindMessageByName(messageName); mt != nil {
|
||||||
// Create a new parent message and unwrap it if possible.
|
// Create a new parent message and unwrap it if possible.
|
||||||
mv := mt.New().Interface()
|
mv := mt.New().Interface()
|
||||||
t := reflect.TypeOf(mv)
|
t := reflect.TypeOf(mv)
|
||||||
@@ -31,7 +31,7 @@ func (xi *ExtensionInfo) initToLegacy() {
|
|||||||
|
|
||||||
// Check whether the message implements the legacy v1 Message interface.
|
// Check whether the message implements the legacy v1 Message interface.
|
||||||
mz := reflect.Zero(t).Interface()
|
mz := reflect.Zero(t).Interface()
|
||||||
if mz, ok := mz.(piface.MessageV1); ok {
|
if mz, ok := mz.(protoiface.MessageV1); ok {
|
||||||
parent = mz
|
parent = mz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ func (xi *ExtensionInfo) initToLegacy() {
|
|||||||
|
|
||||||
// Reconstruct the legacy enum full name.
|
// Reconstruct the legacy enum full name.
|
||||||
var enumName string
|
var enumName string
|
||||||
if xd.Kind() == pref.EnumKind {
|
if xd.Kind() == protoreflect.EnumKind {
|
||||||
enumName = legacyEnumName(xd.Enum())
|
enumName = legacyEnumName(xd.Enum())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,16 +77,16 @@ func (xi *ExtensionInfo) initFromLegacy() {
|
|||||||
// field number is specified. In such a case, use a placeholder.
|
// field number is specified. In such a case, use a placeholder.
|
||||||
if xi.ExtendedType == nil || xi.ExtensionType == nil {
|
if xi.ExtendedType == nil || xi.ExtensionType == nil {
|
||||||
xd := placeholderExtension{
|
xd := placeholderExtension{
|
||||||
name: pref.FullName(xi.Name),
|
name: protoreflect.FullName(xi.Name),
|
||||||
number: pref.FieldNumber(xi.Field),
|
number: protoreflect.FieldNumber(xi.Field),
|
||||||
}
|
}
|
||||||
xi.desc = extensionTypeDescriptor{xd, xi}
|
xi.desc = extensionTypeDescriptor{xd, xi}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resolve enum or message dependencies.
|
// Resolve enum or message dependencies.
|
||||||
var ed pref.EnumDescriptor
|
var ed protoreflect.EnumDescriptor
|
||||||
var md pref.MessageDescriptor
|
var md protoreflect.MessageDescriptor
|
||||||
t := reflect.TypeOf(xi.ExtensionType)
|
t := reflect.TypeOf(xi.ExtensionType)
|
||||||
isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct
|
isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct
|
||||||
isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
|
isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
|
||||||
@@ -94,18 +94,18 @@ func (xi *ExtensionInfo) initFromLegacy() {
|
|||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
}
|
}
|
||||||
switch v := reflect.Zero(t).Interface().(type) {
|
switch v := reflect.Zero(t).Interface().(type) {
|
||||||
case pref.Enum:
|
case protoreflect.Enum:
|
||||||
ed = v.Descriptor()
|
ed = v.Descriptor()
|
||||||
case enumV1:
|
case enumV1:
|
||||||
ed = LegacyLoadEnumDesc(t)
|
ed = LegacyLoadEnumDesc(t)
|
||||||
case pref.ProtoMessage:
|
case protoreflect.ProtoMessage:
|
||||||
md = v.ProtoReflect().Descriptor()
|
md = v.ProtoReflect().Descriptor()
|
||||||
case messageV1:
|
case messageV1:
|
||||||
md = LegacyLoadMessageDesc(t)
|
md = LegacyLoadMessageDesc(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Derive basic field information from the struct tag.
|
// Derive basic field information from the struct tag.
|
||||||
var evs pref.EnumValueDescriptors
|
var evs protoreflect.EnumValueDescriptors
|
||||||
if ed != nil {
|
if ed != nil {
|
||||||
evs = ed.Values()
|
evs = ed.Values()
|
||||||
}
|
}
|
||||||
@@ -114,8 +114,8 @@ func (xi *ExtensionInfo) initFromLegacy() {
|
|||||||
// Construct a v2 ExtensionType.
|
// Construct a v2 ExtensionType.
|
||||||
xd := &filedesc.Extension{L2: new(filedesc.ExtensionL2)}
|
xd := &filedesc.Extension{L2: new(filedesc.ExtensionL2)}
|
||||||
xd.L0.ParentFile = filedesc.SurrogateProto2
|
xd.L0.ParentFile = filedesc.SurrogateProto2
|
||||||
xd.L0.FullName = pref.FullName(xi.Name)
|
xd.L0.FullName = protoreflect.FullName(xi.Name)
|
||||||
xd.L1.Number = pref.FieldNumber(xi.Field)
|
xd.L1.Number = protoreflect.FieldNumber(xi.Field)
|
||||||
xd.L1.Cardinality = fd.L1.Cardinality
|
xd.L1.Cardinality = fd.L1.Cardinality
|
||||||
xd.L1.Kind = fd.L1.Kind
|
xd.L1.Kind = fd.L1.Kind
|
||||||
xd.L2.IsPacked = fd.L1.IsPacked
|
xd.L2.IsPacked = fd.L1.IsPacked
|
||||||
@@ -138,39 +138,39 @@ func (xi *ExtensionInfo) initFromLegacy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type placeholderExtension struct {
|
type placeholderExtension struct {
|
||||||
name pref.FullName
|
name protoreflect.FullName
|
||||||
number pref.FieldNumber
|
number protoreflect.FieldNumber
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x placeholderExtension) ParentFile() pref.FileDescriptor { return nil }
|
func (x placeholderExtension) ParentFile() protoreflect.FileDescriptor { return nil }
|
||||||
func (x placeholderExtension) Parent() pref.Descriptor { return nil }
|
func (x placeholderExtension) Parent() protoreflect.Descriptor { return nil }
|
||||||
func (x placeholderExtension) Index() int { return 0 }
|
func (x placeholderExtension) Index() int { return 0 }
|
||||||
func (x placeholderExtension) Syntax() pref.Syntax { return 0 }
|
func (x placeholderExtension) Syntax() protoreflect.Syntax { return 0 }
|
||||||
func (x placeholderExtension) Name() pref.Name { return x.name.Name() }
|
func (x placeholderExtension) Name() protoreflect.Name { return x.name.Name() }
|
||||||
func (x placeholderExtension) FullName() pref.FullName { return x.name }
|
func (x placeholderExtension) FullName() protoreflect.FullName { return x.name }
|
||||||
func (x placeholderExtension) IsPlaceholder() bool { return true }
|
func (x placeholderExtension) IsPlaceholder() bool { return true }
|
||||||
func (x placeholderExtension) Options() pref.ProtoMessage { return descopts.Field }
|
func (x placeholderExtension) Options() protoreflect.ProtoMessage { return descopts.Field }
|
||||||
func (x placeholderExtension) Number() pref.FieldNumber { return x.number }
|
func (x placeholderExtension) Number() protoreflect.FieldNumber { return x.number }
|
||||||
func (x placeholderExtension) Cardinality() pref.Cardinality { return 0 }
|
func (x placeholderExtension) Cardinality() protoreflect.Cardinality { return 0 }
|
||||||
func (x placeholderExtension) Kind() pref.Kind { return 0 }
|
func (x placeholderExtension) Kind() protoreflect.Kind { return 0 }
|
||||||
func (x placeholderExtension) HasJSONName() bool { return false }
|
func (x placeholderExtension) HasJSONName() bool { return false }
|
||||||
func (x placeholderExtension) JSONName() string { return "[" + string(x.name) + "]" }
|
func (x placeholderExtension) JSONName() string { return "[" + string(x.name) + "]" }
|
||||||
func (x placeholderExtension) TextName() string { return "[" + string(x.name) + "]" }
|
func (x placeholderExtension) TextName() string { return "[" + string(x.name) + "]" }
|
||||||
func (x placeholderExtension) HasPresence() bool { return false }
|
func (x placeholderExtension) HasPresence() bool { return false }
|
||||||
func (x placeholderExtension) HasOptionalKeyword() bool { return false }
|
func (x placeholderExtension) HasOptionalKeyword() bool { return false }
|
||||||
func (x placeholderExtension) IsExtension() bool { return true }
|
func (x placeholderExtension) IsExtension() bool { return true }
|
||||||
func (x placeholderExtension) IsWeak() bool { return false }
|
func (x placeholderExtension) IsWeak() bool { return false }
|
||||||
func (x placeholderExtension) IsPacked() bool { return false }
|
func (x placeholderExtension) IsPacked() bool { return false }
|
||||||
func (x placeholderExtension) IsList() bool { return false }
|
func (x placeholderExtension) IsList() bool { return false }
|
||||||
func (x placeholderExtension) IsMap() bool { return false }
|
func (x placeholderExtension) IsMap() bool { return false }
|
||||||
func (x placeholderExtension) MapKey() pref.FieldDescriptor { return nil }
|
func (x placeholderExtension) MapKey() protoreflect.FieldDescriptor { return nil }
|
||||||
func (x placeholderExtension) MapValue() pref.FieldDescriptor { return nil }
|
func (x placeholderExtension) MapValue() protoreflect.FieldDescriptor { return nil }
|
||||||
func (x placeholderExtension) HasDefault() bool { return false }
|
func (x placeholderExtension) HasDefault() bool { return false }
|
||||||
func (x placeholderExtension) Default() pref.Value { return pref.Value{} }
|
func (x placeholderExtension) Default() protoreflect.Value { return protoreflect.Value{} }
|
||||||
func (x placeholderExtension) DefaultEnumValue() pref.EnumValueDescriptor { return nil }
|
func (x placeholderExtension) DefaultEnumValue() protoreflect.EnumValueDescriptor { return nil }
|
||||||
func (x placeholderExtension) ContainingOneof() pref.OneofDescriptor { return nil }
|
func (x placeholderExtension) ContainingOneof() protoreflect.OneofDescriptor { return nil }
|
||||||
func (x placeholderExtension) ContainingMessage() pref.MessageDescriptor { return nil }
|
func (x placeholderExtension) ContainingMessage() protoreflect.MessageDescriptor { return nil }
|
||||||
func (x placeholderExtension) Enum() pref.EnumDescriptor { return nil }
|
func (x placeholderExtension) Enum() protoreflect.EnumDescriptor { return nil }
|
||||||
func (x placeholderExtension) Message() pref.MessageDescriptor { return nil }
|
func (x placeholderExtension) Message() protoreflect.MessageDescriptor { return nil }
|
||||||
func (x placeholderExtension) ProtoType(pref.FieldDescriptor) { return }
|
func (x placeholderExtension) ProtoType(protoreflect.FieldDescriptor) { return }
|
||||||
func (x placeholderExtension) ProtoInternal(pragma.DoNotImplement) { return }
|
func (x placeholderExtension) ProtoInternal(pragma.DoNotImplement) { return }
|
||||||
|
|||||||
+60
-62
@@ -16,14 +16,12 @@ import (
|
|||||||
"google.golang.org/protobuf/internal/filedesc"
|
"google.golang.org/protobuf/internal/filedesc"
|
||||||
"google.golang.org/protobuf/internal/strs"
|
"google.golang.org/protobuf/internal/strs"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
"google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// legacyWrapMessage wraps v as a protoreflect.Message,
|
// legacyWrapMessage wraps v as a protoreflect.Message,
|
||||||
// where v must be a *struct kind and not implement the v2 API already.
|
// where v must be a *struct kind and not implement the v2 API already.
|
||||||
func legacyWrapMessage(v reflect.Value) pref.Message {
|
func legacyWrapMessage(v reflect.Value) protoreflect.Message {
|
||||||
t := v.Type()
|
t := v.Type()
|
||||||
if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
|
if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
|
||||||
return aberrantMessage{v: v}
|
return aberrantMessage{v: v}
|
||||||
@@ -35,7 +33,7 @@ func legacyWrapMessage(v reflect.Value) pref.Message {
|
|||||||
// legacyLoadMessageType dynamically loads a protoreflect.Type for t,
|
// legacyLoadMessageType dynamically loads a protoreflect.Type for t,
|
||||||
// where t must be not implement the v2 API already.
|
// where t must be not implement the v2 API already.
|
||||||
// The provided name is used if it cannot be determined from the message.
|
// The provided name is used if it cannot be determined from the message.
|
||||||
func legacyLoadMessageType(t reflect.Type, name pref.FullName) protoreflect.MessageType {
|
func legacyLoadMessageType(t reflect.Type, name protoreflect.FullName) protoreflect.MessageType {
|
||||||
if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
|
if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
|
||||||
return aberrantMessageType{t}
|
return aberrantMessageType{t}
|
||||||
}
|
}
|
||||||
@@ -47,7 +45,7 @@ var legacyMessageTypeCache sync.Map // map[reflect.Type]*MessageInfo
|
|||||||
// legacyLoadMessageInfo dynamically loads a *MessageInfo for t,
|
// legacyLoadMessageInfo dynamically loads a *MessageInfo for t,
|
||||||
// where t must be a *struct kind and not implement the v2 API already.
|
// where t must be a *struct kind and not implement the v2 API already.
|
||||||
// The provided name is used if it cannot be determined from the message.
|
// The provided name is used if it cannot be determined from the message.
|
||||||
func legacyLoadMessageInfo(t reflect.Type, name pref.FullName) *MessageInfo {
|
func legacyLoadMessageInfo(t reflect.Type, name protoreflect.FullName) *MessageInfo {
|
||||||
// Fast-path: check if a MessageInfo is cached for this concrete type.
|
// Fast-path: check if a MessageInfo is cached for this concrete type.
|
||||||
if mt, ok := legacyMessageTypeCache.Load(t); ok {
|
if mt, ok := legacyMessageTypeCache.Load(t); ok {
|
||||||
return mt.(*MessageInfo)
|
return mt.(*MessageInfo)
|
||||||
@@ -68,7 +66,7 @@ func legacyLoadMessageInfo(t reflect.Type, name pref.FullName) *MessageInfo {
|
|||||||
// supports deterministic serialization or not, but this
|
// supports deterministic serialization or not, but this
|
||||||
// preserves the v1 implementation's behavior of always
|
// preserves the v1 implementation's behavior of always
|
||||||
// calling Marshal methods when present.
|
// calling Marshal methods when present.
|
||||||
mi.methods.Flags |= piface.SupportMarshalDeterministic
|
mi.methods.Flags |= protoiface.SupportMarshalDeterministic
|
||||||
}
|
}
|
||||||
if _, hasUnmarshal = v.(legacyUnmarshaler); hasUnmarshal {
|
if _, hasUnmarshal = v.(legacyUnmarshaler); hasUnmarshal {
|
||||||
mi.methods.Unmarshal = legacyUnmarshal
|
mi.methods.Unmarshal = legacyUnmarshal
|
||||||
@@ -89,18 +87,18 @@ var legacyMessageDescCache sync.Map // map[reflect.Type]protoreflect.MessageDesc
|
|||||||
// which should be a *struct kind and must not implement the v2 API already.
|
// which should be a *struct kind and must not implement the v2 API already.
|
||||||
//
|
//
|
||||||
// This is exported for testing purposes.
|
// This is exported for testing purposes.
|
||||||
func LegacyLoadMessageDesc(t reflect.Type) pref.MessageDescriptor {
|
func LegacyLoadMessageDesc(t reflect.Type) protoreflect.MessageDescriptor {
|
||||||
return legacyLoadMessageDesc(t, "")
|
return legacyLoadMessageDesc(t, "")
|
||||||
}
|
}
|
||||||
func legacyLoadMessageDesc(t reflect.Type, name pref.FullName) pref.MessageDescriptor {
|
func legacyLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {
|
||||||
// Fast-path: check if a MessageDescriptor is cached for this concrete type.
|
// Fast-path: check if a MessageDescriptor is cached for this concrete type.
|
||||||
if mi, ok := legacyMessageDescCache.Load(t); ok {
|
if mi, ok := legacyMessageDescCache.Load(t); ok {
|
||||||
return mi.(pref.MessageDescriptor)
|
return mi.(protoreflect.MessageDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slow-path: initialize MessageDescriptor from the raw descriptor.
|
// Slow-path: initialize MessageDescriptor from the raw descriptor.
|
||||||
mv := reflect.Zero(t).Interface()
|
mv := reflect.Zero(t).Interface()
|
||||||
if _, ok := mv.(pref.ProtoMessage); ok {
|
if _, ok := mv.(protoreflect.ProtoMessage); ok {
|
||||||
panic(fmt.Sprintf("%v already implements proto.Message", t))
|
panic(fmt.Sprintf("%v already implements proto.Message", t))
|
||||||
}
|
}
|
||||||
mdV1, ok := mv.(messageV1)
|
mdV1, ok := mv.(messageV1)
|
||||||
@@ -164,7 +162,7 @@ var (
|
|||||||
//
|
//
|
||||||
// This is a best-effort derivation of the message descriptor using the protobuf
|
// This is a best-effort derivation of the message descriptor using the protobuf
|
||||||
// tags on the struct fields.
|
// tags on the struct fields.
|
||||||
func aberrantLoadMessageDesc(t reflect.Type, name pref.FullName) pref.MessageDescriptor {
|
func aberrantLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {
|
||||||
aberrantMessageDescLock.Lock()
|
aberrantMessageDescLock.Lock()
|
||||||
defer aberrantMessageDescLock.Unlock()
|
defer aberrantMessageDescLock.Unlock()
|
||||||
if aberrantMessageDescCache == nil {
|
if aberrantMessageDescCache == nil {
|
||||||
@@ -172,7 +170,7 @@ func aberrantLoadMessageDesc(t reflect.Type, name pref.FullName) pref.MessageDes
|
|||||||
}
|
}
|
||||||
return aberrantLoadMessageDescReentrant(t, name)
|
return aberrantLoadMessageDescReentrant(t, name)
|
||||||
}
|
}
|
||||||
func aberrantLoadMessageDescReentrant(t reflect.Type, name pref.FullName) pref.MessageDescriptor {
|
func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {
|
||||||
// Fast-path: check if an MessageDescriptor is cached for this concrete type.
|
// Fast-path: check if an MessageDescriptor is cached for this concrete type.
|
||||||
if md, ok := aberrantMessageDescCache[t]; ok {
|
if md, ok := aberrantMessageDescCache[t]; ok {
|
||||||
return md
|
return md
|
||||||
@@ -225,9 +223,9 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name pref.FullName) pref.M
|
|||||||
vs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0]
|
vs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0]
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
v := vs.Index(i)
|
v := vs.Index(i)
|
||||||
md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, [2]pref.FieldNumber{
|
md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, [2]protoreflect.FieldNumber{
|
||||||
pref.FieldNumber(v.FieldByName("Start").Int()),
|
protoreflect.FieldNumber(v.FieldByName("Start").Int()),
|
||||||
pref.FieldNumber(v.FieldByName("End").Int() + 1),
|
protoreflect.FieldNumber(v.FieldByName("End").Int() + 1),
|
||||||
})
|
})
|
||||||
md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, nil)
|
md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, nil)
|
||||||
}
|
}
|
||||||
@@ -245,7 +243,7 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name pref.FullName) pref.M
|
|||||||
n := len(md.L2.Oneofs.List)
|
n := len(md.L2.Oneofs.List)
|
||||||
md.L2.Oneofs.List = append(md.L2.Oneofs.List, filedesc.Oneof{})
|
md.L2.Oneofs.List = append(md.L2.Oneofs.List, filedesc.Oneof{})
|
||||||
od := &md.L2.Oneofs.List[n]
|
od := &md.L2.Oneofs.List[n]
|
||||||
od.L0.FullName = md.FullName().Append(pref.Name(tag))
|
od.L0.FullName = md.FullName().Append(protoreflect.Name(tag))
|
||||||
od.L0.ParentFile = md.L0.ParentFile
|
od.L0.ParentFile = md.L0.ParentFile
|
||||||
od.L0.Parent = md
|
od.L0.Parent = md
|
||||||
od.L0.Index = n
|
od.L0.Index = n
|
||||||
@@ -267,14 +265,14 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name pref.FullName) pref.M
|
|||||||
return md
|
return md
|
||||||
}
|
}
|
||||||
|
|
||||||
func aberrantDeriveMessageName(t reflect.Type, name pref.FullName) pref.FullName {
|
func aberrantDeriveMessageName(t reflect.Type, name protoreflect.FullName) protoreflect.FullName {
|
||||||
if name.IsValid() {
|
if name.IsValid() {
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
func() {
|
func() {
|
||||||
defer func() { recover() }() // swallow possible nil panics
|
defer func() { recover() }() // swallow possible nil panics
|
||||||
if m, ok := reflect.Zero(t).Interface().(interface{ XXX_MessageName() string }); ok {
|
if m, ok := reflect.Zero(t).Interface().(interface{ XXX_MessageName() string }); ok {
|
||||||
name = pref.FullName(m.XXX_MessageName())
|
name = protoreflect.FullName(m.XXX_MessageName())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if name.IsValid() {
|
if name.IsValid() {
|
||||||
@@ -305,7 +303,7 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,
|
|||||||
fd.L0.Index = n
|
fd.L0.Index = n
|
||||||
|
|
||||||
if fd.L1.IsWeak || fd.L1.HasPacked {
|
if fd.L1.IsWeak || fd.L1.HasPacked {
|
||||||
fd.L1.Options = func() pref.ProtoMessage {
|
fd.L1.Options = func() protoreflect.ProtoMessage {
|
||||||
opts := descopts.Field.ProtoReflect().New()
|
opts := descopts.Field.ProtoReflect().New()
|
||||||
if fd.L1.IsWeak {
|
if fd.L1.IsWeak {
|
||||||
opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true))
|
opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true))
|
||||||
@@ -318,17 +316,17 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Populate Enum and Message.
|
// Populate Enum and Message.
|
||||||
if fd.Enum() == nil && fd.Kind() == pref.EnumKind {
|
if fd.Enum() == nil && fd.Kind() == protoreflect.EnumKind {
|
||||||
switch v := reflect.Zero(t).Interface().(type) {
|
switch v := reflect.Zero(t).Interface().(type) {
|
||||||
case pref.Enum:
|
case protoreflect.Enum:
|
||||||
fd.L1.Enum = v.Descriptor()
|
fd.L1.Enum = v.Descriptor()
|
||||||
default:
|
default:
|
||||||
fd.L1.Enum = LegacyLoadEnumDesc(t)
|
fd.L1.Enum = LegacyLoadEnumDesc(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if fd.Message() == nil && (fd.Kind() == pref.MessageKind || fd.Kind() == pref.GroupKind) {
|
if fd.Message() == nil && (fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind) {
|
||||||
switch v := reflect.Zero(t).Interface().(type) {
|
switch v := reflect.Zero(t).Interface().(type) {
|
||||||
case pref.ProtoMessage:
|
case protoreflect.ProtoMessage:
|
||||||
fd.L1.Message = v.ProtoReflect().Descriptor()
|
fd.L1.Message = v.ProtoReflect().Descriptor()
|
||||||
case messageV1:
|
case messageV1:
|
||||||
fd.L1.Message = LegacyLoadMessageDesc(t)
|
fd.L1.Message = LegacyLoadMessageDesc(t)
|
||||||
@@ -337,13 +335,13 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,
|
|||||||
n := len(md.L1.Messages.List)
|
n := len(md.L1.Messages.List)
|
||||||
md.L1.Messages.List = append(md.L1.Messages.List, filedesc.Message{L2: new(filedesc.MessageL2)})
|
md.L1.Messages.List = append(md.L1.Messages.List, filedesc.Message{L2: new(filedesc.MessageL2)})
|
||||||
md2 := &md.L1.Messages.List[n]
|
md2 := &md.L1.Messages.List[n]
|
||||||
md2.L0.FullName = md.FullName().Append(pref.Name(strs.MapEntryName(string(fd.Name()))))
|
md2.L0.FullName = md.FullName().Append(protoreflect.Name(strs.MapEntryName(string(fd.Name()))))
|
||||||
md2.L0.ParentFile = md.L0.ParentFile
|
md2.L0.ParentFile = md.L0.ParentFile
|
||||||
md2.L0.Parent = md
|
md2.L0.Parent = md
|
||||||
md2.L0.Index = n
|
md2.L0.Index = n
|
||||||
|
|
||||||
md2.L1.IsMapEntry = true
|
md2.L1.IsMapEntry = true
|
||||||
md2.L2.Options = func() pref.ProtoMessage {
|
md2.L2.Options = func() protoreflect.ProtoMessage {
|
||||||
opts := descopts.Message.ProtoReflect().New()
|
opts := descopts.Message.ProtoReflect().New()
|
||||||
opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOfBool(true))
|
opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOfBool(true))
|
||||||
return opts.Interface()
|
return opts.Interface()
|
||||||
@@ -364,8 +362,8 @@ type placeholderEnumValues struct {
|
|||||||
protoreflect.EnumValueDescriptors
|
protoreflect.EnumValueDescriptors
|
||||||
}
|
}
|
||||||
|
|
||||||
func (placeholderEnumValues) ByNumber(n pref.EnumNumber) pref.EnumValueDescriptor {
|
func (placeholderEnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor {
|
||||||
return filedesc.PlaceholderEnumValue(pref.FullName(fmt.Sprintf("UNKNOWN_%d", n)))
|
return filedesc.PlaceholderEnumValue(protoreflect.FullName(fmt.Sprintf("UNKNOWN_%d", n)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// legacyMarshaler is the proto.Marshaler interface superseded by protoiface.Methoder.
|
// legacyMarshaler is the proto.Marshaler interface superseded by protoiface.Methoder.
|
||||||
@@ -383,7 +381,7 @@ type legacyMerger interface {
|
|||||||
Merge(protoiface.MessageV1)
|
Merge(protoiface.MessageV1)
|
||||||
}
|
}
|
||||||
|
|
||||||
var aberrantProtoMethods = &piface.Methods{
|
var aberrantProtoMethods = &protoiface.Methods{
|
||||||
Marshal: legacyMarshal,
|
Marshal: legacyMarshal,
|
||||||
Unmarshal: legacyUnmarshal,
|
Unmarshal: legacyUnmarshal,
|
||||||
Merge: legacyMerge,
|
Merge: legacyMerge,
|
||||||
@@ -392,40 +390,40 @@ var aberrantProtoMethods = &piface.Methods{
|
|||||||
// supports deterministic serialization or not, but this
|
// supports deterministic serialization or not, but this
|
||||||
// preserves the v1 implementation's behavior of always
|
// preserves the v1 implementation's behavior of always
|
||||||
// calling Marshal methods when present.
|
// calling Marshal methods when present.
|
||||||
Flags: piface.SupportMarshalDeterministic,
|
Flags: protoiface.SupportMarshalDeterministic,
|
||||||
}
|
}
|
||||||
|
|
||||||
func legacyMarshal(in piface.MarshalInput) (piface.MarshalOutput, error) {
|
func legacyMarshal(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
|
||||||
v := in.Message.(unwrapper).protoUnwrap()
|
v := in.Message.(unwrapper).protoUnwrap()
|
||||||
marshaler, ok := v.(legacyMarshaler)
|
marshaler, ok := v.(legacyMarshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return piface.MarshalOutput{}, errors.New("%T does not implement Marshal", v)
|
return protoiface.MarshalOutput{}, errors.New("%T does not implement Marshal", v)
|
||||||
}
|
}
|
||||||
out, err := marshaler.Marshal()
|
out, err := marshaler.Marshal()
|
||||||
if in.Buf != nil {
|
if in.Buf != nil {
|
||||||
out = append(in.Buf, out...)
|
out = append(in.Buf, out...)
|
||||||
}
|
}
|
||||||
return piface.MarshalOutput{
|
return protoiface.MarshalOutput{
|
||||||
Buf: out,
|
Buf: out,
|
||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func legacyUnmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutput, error) {
|
func legacyUnmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
|
||||||
v := in.Message.(unwrapper).protoUnwrap()
|
v := in.Message.(unwrapper).protoUnwrap()
|
||||||
unmarshaler, ok := v.(legacyUnmarshaler)
|
unmarshaler, ok := v.(legacyUnmarshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return piface.UnmarshalOutput{}, errors.New("%T does not implement Unmarshal", v)
|
return protoiface.UnmarshalOutput{}, errors.New("%T does not implement Unmarshal", v)
|
||||||
}
|
}
|
||||||
return piface.UnmarshalOutput{}, unmarshaler.Unmarshal(in.Buf)
|
return protoiface.UnmarshalOutput{}, unmarshaler.Unmarshal(in.Buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func legacyMerge(in piface.MergeInput) piface.MergeOutput {
|
func legacyMerge(in protoiface.MergeInput) protoiface.MergeOutput {
|
||||||
// Check whether this supports the legacy merger.
|
// Check whether this supports the legacy merger.
|
||||||
dstv := in.Destination.(unwrapper).protoUnwrap()
|
dstv := in.Destination.(unwrapper).protoUnwrap()
|
||||||
merger, ok := dstv.(legacyMerger)
|
merger, ok := dstv.(legacyMerger)
|
||||||
if ok {
|
if ok {
|
||||||
merger.Merge(Export{}.ProtoMessageV1Of(in.Source))
|
merger.Merge(Export{}.ProtoMessageV1Of(in.Source))
|
||||||
return piface.MergeOutput{Flags: piface.MergeComplete}
|
return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If legacy merger is unavailable, implement merge in terms of
|
// If legacy merger is unavailable, implement merge in terms of
|
||||||
@@ -433,29 +431,29 @@ func legacyMerge(in piface.MergeInput) piface.MergeOutput {
|
|||||||
srcv := in.Source.(unwrapper).protoUnwrap()
|
srcv := in.Source.(unwrapper).protoUnwrap()
|
||||||
marshaler, ok := srcv.(legacyMarshaler)
|
marshaler, ok := srcv.(legacyMarshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return piface.MergeOutput{}
|
return protoiface.MergeOutput{}
|
||||||
}
|
}
|
||||||
dstv = in.Destination.(unwrapper).protoUnwrap()
|
dstv = in.Destination.(unwrapper).protoUnwrap()
|
||||||
unmarshaler, ok := dstv.(legacyUnmarshaler)
|
unmarshaler, ok := dstv.(legacyUnmarshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return piface.MergeOutput{}
|
return protoiface.MergeOutput{}
|
||||||
}
|
}
|
||||||
if !in.Source.IsValid() {
|
if !in.Source.IsValid() {
|
||||||
// Legacy Marshal methods may not function on nil messages.
|
// Legacy Marshal methods may not function on nil messages.
|
||||||
// Check for a typed nil source only after we confirm that
|
// Check for a typed nil source only after we confirm that
|
||||||
// legacy Marshal/Unmarshal methods are present, for
|
// legacy Marshal/Unmarshal methods are present, for
|
||||||
// consistency.
|
// consistency.
|
||||||
return piface.MergeOutput{Flags: piface.MergeComplete}
|
return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
|
||||||
}
|
}
|
||||||
b, err := marshaler.Marshal()
|
b, err := marshaler.Marshal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return piface.MergeOutput{}
|
return protoiface.MergeOutput{}
|
||||||
}
|
}
|
||||||
err = unmarshaler.Unmarshal(b)
|
err = unmarshaler.Unmarshal(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return piface.MergeOutput{}
|
return protoiface.MergeOutput{}
|
||||||
}
|
}
|
||||||
return piface.MergeOutput{Flags: piface.MergeComplete}
|
return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
|
||||||
}
|
}
|
||||||
|
|
||||||
// aberrantMessageType implements MessageType for all types other than pointer-to-struct.
|
// aberrantMessageType implements MessageType for all types other than pointer-to-struct.
|
||||||
@@ -463,19 +461,19 @@ type aberrantMessageType struct {
|
|||||||
t reflect.Type
|
t reflect.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mt aberrantMessageType) New() pref.Message {
|
func (mt aberrantMessageType) New() protoreflect.Message {
|
||||||
if mt.t.Kind() == reflect.Ptr {
|
if mt.t.Kind() == reflect.Ptr {
|
||||||
return aberrantMessage{reflect.New(mt.t.Elem())}
|
return aberrantMessage{reflect.New(mt.t.Elem())}
|
||||||
}
|
}
|
||||||
return aberrantMessage{reflect.Zero(mt.t)}
|
return aberrantMessage{reflect.Zero(mt.t)}
|
||||||
}
|
}
|
||||||
func (mt aberrantMessageType) Zero() pref.Message {
|
func (mt aberrantMessageType) Zero() protoreflect.Message {
|
||||||
return aberrantMessage{reflect.Zero(mt.t)}
|
return aberrantMessage{reflect.Zero(mt.t)}
|
||||||
}
|
}
|
||||||
func (mt aberrantMessageType) GoType() reflect.Type {
|
func (mt aberrantMessageType) GoType() reflect.Type {
|
||||||
return mt.t
|
return mt.t
|
||||||
}
|
}
|
||||||
func (mt aberrantMessageType) Descriptor() pref.MessageDescriptor {
|
func (mt aberrantMessageType) Descriptor() protoreflect.MessageDescriptor {
|
||||||
return LegacyLoadMessageDesc(mt.t)
|
return LegacyLoadMessageDesc(mt.t)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,56 +497,56 @@ func (m aberrantMessage) Reset() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m aberrantMessage) ProtoReflect() pref.Message {
|
func (m aberrantMessage) ProtoReflect() protoreflect.Message {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m aberrantMessage) Descriptor() pref.MessageDescriptor {
|
func (m aberrantMessage) Descriptor() protoreflect.MessageDescriptor {
|
||||||
return LegacyLoadMessageDesc(m.v.Type())
|
return LegacyLoadMessageDesc(m.v.Type())
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Type() pref.MessageType {
|
func (m aberrantMessage) Type() protoreflect.MessageType {
|
||||||
return aberrantMessageType{m.v.Type()}
|
return aberrantMessageType{m.v.Type()}
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) New() pref.Message {
|
func (m aberrantMessage) New() protoreflect.Message {
|
||||||
if m.v.Type().Kind() == reflect.Ptr {
|
if m.v.Type().Kind() == reflect.Ptr {
|
||||||
return aberrantMessage{reflect.New(m.v.Type().Elem())}
|
return aberrantMessage{reflect.New(m.v.Type().Elem())}
|
||||||
}
|
}
|
||||||
return aberrantMessage{reflect.Zero(m.v.Type())}
|
return aberrantMessage{reflect.Zero(m.v.Type())}
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Interface() pref.ProtoMessage {
|
func (m aberrantMessage) Interface() protoreflect.ProtoMessage {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
|
func (m aberrantMessage) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Has(pref.FieldDescriptor) bool {
|
func (m aberrantMessage) Has(protoreflect.FieldDescriptor) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Clear(pref.FieldDescriptor) {
|
func (m aberrantMessage) Clear(protoreflect.FieldDescriptor) {
|
||||||
panic("invalid Message.Clear on " + string(m.Descriptor().FullName()))
|
panic("invalid Message.Clear on " + string(m.Descriptor().FullName()))
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Get(fd pref.FieldDescriptor) pref.Value {
|
func (m aberrantMessage) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
|
||||||
if fd.Default().IsValid() {
|
if fd.Default().IsValid() {
|
||||||
return fd.Default()
|
return fd.Default()
|
||||||
}
|
}
|
||||||
panic("invalid Message.Get on " + string(m.Descriptor().FullName()))
|
panic("invalid Message.Get on " + string(m.Descriptor().FullName()))
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Set(pref.FieldDescriptor, pref.Value) {
|
func (m aberrantMessage) Set(protoreflect.FieldDescriptor, protoreflect.Value) {
|
||||||
panic("invalid Message.Set on " + string(m.Descriptor().FullName()))
|
panic("invalid Message.Set on " + string(m.Descriptor().FullName()))
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) Mutable(pref.FieldDescriptor) pref.Value {
|
func (m aberrantMessage) Mutable(protoreflect.FieldDescriptor) protoreflect.Value {
|
||||||
panic("invalid Message.Mutable on " + string(m.Descriptor().FullName()))
|
panic("invalid Message.Mutable on " + string(m.Descriptor().FullName()))
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) NewField(pref.FieldDescriptor) pref.Value {
|
func (m aberrantMessage) NewField(protoreflect.FieldDescriptor) protoreflect.Value {
|
||||||
panic("invalid Message.NewField on " + string(m.Descriptor().FullName()))
|
panic("invalid Message.NewField on " + string(m.Descriptor().FullName()))
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
|
func (m aberrantMessage) WhichOneof(protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
|
||||||
panic("invalid Message.WhichOneof descriptor on " + string(m.Descriptor().FullName()))
|
panic("invalid Message.WhichOneof descriptor on " + string(m.Descriptor().FullName()))
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) GetUnknown() pref.RawFields {
|
func (m aberrantMessage) GetUnknown() protoreflect.RawFields {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) SetUnknown(pref.RawFields) {
|
func (m aberrantMessage) SetUnknown(protoreflect.RawFields) {
|
||||||
// SetUnknown discards its input on messages which don't support unknown field storage.
|
// SetUnknown discards its input on messages which don't support unknown field storage.
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) IsValid() bool {
|
func (m aberrantMessage) IsValid() bool {
|
||||||
@@ -557,7 +555,7 @@ func (m aberrantMessage) IsValid() bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) ProtoMethods() *piface.Methods {
|
func (m aberrantMessage) ProtoMethods() *protoiface.Methods {
|
||||||
return aberrantProtoMethods
|
return aberrantProtoMethods
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) protoUnwrap() interface{} {
|
func (m aberrantMessage) protoUnwrap() interface{} {
|
||||||
|
|||||||
+16
-16
@@ -9,8 +9,8 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mergeOptions struct{}
|
type mergeOptions struct{}
|
||||||
@@ -20,17 +20,17 @@ func (o mergeOptions) Merge(dst, src proto.Message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// merge is protoreflect.Methods.Merge.
|
// merge is protoreflect.Methods.Merge.
|
||||||
func (mi *MessageInfo) merge(in piface.MergeInput) piface.MergeOutput {
|
func (mi *MessageInfo) merge(in protoiface.MergeInput) protoiface.MergeOutput {
|
||||||
dp, ok := mi.getPointer(in.Destination)
|
dp, ok := mi.getPointer(in.Destination)
|
||||||
if !ok {
|
if !ok {
|
||||||
return piface.MergeOutput{}
|
return protoiface.MergeOutput{}
|
||||||
}
|
}
|
||||||
sp, ok := mi.getPointer(in.Source)
|
sp, ok := mi.getPointer(in.Source)
|
||||||
if !ok {
|
if !ok {
|
||||||
return piface.MergeOutput{}
|
return protoiface.MergeOutput{}
|
||||||
}
|
}
|
||||||
mi.mergePointer(dp, sp, mergeOptions{})
|
mi.mergePointer(dp, sp, mergeOptions{})
|
||||||
return piface.MergeOutput{Flags: piface.MergeComplete}
|
return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) {
|
func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) {
|
||||||
@@ -64,7 +64,7 @@ func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
dx := (*dext)[num]
|
dx := (*dext)[num]
|
||||||
var dv pref.Value
|
var dv protoreflect.Value
|
||||||
if dx.Type() == sx.Type() {
|
if dx.Type() == sx.Type() {
|
||||||
dv = dx.Value()
|
dv = dx.Value()
|
||||||
}
|
}
|
||||||
@@ -85,15 +85,15 @@ func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeScalarValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
func mergeScalarValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
|
||||||
return src
|
return src
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeBytesValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
func mergeBytesValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
|
||||||
return pref.ValueOfBytes(append(emptyBuf[:], src.Bytes()...))
|
return protoreflect.ValueOfBytes(append(emptyBuf[:], src.Bytes()...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeListValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
func mergeListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
|
||||||
dstl := dst.List()
|
dstl := dst.List()
|
||||||
srcl := src.List()
|
srcl := src.List()
|
||||||
for i, llen := 0, srcl.Len(); i < llen; i++ {
|
for i, llen := 0, srcl.Len(); i < llen; i++ {
|
||||||
@@ -102,29 +102,29 @@ func mergeListValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
|||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeBytesListValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
func mergeBytesListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
|
||||||
dstl := dst.List()
|
dstl := dst.List()
|
||||||
srcl := src.List()
|
srcl := src.List()
|
||||||
for i, llen := 0, srcl.Len(); i < llen; i++ {
|
for i, llen := 0, srcl.Len(); i < llen; i++ {
|
||||||
sb := srcl.Get(i).Bytes()
|
sb := srcl.Get(i).Bytes()
|
||||||
db := append(emptyBuf[:], sb...)
|
db := append(emptyBuf[:], sb...)
|
||||||
dstl.Append(pref.ValueOfBytes(db))
|
dstl.Append(protoreflect.ValueOfBytes(db))
|
||||||
}
|
}
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeMessageListValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
func mergeMessageListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
|
||||||
dstl := dst.List()
|
dstl := dst.List()
|
||||||
srcl := src.List()
|
srcl := src.List()
|
||||||
for i, llen := 0, srcl.Len(); i < llen; i++ {
|
for i, llen := 0, srcl.Len(); i < llen; i++ {
|
||||||
sm := srcl.Get(i).Message()
|
sm := srcl.Get(i).Message()
|
||||||
dm := proto.Clone(sm.Interface()).ProtoReflect()
|
dm := proto.Clone(sm.Interface()).ProtoReflect()
|
||||||
dstl.Append(pref.ValueOfMessage(dm))
|
dstl.Append(protoreflect.ValueOfMessage(dm))
|
||||||
}
|
}
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeMessageValue(dst, src pref.Value, opts mergeOptions) pref.Value {
|
func mergeMessageValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
|
||||||
opts.Merge(dst.Message().Interface(), src.Message().Interface())
|
opts.Merge(dst.Message().Interface(), src.Message().Interface())
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-19
@@ -14,8 +14,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/protobuf/internal/genid"
|
"google.golang.org/protobuf/internal/genid"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
pref "google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
preg "google.golang.org/protobuf/reflect/protoregistry"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// MessageInfo provides protobuf related functionality for a given Go type
|
// MessageInfo provides protobuf related functionality for a given Go type
|
||||||
@@ -29,7 +28,7 @@ type MessageInfo struct {
|
|||||||
GoReflectType reflect.Type // pointer to struct
|
GoReflectType reflect.Type // pointer to struct
|
||||||
|
|
||||||
// Desc is the underlying message descriptor type and must be populated.
|
// Desc is the underlying message descriptor type and must be populated.
|
||||||
Desc pref.MessageDescriptor
|
Desc protoreflect.MessageDescriptor
|
||||||
|
|
||||||
// Exporter must be provided in a purego environment in order to provide
|
// Exporter must be provided in a purego environment in order to provide
|
||||||
// access to unexported fields.
|
// access to unexported fields.
|
||||||
@@ -54,7 +53,7 @@ type exporter func(v interface{}, i int) interface{}
|
|||||||
// is generated by our implementation of protoc-gen-go (for v2 and on).
|
// is generated by our implementation of protoc-gen-go (for v2 and on).
|
||||||
// If it is unable to obtain a MessageInfo, it returns nil.
|
// If it is unable to obtain a MessageInfo, it returns nil.
|
||||||
func getMessageInfo(mt reflect.Type) *MessageInfo {
|
func getMessageInfo(mt reflect.Type) *MessageInfo {
|
||||||
m, ok := reflect.Zero(mt).Interface().(pref.ProtoMessage)
|
m, ok := reflect.Zero(mt).Interface().(protoreflect.ProtoMessage)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -97,7 +96,7 @@ func (mi *MessageInfo) initOnce() {
|
|||||||
// getPointer returns the pointer for a message, which should be of
|
// getPointer returns the pointer for a message, which should be of
|
||||||
// the type of the MessageInfo. If the message is of a different type,
|
// the type of the MessageInfo. If the message is of a different type,
|
||||||
// it returns ok==false.
|
// it returns ok==false.
|
||||||
func (mi *MessageInfo) getPointer(m pref.Message) (p pointer, ok bool) {
|
func (mi *MessageInfo) getPointer(m protoreflect.Message) (p pointer, ok bool) {
|
||||||
switch m := m.(type) {
|
switch m := m.(type) {
|
||||||
case *messageState:
|
case *messageState:
|
||||||
return m.pointer(), m.messageInfo() == mi
|
return m.pointer(), m.messageInfo() == mi
|
||||||
@@ -134,10 +133,10 @@ type structInfo struct {
|
|||||||
extensionOffset offset
|
extensionOffset offset
|
||||||
extensionType reflect.Type
|
extensionType reflect.Type
|
||||||
|
|
||||||
fieldsByNumber map[pref.FieldNumber]reflect.StructField
|
fieldsByNumber map[protoreflect.FieldNumber]reflect.StructField
|
||||||
oneofsByName map[pref.Name]reflect.StructField
|
oneofsByName map[protoreflect.Name]reflect.StructField
|
||||||
oneofWrappersByType map[reflect.Type]pref.FieldNumber
|
oneofWrappersByType map[reflect.Type]protoreflect.FieldNumber
|
||||||
oneofWrappersByNumber map[pref.FieldNumber]reflect.Type
|
oneofWrappersByNumber map[protoreflect.FieldNumber]reflect.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo {
|
func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo {
|
||||||
@@ -147,10 +146,10 @@ func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo {
|
|||||||
unknownOffset: invalidOffset,
|
unknownOffset: invalidOffset,
|
||||||
extensionOffset: invalidOffset,
|
extensionOffset: invalidOffset,
|
||||||
|
|
||||||
fieldsByNumber: map[pref.FieldNumber]reflect.StructField{},
|
fieldsByNumber: map[protoreflect.FieldNumber]reflect.StructField{},
|
||||||
oneofsByName: map[pref.Name]reflect.StructField{},
|
oneofsByName: map[protoreflect.Name]reflect.StructField{},
|
||||||
oneofWrappersByType: map[reflect.Type]pref.FieldNumber{},
|
oneofWrappersByType: map[reflect.Type]protoreflect.FieldNumber{},
|
||||||
oneofWrappersByNumber: map[pref.FieldNumber]reflect.Type{},
|
oneofWrappersByNumber: map[protoreflect.FieldNumber]reflect.Type{},
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldLoop:
|
fieldLoop:
|
||||||
@@ -180,12 +179,12 @@ fieldLoop:
|
|||||||
for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") {
|
for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") {
|
||||||
if len(s) > 0 && strings.Trim(s, "0123456789") == "" {
|
if len(s) > 0 && strings.Trim(s, "0123456789") == "" {
|
||||||
n, _ := strconv.ParseUint(s, 10, 64)
|
n, _ := strconv.ParseUint(s, 10, 64)
|
||||||
si.fieldsByNumber[pref.FieldNumber(n)] = f
|
si.fieldsByNumber[protoreflect.FieldNumber(n)] = f
|
||||||
continue fieldLoop
|
continue fieldLoop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if s := f.Tag.Get("protobuf_oneof"); len(s) > 0 {
|
if s := f.Tag.Get("protobuf_oneof"); len(s) > 0 {
|
||||||
si.oneofsByName[pref.Name(s)] = f
|
si.oneofsByName[protoreflect.Name(s)] = f
|
||||||
continue fieldLoop
|
continue fieldLoop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,8 +207,8 @@ fieldLoop:
|
|||||||
for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") {
|
for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") {
|
||||||
if len(s) > 0 && strings.Trim(s, "0123456789") == "" {
|
if len(s) > 0 && strings.Trim(s, "0123456789") == "" {
|
||||||
n, _ := strconv.ParseUint(s, 10, 64)
|
n, _ := strconv.ParseUint(s, 10, 64)
|
||||||
si.oneofWrappersByType[tf] = pref.FieldNumber(n)
|
si.oneofWrappersByType[tf] = protoreflect.FieldNumber(n)
|
||||||
si.oneofWrappersByNumber[pref.FieldNumber(n)] = tf
|
si.oneofWrappersByNumber[protoreflect.FieldNumber(n)] = tf
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,7 +218,11 @@ fieldLoop:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (mi *MessageInfo) New() protoreflect.Message {
|
func (mi *MessageInfo) New() protoreflect.Message {
|
||||||
return mi.MessageOf(reflect.New(mi.GoReflectType.Elem()).Interface())
|
m := reflect.New(mi.GoReflectType.Elem()).Interface()
|
||||||
|
if r, ok := m.(protoreflect.ProtoMessage); ok {
|
||||||
|
return r.ProtoReflect()
|
||||||
|
}
|
||||||
|
return mi.MessageOf(m)
|
||||||
}
|
}
|
||||||
func (mi *MessageInfo) Zero() protoreflect.Message {
|
func (mi *MessageInfo) Zero() protoreflect.Message {
|
||||||
return mi.MessageOf(reflect.Zero(mi.GoReflectType).Interface())
|
return mi.MessageOf(reflect.Zero(mi.GoReflectType).Interface())
|
||||||
@@ -237,7 +240,7 @@ func (mi *MessageInfo) Message(i int) protoreflect.MessageType {
|
|||||||
fd := mi.Desc.Fields().Get(i)
|
fd := mi.Desc.Fields().Get(i)
|
||||||
switch {
|
switch {
|
||||||
case fd.IsWeak():
|
case fd.IsWeak():
|
||||||
mt, _ := preg.GlobalTypes.FindMessageByName(fd.Message().FullName())
|
mt, _ := protoregistry.GlobalTypes.FindMessageByName(fd.Message().FullName())
|
||||||
return mt
|
return mt
|
||||||
case fd.IsMap():
|
case fd.IsMap():
|
||||||
return mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]}
|
return mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user