chore(deps): bump google.golang.org/api from 0.155.0 to 0.157.0 (#2960)
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.155.0 to 0.157.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.155.0...v0.157.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
parent
e4e936d510
commit
6d641cc5c9
13
go.mod
13
go.mod
|
|
@ -48,7 +48,7 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.110.10 // indirect
|
cloud.google.com/go v0.111.0 // indirect
|
||||||
cloud.google.com/go/compute v1.23.3 // indirect
|
cloud.google.com/go/compute v1.23.3 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
cloud.google.com/go/iam v1.1.5 // indirect
|
cloud.google.com/go/iam v1.1.5 // indirect
|
||||||
|
|
@ -145,12 +145,11 @@ require (
|
||||||
golang.org/x/sys v0.16.0
|
golang.org/x/sys v0.16.0
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
golang.org/x/time v0.5.0 // indirect
|
golang.org/x/time v0.5.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
google.golang.org/api v0.157.0
|
||||||
google.golang.org/api v0.155.0
|
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
google.golang.org/appengine v1.6.8 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect
|
google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect
|
||||||
google.golang.org/grpc v1.60.1 // indirect
|
google.golang.org/grpc v1.60.1 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
google.golang.org/protobuf v1.32.0 // indirect
|
||||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -199,8 +198,8 @@ require (
|
||||||
go.opentelemetry.io/otel/trace v1.21.0 // indirect
|
go.opentelemetry.io/otel/trace v1.21.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20231219160207-73b9e39aefca // indirect
|
golang.org/x/exp v0.0.0-20231219160207-73b9e39aefca // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
26
go.sum
26
go.sum
|
|
@ -13,8 +13,8 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV
|
||||||
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
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.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
||||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||||
cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
|
cloud.google.com/go v0.111.0 h1:YHLKNupSD1KqjDbQ3+LVdQ81h/UJbJyZG203cEfnQgM=
|
||||||
cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
|
cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
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.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.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||||
|
|
@ -609,6 +609,7 @@ go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
|
||||||
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
|
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
|
||||||
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
|
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
|
||||||
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
|
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o=
|
||||||
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
|
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
|
||||||
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
|
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
|
|
@ -876,7 +877,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
|
||||||
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=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
|
||||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
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.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.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
||||||
|
|
@ -893,8 +893,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
|
||||||
google.golang.org/api v0.28.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.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
|
||||||
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
|
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
|
||||||
google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA=
|
google.golang.org/api v0.157.0 h1:ORAeqmbrrozeyw5NjnMxh7peHO0UzV4wWYSwZeCUb20=
|
||||||
google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk=
|
google.golang.org/api v0.157.0/go.mod h1:+z4v4ufbZ1WEpld6yMGHyggs+PmAHiaLNj5ytP3N01g=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
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.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
|
@ -932,12 +932,12 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
|
||||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
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-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/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg=
|
google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 h1:nz5NESFLZbJGPFxDT/HCn+V1mZ8JGNoY4nUpmW/Y2eg=
|
||||||
google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic=
|
google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3 h1:EWIeHfGuUf00zrVZGEgYFxok7plSAXBGcH7NNdMAWvA=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 h1:rcS6EyEaoCO52hQDupoSfrxI3R6C2Tq741is7X8OvnM=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac h1:nUQEQmH/csSvFECKYRv6HWEyypysidKl2I6Qpsglq/0=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
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.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
|
@ -966,8 +966,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
|
||||||
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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
|
||||||
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
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-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|
|
||||||
|
|
@ -619,6 +619,16 @@
|
||||||
"release_level": "stable",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/cloudprofiler/apiv2": {
|
||||||
|
"api_shortname": "cloudprofiler",
|
||||||
|
"distribution_name": "cloud.google.com/go/cloudprofiler/apiv2",
|
||||||
|
"description": "Cloud Profiler API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudprofiler/latest/apiv2",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/cloudtasks/apiv2": {
|
"cloud.google.com/go/cloudtasks/apiv2": {
|
||||||
"api_shortname": "cloudtasks",
|
"api_shortname": "cloudtasks",
|
||||||
"distribution_name": "cloud.google.com/go/cloudtasks/apiv2",
|
"distribution_name": "cloud.google.com/go/cloudtasks/apiv2",
|
||||||
|
|
@ -1019,6 +1029,16 @@
|
||||||
"release_level": "stable",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/edgenetwork/apiv1": {
|
||||||
|
"api_shortname": "edgenetwork",
|
||||||
|
"distribution_name": "cloud.google.com/go/edgenetwork/apiv1",
|
||||||
|
"description": "Distributed Cloud Edge Network API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/edgenetwork/latest/apiv1",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/errorreporting": {
|
"cloud.google.com/go/errorreporting": {
|
||||||
"api_shortname": "clouderrorreporting",
|
"api_shortname": "clouderrorreporting",
|
||||||
"distribution_name": "cloud.google.com/go/errorreporting",
|
"distribution_name": "cloud.google.com/go/errorreporting",
|
||||||
|
|
@ -1099,6 +1119,16 @@
|
||||||
"release_level": "stable",
|
"release_level": "stable",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/firestore/apiv1/admin": {
|
||||||
|
"api_shortname": "firestore",
|
||||||
|
"distribution_name": "cloud.google.com/go/firestore/apiv1/admin",
|
||||||
|
"description": "Cloud Firestore API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1/admin",
|
||||||
|
"release_level": "stable",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/functions/apiv1": {
|
"cloud.google.com/go/functions/apiv1": {
|
||||||
"api_shortname": "cloudfunctions",
|
"api_shortname": "cloudfunctions",
|
||||||
"distribution_name": "cloud.google.com/go/functions/apiv1",
|
"distribution_name": "cloud.google.com/go/functions/apiv1",
|
||||||
|
|
@ -2279,6 +2309,16 @@
|
||||||
"release_level": "preview",
|
"release_level": "preview",
|
||||||
"library_type": "GAPIC_AUTO"
|
"library_type": "GAPIC_AUTO"
|
||||||
},
|
},
|
||||||
|
"cloud.google.com/go/telcoautomation/apiv1": {
|
||||||
|
"api_shortname": "telcoautomation",
|
||||||
|
"distribution_name": "cloud.google.com/go/telcoautomation/apiv1",
|
||||||
|
"description": "Telco Automation API",
|
||||||
|
"language": "go",
|
||||||
|
"client_library_type": "generated",
|
||||||
|
"client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/telcoautomation/latest/apiv1",
|
||||||
|
"release_level": "preview",
|
||||||
|
"library_type": "GAPIC_AUTO"
|
||||||
|
},
|
||||||
"cloud.google.com/go/texttospeech/apiv1": {
|
"cloud.google.com/go/texttospeech/apiv1": {
|
||||||
"api_shortname": "texttospeech",
|
"api_shortname": "texttospeech",
|
||||||
"distribution_name": "cloud.google.com/go/texttospeech/apiv1",
|
"distribution_name": "cloud.google.com/go/texttospeech/apiv1",
|
||||||
|
|
|
||||||
|
|
@ -16,35 +16,94 @@ package trace
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"go.opencensus.io/trace"
|
"go.opencensus.io/trace"
|
||||||
"golang.org/x/xerrors"
|
"go.opentelemetry.io/otel"
|
||||||
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
ottrace "go.opentelemetry.io/otel/trace"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
"google.golang.org/genproto/googleapis/rpc/code"
|
"google.golang.org/genproto/googleapis/rpc/code"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
// StartSpan adds a span to the trace with the given name.
|
const (
|
||||||
|
telemetryPlatformTracingOpenCensus = "opencensus"
|
||||||
|
telemetryPlatformTracingOpenTelemetry = "opentelemetry"
|
||||||
|
telemetryPlatformTracingVar = "GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// TODO(chrisdsmith): Should the name of the OpenTelemetry tracer be public and mutable?
|
||||||
|
openTelemetryTracerName string = "cloud.google.com/go"
|
||||||
|
openTelemetryTracingEnabled bool = strings.EqualFold(strings.TrimSpace(
|
||||||
|
os.Getenv(telemetryPlatformTracingVar)), telemetryPlatformTracingOpenTelemetry)
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsOpenCensusTracingEnabled returns true if the environment variable
|
||||||
|
// GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING is NOT set to the
|
||||||
|
// case-insensitive value "opentelemetry".
|
||||||
|
func IsOpenCensusTracingEnabled() bool {
|
||||||
|
return !IsOpenTelemetryTracingEnabled()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsOpenTelemetryTracingEnabled returns true if the environment variable
|
||||||
|
// GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING is set to the
|
||||||
|
// case-insensitive value "opentelemetry".
|
||||||
|
func IsOpenTelemetryTracingEnabled() bool {
|
||||||
|
return openTelemetryTracingEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
// StartSpan adds a span to the trace with the given name. If IsOpenCensusTracingEnabled
|
||||||
|
// returns true, the span will be an OpenCensus span. If IsOpenTelemetryTracingEnabled
|
||||||
|
// returns true, the span will be an OpenTelemetry span. Set the environment variable
|
||||||
|
// GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING to the case-insensitive
|
||||||
|
// value "opentelemetry" before loading the package to use OpenTelemetry tracing.
|
||||||
|
// The default will remain OpenCensus until [TBD], at which time the default will
|
||||||
|
// switch to "opentelemetry" and explicitly setting the environment variable to
|
||||||
|
// "opencensus" will be required to continue using OpenCensus tracing.
|
||||||
func StartSpan(ctx context.Context, name string) context.Context {
|
func StartSpan(ctx context.Context, name string) context.Context {
|
||||||
|
if IsOpenTelemetryTracingEnabled() {
|
||||||
|
ctx, _ = otel.GetTracerProvider().Tracer(openTelemetryTracerName).Start(ctx, name)
|
||||||
|
} else {
|
||||||
ctx, _ = trace.StartSpan(ctx, name)
|
ctx, _ = trace.StartSpan(ctx, name)
|
||||||
|
}
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
// EndSpan ends a span with the given error.
|
// EndSpan ends a span with the given error. If IsOpenCensusTracingEnabled
|
||||||
|
// returns true, the span will be an OpenCensus span. If IsOpenTelemetryTracingEnabled
|
||||||
|
// returns true, the span will be an OpenTelemetry span. Set the environment variable
|
||||||
|
// GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING to the case-insensitive
|
||||||
|
// value "opentelemetry" before loading the package to use OpenTelemetry tracing.
|
||||||
|
// The default will remain OpenCensus until [TBD], at which time the default will
|
||||||
|
// switch to "opentelemetry" and explicitly setting the environment variable to
|
||||||
|
// "opencensus" will be required to continue using OpenCensus tracing.
|
||||||
func EndSpan(ctx context.Context, err error) {
|
func EndSpan(ctx context.Context, err error) {
|
||||||
|
if IsOpenTelemetryTracingEnabled() {
|
||||||
|
span := ottrace.SpanFromContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
span.SetStatus(codes.Error, toOpenTelemetryStatusDescription(err))
|
||||||
|
span.RecordError(err)
|
||||||
|
}
|
||||||
|
span.End()
|
||||||
|
} else {
|
||||||
span := trace.FromContext(ctx)
|
span := trace.FromContext(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.SetStatus(toStatus(err))
|
span.SetStatus(toStatus(err))
|
||||||
}
|
}
|
||||||
span.End()
|
span.End()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// toStatus interrogates an error and converts it to an appropriate
|
// toStatus converts an error to an equivalent OpenCensus status.
|
||||||
// OpenCensus status.
|
|
||||||
func toStatus(err error) trace.Status {
|
func toStatus(err error) trace.Status {
|
||||||
var err2 *googleapi.Error
|
var err2 *googleapi.Error
|
||||||
if ok := xerrors.As(err, &err2); ok {
|
if ok := errors.As(err, &err2); ok {
|
||||||
return trace.Status{Code: httpStatusCodeToOCCode(err2.Code), Message: err2.Message}
|
return trace.Status{Code: httpStatusCodeToOCCode(err2.Code), Message: err2.Message}
|
||||||
} else if s, ok := status.FromError(err); ok {
|
} else if s, ok := status.FromError(err); ok {
|
||||||
return trace.Status{Code: int32(s.Code()), Message: s.Message()}
|
return trace.Status{Code: int32(s.Code()), Message: s.Message()}
|
||||||
|
|
@ -53,6 +112,18 @@ func toStatus(err error) trace.Status {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// toOpenTelemetryStatus converts an error to an equivalent OpenTelemetry status description.
|
||||||
|
func toOpenTelemetryStatusDescription(err error) string {
|
||||||
|
var err2 *googleapi.Error
|
||||||
|
if ok := errors.As(err, &err2); ok {
|
||||||
|
return err2.Message
|
||||||
|
} else if s, ok := status.FromError(err); ok {
|
||||||
|
return s.Message()
|
||||||
|
} else {
|
||||||
|
return err.Error()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(deklerk): switch to using OpenCensus function when it becomes available.
|
// TODO(deklerk): switch to using OpenCensus function when it becomes available.
|
||||||
// Reference: https://github.com/googleapis/googleapis/blob/26b634d2724ac5dd30ae0b0cbfb01f07f2e4050e/google/rpc/code.proto
|
// Reference: https://github.com/googleapis/googleapis/blob/26b634d2724ac5dd30ae0b0cbfb01f07f2e4050e/google/rpc/code.proto
|
||||||
func httpStatusCodeToOCCode(httpStatusCode int) int32 {
|
func httpStatusCodeToOCCode(httpStatusCode int) int32 {
|
||||||
|
|
@ -86,10 +157,33 @@ func httpStatusCodeToOCCode(httpStatusCode int) int32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TracePrintf retrieves the current OpenCensus or OpenTelemetry span from context, then:
|
||||||
|
// * calls Span.Annotatef if OpenCensus is enabled; or
|
||||||
|
// * calls Span.AddEvent if OpenTelemetry is enabled.
|
||||||
|
//
|
||||||
|
// If IsOpenCensusTracingEnabled returns true, the expected span must be an
|
||||||
|
// OpenCensus span. If IsOpenTelemetryTracingEnabled returns true, the expected
|
||||||
|
// span must be an OpenTelemetry span. Set the environment variable
|
||||||
|
// GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING to the case-insensitive
|
||||||
|
// value "opentelemetry" before loading the package to use OpenTelemetry tracing.
|
||||||
|
// The default will remain OpenCensus until [TBD], at which time the default will
|
||||||
|
// switch to "opentelemetry" and explicitly setting the environment variable to
|
||||||
|
// "opencensus" will be required to continue using OpenCensus tracing.
|
||||||
|
func TracePrintf(ctx context.Context, attrMap map[string]interface{}, format string, args ...interface{}) {
|
||||||
|
if IsOpenTelemetryTracingEnabled() {
|
||||||
|
attrs := otAttrs(attrMap)
|
||||||
|
ottrace.SpanFromContext(ctx).AddEvent(fmt.Sprintf(format, args...), ottrace.WithAttributes(attrs...))
|
||||||
|
} else {
|
||||||
|
attrs := ocAttrs(attrMap)
|
||||||
// TODO: (odeke-em): perhaps just pass around spans due to the cost
|
// TODO: (odeke-em): perhaps just pass around spans due to the cost
|
||||||
// incurred from using trace.FromContext(ctx) yet we could avoid
|
// incurred from using trace.FromContext(ctx) yet we could avoid
|
||||||
// throwing away the work done by ctx, span := trace.StartSpan.
|
// throwing away the work done by ctx, span := trace.StartSpan.
|
||||||
func TracePrintf(ctx context.Context, attrMap map[string]interface{}, format string, args ...interface{}) {
|
trace.FromContext(ctx).Annotatef(attrs, format, args...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ocAttrs converts a generic map to OpenCensus attributes.
|
||||||
|
func ocAttrs(attrMap map[string]interface{}) []trace.Attribute {
|
||||||
var attrs []trace.Attribute
|
var attrs []trace.Attribute
|
||||||
for k, v := range attrMap {
|
for k, v := range attrMap {
|
||||||
var a trace.Attribute
|
var a trace.Attribute
|
||||||
|
|
@ -107,5 +201,27 @@ func TracePrintf(ctx context.Context, attrMap map[string]interface{}, format str
|
||||||
}
|
}
|
||||||
attrs = append(attrs, a)
|
attrs = append(attrs, a)
|
||||||
}
|
}
|
||||||
trace.FromContext(ctx).Annotatef(attrs, format, args...)
|
return attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
// otAttrs converts a generic map to OpenTelemetry attributes.
|
||||||
|
func otAttrs(attrMap map[string]interface{}) []attribute.KeyValue {
|
||||||
|
var attrs []attribute.KeyValue
|
||||||
|
for k, v := range attrMap {
|
||||||
|
var a attribute.KeyValue
|
||||||
|
switch v := v.(type) {
|
||||||
|
case string:
|
||||||
|
a = attribute.Key(k).String(v)
|
||||||
|
case bool:
|
||||||
|
a = attribute.Key(k).Bool(v)
|
||||||
|
case int:
|
||||||
|
a = attribute.Key(k).Int(v)
|
||||||
|
case int64:
|
||||||
|
a = attribute.Key(k).Int64(v)
|
||||||
|
default:
|
||||||
|
a = attribute.Key(k).String(fmt.Sprintf("%#v", v))
|
||||||
|
}
|
||||||
|
attrs = append(attrs, a)
|
||||||
|
}
|
||||||
|
return attrs
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
Copyright (c) 2019 The Go Authors. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following disclaimer
|
|
||||||
in the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of Google Inc. nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
Additional IP Rights Grant (Patents)
|
|
||||||
|
|
||||||
"This implementation" means the copyrightable works distributed by
|
|
||||||
Google as part of the Go project.
|
|
||||||
|
|
||||||
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
|
||||||
no-charge, royalty-free, irrevocable (except as stated in this section)
|
|
||||||
patent license to make, have made, use, offer to sell, sell, import,
|
|
||||||
transfer and otherwise run, modify and propagate the contents of this
|
|
||||||
implementation of Go, where such license applies only to those patent
|
|
||||||
claims, both currently owned or controlled by Google and acquired in
|
|
||||||
the future, licensable by Google that are necessarily infringed by this
|
|
||||||
implementation of Go. This grant does not include claims that would be
|
|
||||||
infringed only as a consequence of further modification of this
|
|
||||||
implementation. If you or your agent or exclusive licensee institute or
|
|
||||||
order or agree to the institution of patent litigation against any
|
|
||||||
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
|
||||||
that this implementation of Go or any code incorporated within this
|
|
||||||
implementation of Go constitutes direct or contributory patent
|
|
||||||
infringement, or inducement of patent infringement, then any patent
|
|
||||||
rights granted to you under this License for this implementation of Go
|
|
||||||
shall terminate as of the date such litigation is filed.
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
This repository holds the transition packages for the new Go 1.13 error values.
|
|
||||||
See golang.org/design/29934-error-values.
|
|
||||||
|
|
@ -1,193 +0,0 @@
|
||||||
// Copyright 2018 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 xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"reflect"
|
|
||||||
"strconv"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FormatError calls the FormatError method of f with an errors.Printer
|
|
||||||
// configured according to s and verb, and writes the result to s.
|
|
||||||
func FormatError(f Formatter, s fmt.State, verb rune) {
|
|
||||||
// Assuming this function is only called from the Format method, and given
|
|
||||||
// that FormatError takes precedence over Format, it cannot be called from
|
|
||||||
// any package that supports errors.Formatter. It is therefore safe to
|
|
||||||
// disregard that State may be a specific printer implementation and use one
|
|
||||||
// of our choice instead.
|
|
||||||
|
|
||||||
// limitations: does not support printing error as Go struct.
|
|
||||||
|
|
||||||
var (
|
|
||||||
sep = " " // separator before next error
|
|
||||||
p = &state{State: s}
|
|
||||||
direct = true
|
|
||||||
)
|
|
||||||
|
|
||||||
var err error = f
|
|
||||||
|
|
||||||
switch verb {
|
|
||||||
// Note that this switch must match the preference order
|
|
||||||
// for ordinary string printing (%#v before %+v, and so on).
|
|
||||||
|
|
||||||
case 'v':
|
|
||||||
if s.Flag('#') {
|
|
||||||
if stringer, ok := err.(fmt.GoStringer); ok {
|
|
||||||
io.WriteString(&p.buf, stringer.GoString())
|
|
||||||
goto exit
|
|
||||||
}
|
|
||||||
// proceed as if it were %v
|
|
||||||
} else if s.Flag('+') {
|
|
||||||
p.printDetail = true
|
|
||||||
sep = "\n - "
|
|
||||||
}
|
|
||||||
case 's':
|
|
||||||
case 'q', 'x', 'X':
|
|
||||||
// Use an intermediate buffer in the rare cases that precision,
|
|
||||||
// truncation, or one of the alternative verbs (q, x, and X) are
|
|
||||||
// specified.
|
|
||||||
direct = false
|
|
||||||
|
|
||||||
default:
|
|
||||||
p.buf.WriteString("%!")
|
|
||||||
p.buf.WriteRune(verb)
|
|
||||||
p.buf.WriteByte('(')
|
|
||||||
switch {
|
|
||||||
case err != nil:
|
|
||||||
p.buf.WriteString(reflect.TypeOf(f).String())
|
|
||||||
default:
|
|
||||||
p.buf.WriteString("<nil>")
|
|
||||||
}
|
|
||||||
p.buf.WriteByte(')')
|
|
||||||
io.Copy(s, &p.buf)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
loop:
|
|
||||||
for {
|
|
||||||
switch v := err.(type) {
|
|
||||||
case Formatter:
|
|
||||||
err = v.FormatError((*printer)(p))
|
|
||||||
case fmt.Formatter:
|
|
||||||
v.Format(p, 'v')
|
|
||||||
break loop
|
|
||||||
default:
|
|
||||||
io.WriteString(&p.buf, v.Error())
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if p.needColon || !p.printDetail {
|
|
||||||
p.buf.WriteByte(':')
|
|
||||||
p.needColon = false
|
|
||||||
}
|
|
||||||
p.buf.WriteString(sep)
|
|
||||||
p.inDetail = false
|
|
||||||
p.needNewline = false
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
width, okW := s.Width()
|
|
||||||
prec, okP := s.Precision()
|
|
||||||
|
|
||||||
if !direct || (okW && width > 0) || okP {
|
|
||||||
// Construct format string from State s.
|
|
||||||
format := []byte{'%'}
|
|
||||||
if s.Flag('-') {
|
|
||||||
format = append(format, '-')
|
|
||||||
}
|
|
||||||
if s.Flag('+') {
|
|
||||||
format = append(format, '+')
|
|
||||||
}
|
|
||||||
if s.Flag(' ') {
|
|
||||||
format = append(format, ' ')
|
|
||||||
}
|
|
||||||
if okW {
|
|
||||||
format = strconv.AppendInt(format, int64(width), 10)
|
|
||||||
}
|
|
||||||
if okP {
|
|
||||||
format = append(format, '.')
|
|
||||||
format = strconv.AppendInt(format, int64(prec), 10)
|
|
||||||
}
|
|
||||||
format = append(format, string(verb)...)
|
|
||||||
fmt.Fprintf(s, string(format), p.buf.String())
|
|
||||||
} else {
|
|
||||||
io.Copy(s, &p.buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var detailSep = []byte("\n ")
|
|
||||||
|
|
||||||
// state tracks error printing state. It implements fmt.State.
|
|
||||||
type state struct {
|
|
||||||
fmt.State
|
|
||||||
buf bytes.Buffer
|
|
||||||
|
|
||||||
printDetail bool
|
|
||||||
inDetail bool
|
|
||||||
needColon bool
|
|
||||||
needNewline bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *state) Write(b []byte) (n int, err error) {
|
|
||||||
if s.printDetail {
|
|
||||||
if len(b) == 0 {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
if s.inDetail && s.needColon {
|
|
||||||
s.needNewline = true
|
|
||||||
if b[0] == '\n' {
|
|
||||||
b = b[1:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
k := 0
|
|
||||||
for i, c := range b {
|
|
||||||
if s.needNewline {
|
|
||||||
if s.inDetail && s.needColon {
|
|
||||||
s.buf.WriteByte(':')
|
|
||||||
s.needColon = false
|
|
||||||
}
|
|
||||||
s.buf.Write(detailSep)
|
|
||||||
s.needNewline = false
|
|
||||||
}
|
|
||||||
if c == '\n' {
|
|
||||||
s.buf.Write(b[k:i])
|
|
||||||
k = i + 1
|
|
||||||
s.needNewline = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s.buf.Write(b[k:])
|
|
||||||
if !s.inDetail {
|
|
||||||
s.needColon = true
|
|
||||||
}
|
|
||||||
} else if !s.inDetail {
|
|
||||||
s.buf.Write(b)
|
|
||||||
}
|
|
||||||
return len(b), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// printer wraps a state to implement an xerrors.Printer.
|
|
||||||
type printer state
|
|
||||||
|
|
||||||
func (s *printer) Print(args ...interface{}) {
|
|
||||||
if !s.inDetail || s.printDetail {
|
|
||||||
fmt.Fprint((*state)(s), args...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *printer) Printf(format string, args ...interface{}) {
|
|
||||||
if !s.inDetail || s.printDetail {
|
|
||||||
fmt.Fprintf((*state)(s), format, args...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *printer) Detail() bool {
|
|
||||||
s.inDetail = true
|
|
||||||
return s.printDetail
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
issuerepo: golang/go
|
|
||||||
|
|
@ -1,23 +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.
|
|
||||||
|
|
||||||
// Package xerrors implements functions to manipulate errors.
|
|
||||||
//
|
|
||||||
// This package is based on the Go 2 proposal for error values:
|
|
||||||
//
|
|
||||||
// https://golang.org/design/29934-error-values
|
|
||||||
//
|
|
||||||
// These functions were incorporated into the standard library's errors package
|
|
||||||
// in Go 1.13:
|
|
||||||
// - Is
|
|
||||||
// - As
|
|
||||||
// - Unwrap
|
|
||||||
//
|
|
||||||
// Also, Errorf's %w verb was incorporated into fmt.Errorf.
|
|
||||||
//
|
|
||||||
// Use this package to get equivalent behavior in all supported Go versions.
|
|
||||||
//
|
|
||||||
// No other features of this package were included in Go 1.13, and at present
|
|
||||||
// there are no plans to include any of them.
|
|
||||||
package xerrors // import "golang.org/x/xerrors"
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
// Copyright 2011 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 xerrors
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
// errorString is a trivial implementation of error.
|
|
||||||
type errorString struct {
|
|
||||||
s string
|
|
||||||
frame Frame
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns an error that formats as the given text.
|
|
||||||
//
|
|
||||||
// The returned error contains a Frame set to the caller's location and
|
|
||||||
// implements Formatter to show this information when printed with details.
|
|
||||||
func New(text string) error {
|
|
||||||
return &errorString{text, Caller(1)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *errorString) Error() string {
|
|
||||||
return e.s
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *errorString) Format(s fmt.State, v rune) { FormatError(e, s, v) }
|
|
||||||
|
|
||||||
func (e *errorString) FormatError(p Printer) (next error) {
|
|
||||||
p.Print(e.s)
|
|
||||||
e.frame.Format(p)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
@ -1,190 +0,0 @@
|
||||||
// Copyright 2018 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 xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
"unicode"
|
|
||||||
"unicode/utf8"
|
|
||||||
|
|
||||||
"golang.org/x/xerrors/internal"
|
|
||||||
)
|
|
||||||
|
|
||||||
const percentBangString = "%!"
|
|
||||||
|
|
||||||
// Errorf formats according to a format specifier and returns the string as a
|
|
||||||
// value that satisfies error.
|
|
||||||
//
|
|
||||||
// The returned error includes the file and line number of the caller when
|
|
||||||
// formatted with additional detail enabled. If the last argument is an error
|
|
||||||
// the returned error's Format method will return it if the format string ends
|
|
||||||
// with ": %s", ": %v", or ": %w". If the last argument is an error and the
|
|
||||||
// format string ends with ": %w", the returned error implements an Unwrap
|
|
||||||
// method returning it.
|
|
||||||
//
|
|
||||||
// If the format specifier includes a %w verb with an error operand in a
|
|
||||||
// position other than at the end, the returned error will still implement an
|
|
||||||
// Unwrap method returning the operand, but the error's Format method will not
|
|
||||||
// return the wrapped error.
|
|
||||||
//
|
|
||||||
// It is invalid to include more than one %w verb or to supply it with an
|
|
||||||
// operand that does not implement the error interface. The %w verb is otherwise
|
|
||||||
// a synonym for %v.
|
|
||||||
//
|
|
||||||
// Note that as of Go 1.13, the fmt.Errorf function will do error formatting,
|
|
||||||
// but it will not capture a stack backtrace.
|
|
||||||
func Errorf(format string, a ...interface{}) error {
|
|
||||||
format = formatPlusW(format)
|
|
||||||
// Support a ": %[wsv]" suffix, which works well with xerrors.Formatter.
|
|
||||||
wrap := strings.HasSuffix(format, ": %w")
|
|
||||||
idx, format2, ok := parsePercentW(format)
|
|
||||||
percentWElsewhere := !wrap && idx >= 0
|
|
||||||
if !percentWElsewhere && (wrap || strings.HasSuffix(format, ": %s") || strings.HasSuffix(format, ": %v")) {
|
|
||||||
err := errorAt(a, len(a)-1)
|
|
||||||
if err == nil {
|
|
||||||
return &noWrapError{fmt.Sprintf(format, a...), nil, Caller(1)}
|
|
||||||
}
|
|
||||||
// TODO: this is not entirely correct. The error value could be
|
|
||||||
// printed elsewhere in format if it mixes numbered with unnumbered
|
|
||||||
// substitutions. With relatively small changes to doPrintf we can
|
|
||||||
// have it optionally ignore extra arguments and pass the argument
|
|
||||||
// list in its entirety.
|
|
||||||
msg := fmt.Sprintf(format[:len(format)-len(": %s")], a[:len(a)-1]...)
|
|
||||||
frame := Frame{}
|
|
||||||
if internal.EnableTrace {
|
|
||||||
frame = Caller(1)
|
|
||||||
}
|
|
||||||
if wrap {
|
|
||||||
return &wrapError{msg, err, frame}
|
|
||||||
}
|
|
||||||
return &noWrapError{msg, err, frame}
|
|
||||||
}
|
|
||||||
// Support %w anywhere.
|
|
||||||
// TODO: don't repeat the wrapped error's message when %w occurs in the middle.
|
|
||||||
msg := fmt.Sprintf(format2, a...)
|
|
||||||
if idx < 0 {
|
|
||||||
return &noWrapError{msg, nil, Caller(1)}
|
|
||||||
}
|
|
||||||
err := errorAt(a, idx)
|
|
||||||
if !ok || err == nil {
|
|
||||||
// Too many %ws or argument of %w is not an error. Approximate the Go
|
|
||||||
// 1.13 fmt.Errorf message.
|
|
||||||
return &noWrapError{fmt.Sprintf("%sw(%s)", percentBangString, msg), nil, Caller(1)}
|
|
||||||
}
|
|
||||||
frame := Frame{}
|
|
||||||
if internal.EnableTrace {
|
|
||||||
frame = Caller(1)
|
|
||||||
}
|
|
||||||
return &wrapError{msg, err, frame}
|
|
||||||
}
|
|
||||||
|
|
||||||
func errorAt(args []interface{}, i int) error {
|
|
||||||
if i < 0 || i >= len(args) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
err, ok := args[i].(error)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// formatPlusW is used to avoid the vet check that will barf at %w.
|
|
||||||
func formatPlusW(s string) string {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the index of the only %w in format, or -1 if none.
|
|
||||||
// Also return a rewritten format string with %w replaced by %v, and
|
|
||||||
// false if there is more than one %w.
|
|
||||||
// TODO: handle "%[N]w".
|
|
||||||
func parsePercentW(format string) (idx int, newFormat string, ok bool) {
|
|
||||||
// Loosely copied from golang.org/x/tools/go/analysis/passes/printf/printf.go.
|
|
||||||
idx = -1
|
|
||||||
ok = true
|
|
||||||
n := 0
|
|
||||||
sz := 0
|
|
||||||
var isW bool
|
|
||||||
for i := 0; i < len(format); i += sz {
|
|
||||||
if format[i] != '%' {
|
|
||||||
sz = 1
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// "%%" is not a format directive.
|
|
||||||
if i+1 < len(format) && format[i+1] == '%' {
|
|
||||||
sz = 2
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
sz, isW = parsePrintfVerb(format[i:])
|
|
||||||
if isW {
|
|
||||||
if idx >= 0 {
|
|
||||||
ok = false
|
|
||||||
} else {
|
|
||||||
idx = n
|
|
||||||
}
|
|
||||||
// "Replace" the last character, the 'w', with a 'v'.
|
|
||||||
p := i + sz - 1
|
|
||||||
format = format[:p] + "v" + format[p+1:]
|
|
||||||
}
|
|
||||||
n++
|
|
||||||
}
|
|
||||||
return idx, format, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse the printf verb starting with a % at s[0].
|
|
||||||
// Return how many bytes it occupies and whether the verb is 'w'.
|
|
||||||
func parsePrintfVerb(s string) (int, bool) {
|
|
||||||
// Assume only that the directive is a sequence of non-letters followed by a single letter.
|
|
||||||
sz := 0
|
|
||||||
var r rune
|
|
||||||
for i := 1; i < len(s); i += sz {
|
|
||||||
r, sz = utf8.DecodeRuneInString(s[i:])
|
|
||||||
if unicode.IsLetter(r) {
|
|
||||||
return i + sz, r == 'w'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return len(s), false
|
|
||||||
}
|
|
||||||
|
|
||||||
type noWrapError struct {
|
|
||||||
msg string
|
|
||||||
err error
|
|
||||||
frame Frame
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *noWrapError) Error() string {
|
|
||||||
return fmt.Sprint(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *noWrapError) Format(s fmt.State, v rune) { FormatError(e, s, v) }
|
|
||||||
|
|
||||||
func (e *noWrapError) FormatError(p Printer) (next error) {
|
|
||||||
p.Print(e.msg)
|
|
||||||
e.frame.Format(p)
|
|
||||||
return e.err
|
|
||||||
}
|
|
||||||
|
|
||||||
type wrapError struct {
|
|
||||||
msg string
|
|
||||||
err error
|
|
||||||
frame Frame
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *wrapError) Error() string {
|
|
||||||
return fmt.Sprint(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *wrapError) Format(s fmt.State, v rune) { FormatError(e, s, v) }
|
|
||||||
|
|
||||||
func (e *wrapError) FormatError(p Printer) (next error) {
|
|
||||||
p.Print(e.msg)
|
|
||||||
e.frame.Format(p)
|
|
||||||
return e.err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *wrapError) Unwrap() error {
|
|
||||||
return e.err
|
|
||||||
}
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
// Copyright 2018 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 xerrors
|
|
||||||
|
|
||||||
// A Formatter formats error messages.
|
|
||||||
type Formatter interface {
|
|
||||||
error
|
|
||||||
|
|
||||||
// FormatError prints the receiver's first error and returns the next error in
|
|
||||||
// the error chain, if any.
|
|
||||||
FormatError(p Printer) (next error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Printer formats error messages.
|
|
||||||
//
|
|
||||||
// The most common implementation of Printer is the one provided by package fmt
|
|
||||||
// during Printf (as of Go 1.13). Localization packages such as golang.org/x/text/message
|
|
||||||
// typically provide their own implementations.
|
|
||||||
type Printer interface {
|
|
||||||
// Print appends args to the message output.
|
|
||||||
Print(args ...interface{})
|
|
||||||
|
|
||||||
// Printf writes a formatted string.
|
|
||||||
Printf(format string, args ...interface{})
|
|
||||||
|
|
||||||
// Detail reports whether error detail is requested.
|
|
||||||
// After the first call to Detail, all text written to the Printer
|
|
||||||
// is formatted as additional detail, or ignored when
|
|
||||||
// detail has not been requested.
|
|
||||||
// If Detail returns false, the caller can avoid printing the detail at all.
|
|
||||||
Detail() bool
|
|
||||||
}
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
||||||
// Copyright 2018 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 xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Frame contains part of a call stack.
|
|
||||||
type Frame struct {
|
|
||||||
// Make room for three PCs: the one we were asked for, what it called,
|
|
||||||
// and possibly a PC for skipPleaseUseCallersFrames. See:
|
|
||||||
// https://go.googlesource.com/go/+/032678e0fb/src/runtime/extern.go#169
|
|
||||||
frames [3]uintptr
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caller returns a Frame that describes a frame on the caller's stack.
|
|
||||||
// The argument skip is the number of frames to skip over.
|
|
||||||
// Caller(0) returns the frame for the caller of Caller.
|
|
||||||
func Caller(skip int) Frame {
|
|
||||||
var s Frame
|
|
||||||
runtime.Callers(skip+1, s.frames[:])
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// location reports the file, line, and function of a frame.
|
|
||||||
//
|
|
||||||
// The returned function may be "" even if file and line are not.
|
|
||||||
func (f Frame) location() (function, file string, line int) {
|
|
||||||
frames := runtime.CallersFrames(f.frames[:])
|
|
||||||
if _, ok := frames.Next(); !ok {
|
|
||||||
return "", "", 0
|
|
||||||
}
|
|
||||||
fr, ok := frames.Next()
|
|
||||||
if !ok {
|
|
||||||
return "", "", 0
|
|
||||||
}
|
|
||||||
return fr.Function, fr.File, fr.Line
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format prints the stack as error detail.
|
|
||||||
// It should be called from an error's Format implementation
|
|
||||||
// after printing any other error detail.
|
|
||||||
func (f Frame) Format(p Printer) {
|
|
||||||
if p.Detail() {
|
|
||||||
function, file, line := f.location()
|
|
||||||
if function != "" {
|
|
||||||
p.Printf("%s\n ", function)
|
|
||||||
}
|
|
||||||
if file != "" {
|
|
||||||
p.Printf("%s:%d\n", file, line)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
// Copyright 2018 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 internal
|
|
||||||
|
|
||||||
// EnableTrace indicates whether stack information should be recorded in errors.
|
|
||||||
var EnableTrace = true
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
||||||
// Copyright 2018 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 xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Wrapper provides context around another error.
|
|
||||||
type Wrapper interface {
|
|
||||||
// Unwrap returns the next error in the error chain.
|
|
||||||
// If there is no next error, Unwrap returns nil.
|
|
||||||
Unwrap() error
|
|
||||||
}
|
|
||||||
|
|
||||||
// Opaque returns an error with the same error formatting as err
|
|
||||||
// but that does not match err and cannot be unwrapped.
|
|
||||||
func Opaque(err error) error {
|
|
||||||
return noWrapper{err}
|
|
||||||
}
|
|
||||||
|
|
||||||
type noWrapper struct {
|
|
||||||
error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e noWrapper) FormatError(p Printer) (next error) {
|
|
||||||
if f, ok := e.error.(Formatter); ok {
|
|
||||||
return f.FormatError(p)
|
|
||||||
}
|
|
||||||
p.Print(e.error)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unwrap returns the result of calling the Unwrap method on err, if err implements
|
|
||||||
// Unwrap. Otherwise, Unwrap returns nil.
|
|
||||||
//
|
|
||||||
// Deprecated: As of Go 1.13, use errors.Unwrap instead.
|
|
||||||
func Unwrap(err error) error {
|
|
||||||
u, ok := err.(Wrapper)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return u.Unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is reports whether any error in err's chain matches target.
|
|
||||||
//
|
|
||||||
// An error is considered to match a target if it is equal to that target or if
|
|
||||||
// it implements a method Is(error) bool such that Is(target) returns true.
|
|
||||||
//
|
|
||||||
// Deprecated: As of Go 1.13, use errors.Is instead.
|
|
||||||
func Is(err, target error) bool {
|
|
||||||
if target == nil {
|
|
||||||
return err == target
|
|
||||||
}
|
|
||||||
|
|
||||||
isComparable := reflect.TypeOf(target).Comparable()
|
|
||||||
for {
|
|
||||||
if isComparable && err == target {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
// TODO: consider supporing target.Is(err). This would allow
|
|
||||||
// user-definable predicates, but also may allow for coping with sloppy
|
|
||||||
// APIs, thereby making it easier to get away with them.
|
|
||||||
if err = Unwrap(err); err == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// As finds the first error in err's chain that matches the type to which target
|
|
||||||
// points, and if so, sets the target to its value and returns true. An error
|
|
||||||
// matches a type if it is assignable to the target type, or if it has a method
|
|
||||||
// As(interface{}) bool such that As(target) returns true. As will panic if target
|
|
||||||
// is not a non-nil pointer to a type which implements error or is of interface type.
|
|
||||||
//
|
|
||||||
// The As method should set the target to its value and return true if err
|
|
||||||
// matches the type to which target points.
|
|
||||||
//
|
|
||||||
// Deprecated: As of Go 1.13, use errors.As instead.
|
|
||||||
func As(err error, target interface{}) bool {
|
|
||||||
if target == nil {
|
|
||||||
panic("errors: target cannot be nil")
|
|
||||||
}
|
|
||||||
val := reflect.ValueOf(target)
|
|
||||||
typ := val.Type()
|
|
||||||
if typ.Kind() != reflect.Ptr || val.IsNil() {
|
|
||||||
panic("errors: target must be a non-nil pointer")
|
|
||||||
}
|
|
||||||
if e := typ.Elem(); e.Kind() != reflect.Interface && !e.Implements(errorType) {
|
|
||||||
panic("errors: *target must be interface or implement error")
|
|
||||||
}
|
|
||||||
targetType := typ.Elem()
|
|
||||||
for err != nil {
|
|
||||||
if reflect.TypeOf(err).AssignableTo(targetType) {
|
|
||||||
val.Elem().Set(reflect.ValueOf(err))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if x, ok := err.(interface{ As(interface{}) bool }); ok && x.As(target) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
err = Unwrap(err)
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var errorType = reflect.TypeOf((*error)(nil)).Elem()
|
|
||||||
|
|
@ -90,7 +90,9 @@ const apiId = "iamcredentials:v1"
|
||||||
const apiName = "iamcredentials"
|
const apiName = "iamcredentials"
|
||||||
const apiVersion = "v1"
|
const apiVersion = "v1"
|
||||||
const basePath = "https://iamcredentials.googleapis.com/"
|
const basePath = "https://iamcredentials.googleapis.com/"
|
||||||
|
const basePathTemplate = "https://iamcredentials.UNIVERSE_DOMAIN/"
|
||||||
const mtlsBasePath = "https://iamcredentials.mtls.googleapis.com/"
|
const mtlsBasePath = "https://iamcredentials.mtls.googleapis.com/"
|
||||||
|
const defaultUniverseDomain = "googleapis.com"
|
||||||
|
|
||||||
// OAuth2 scopes used by this API.
|
// OAuth2 scopes used by this API.
|
||||||
const (
|
const (
|
||||||
|
|
@ -107,7 +109,9 @@ func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, err
|
||||||
// NOTE: prepend, so we don't override user-specified scopes.
|
// NOTE: prepend, so we don't override user-specified scopes.
|
||||||
opts = append([]option.ClientOption{scopesOption}, opts...)
|
opts = append([]option.ClientOption{scopesOption}, opts...)
|
||||||
opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
|
opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
|
||||||
|
opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
|
||||||
opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
|
opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
|
||||||
|
opts = append(opts, internaloption.WithDefaultUniverseDomain(defaultUniverseDomain))
|
||||||
client, endpoint, err := htransport.NewClient(ctx, opts...)
|
client, endpoint, err := htransport.NewClient(ctx, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "0.155.0"
|
const Version = "0.157.0"
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,10 @@ func (o defaultEndpointTemplateOption) Apply(settings *internal.DialSettings) {
|
||||||
|
|
||||||
// WithDefaultEndpointTemplate provides a template for creating the endpoint
|
// WithDefaultEndpointTemplate provides a template for creating the endpoint
|
||||||
// using a universe domain. See also WithDefaultUniverseDomain and
|
// using a universe domain. See also WithDefaultUniverseDomain and
|
||||||
// option.WithUniverseDomain.
|
// option.WithUniverseDomain. The placeholder UNIVERSE_DOMAIN should be used
|
||||||
|
// instead of a concrete universe domain such as "googleapis.com".
|
||||||
|
//
|
||||||
|
// Example: WithDefaultEndpointTemplate("https://logging.UNIVERSE_DOMAIN/")
|
||||||
//
|
//
|
||||||
// It should only be used internally by generated clients.
|
// It should only be used internally by generated clients.
|
||||||
func WithDefaultEndpointTemplate(url string) option.ClientOption {
|
func WithDefaultEndpointTemplate(url string) option.ClientOption {
|
||||||
|
|
@ -163,6 +166,11 @@ func (w withDefaultUniverseDomain) Apply(o *internal.DialSettings) {
|
||||||
|
|
||||||
// EnableJwtWithScope returns a ClientOption that specifies if scope can be used
|
// EnableJwtWithScope returns a ClientOption that specifies if scope can be used
|
||||||
// with self-signed JWT.
|
// with self-signed JWT.
|
||||||
|
//
|
||||||
|
// EnableJwtWithScope is ignored when option.WithUniverseDomain is set
|
||||||
|
// to a value other than the Google Default Universe (GDU) of "googleapis.com".
|
||||||
|
// For non-GDU domains, token exchange is impossible and services must
|
||||||
|
// support self-signed JWTs with scopes.
|
||||||
func EnableJwtWithScope() option.ClientOption {
|
func EnableJwtWithScope() option.ClientOption {
|
||||||
return enableJwtWithScope(true)
|
return enableJwtWithScope(true)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
"location": "me-central2"
|
"location": "me-central2"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"etag": "\"3131373432363238303039393730353234383930\"",
|
"etag": "\"3136323232353032373039383637313835303036\"",
|
||||||
"icons": {
|
"icons": {
|
||||||
"x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
|
"x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
|
||||||
"x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
|
"x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
|
||||||
|
|
@ -99,7 +99,7 @@
|
||||||
},
|
},
|
||||||
"protocol": "rest",
|
"protocol": "rest",
|
||||||
"resources": {
|
"resources": {
|
||||||
"anywhereCache": {
|
"anywhereCaches": {
|
||||||
"methods": {
|
"methods": {
|
||||||
"disable": {
|
"disable": {
|
||||||
"description": "Disables an Anywhere Cache instance.",
|
"description": "Disables an Anywhere Cache instance.",
|
||||||
|
|
@ -117,7 +117,7 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
@ -149,7 +149,7 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
@ -176,7 +176,7 @@
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
@ -204,13 +204,13 @@
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"pageSize": {
|
"pageSize": {
|
||||||
"description": "Maximum number of items return in a single page of responses. Maximum 1000.",
|
"description": "Maximum number of items to return in a single page of responses. Maximum 1000.",
|
||||||
"format": "int32",
|
"format": "int32",
|
||||||
"location": "query",
|
"location": "query",
|
||||||
"minimum": "0",
|
"minimum": "0",
|
||||||
|
|
@ -250,7 +250,7 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
@ -282,7 +282,7 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
@ -314,7 +314,7 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"bucket": {
|
"bucket": {
|
||||||
"description": "Name of the partent bucket",
|
"description": "Name of the parent bucket.",
|
||||||
"location": "path",
|
"location": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
@ -1387,6 +1387,240 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"folders": {
|
||||||
|
"methods": {
|
||||||
|
"delete": {
|
||||||
|
"description": "Permanently deletes a folder. Only applicable to buckets with hierarchical namespace enabled.",
|
||||||
|
"httpMethod": "DELETE",
|
||||||
|
"id": "storage.folders.delete",
|
||||||
|
"parameterOrder": [
|
||||||
|
"bucket",
|
||||||
|
"folder"
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"bucket": {
|
||||||
|
"description": "Name of the bucket in which the folder resides.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"folder": {
|
||||||
|
"description": "Name of a folder.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ifMetagenerationMatch": {
|
||||||
|
"description": "If set, only deletes the folder if its metageneration matches this value.",
|
||||||
|
"format": "int64",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ifMetagenerationNotMatch": {
|
||||||
|
"description": "If set, only deletes the folder if its metageneration does not match this value.",
|
||||||
|
"format": "int64",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path": "b/{bucket}/folders/{folder}",
|
||||||
|
"scopes": [
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.full_control",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_write"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"get": {
|
||||||
|
"description": "Returns metadata for the specified folder. Only applicable to buckets with hierarchical namespace enabled.",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"id": "storage.folders.get",
|
||||||
|
"parameterOrder": [
|
||||||
|
"bucket",
|
||||||
|
"folder"
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"bucket": {
|
||||||
|
"description": "Name of the bucket in which the folder resides.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"folder": {
|
||||||
|
"description": "Name of a folder.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ifMetagenerationMatch": {
|
||||||
|
"description": "Makes the return of the folder metadata conditional on whether the folder's current metageneration matches the given value.",
|
||||||
|
"format": "int64",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ifMetagenerationNotMatch": {
|
||||||
|
"description": "Makes the return of the folder metadata conditional on whether the folder's current metageneration does not match the given value.",
|
||||||
|
"format": "int64",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path": "b/{bucket}/folders/{folder}",
|
||||||
|
"response": {
|
||||||
|
"$ref": "Folder"
|
||||||
|
},
|
||||||
|
"scopes": [
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform",
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform.read-only",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.full_control",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_only",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_write"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"insert": {
|
||||||
|
"description": "Creates a new folder. Only applicable to buckets with hierarchical namespace enabled.",
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"id": "storage.folders.insert",
|
||||||
|
"parameterOrder": [
|
||||||
|
"bucket"
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"bucket": {
|
||||||
|
"description": "Name of the bucket in which the folder resides.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"recursive": {
|
||||||
|
"description": "If true, any parent folder which doesn’t exist will be created automatically.",
|
||||||
|
"location": "query",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path": "b/{bucket}/folders",
|
||||||
|
"request": {
|
||||||
|
"$ref": "Folder"
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"$ref": "Folder"
|
||||||
|
},
|
||||||
|
"scopes": [
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.full_control",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_write"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"list": {
|
||||||
|
"description": "Retrieves a list of folders matching the criteria. Only applicable to buckets with hierarchical namespace enabled.",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"id": "storage.folders.list",
|
||||||
|
"parameterOrder": [
|
||||||
|
"bucket"
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"bucket": {
|
||||||
|
"description": "Name of the bucket in which to look for folders.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"delimiter": {
|
||||||
|
"description": "Returns results in a directory-like mode. The only supported value is '/'. If set, items will only contain folders that either exactly match the prefix, or are one level below the prefix.",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"endOffset": {
|
||||||
|
"description": "Filter results to folders whose names are lexicographically before endOffset. If startOffset is also set, the folders listed will have names between startOffset (inclusive) and endOffset (exclusive).",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"description": "Maximum number of items to return in a single page of responses.",
|
||||||
|
"format": "int32",
|
||||||
|
"location": "query",
|
||||||
|
"minimum": "0",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"pageToken": {
|
||||||
|
"description": "A previously-returned page token representing part of the larger set of results to view.",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"prefix": {
|
||||||
|
"description": "Filter results to folders whose paths begin with this prefix. If set, the value must either be an empty string or end with a '/'.",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"startOffset": {
|
||||||
|
"description": "Filter results to folders whose names are lexicographically equal to or after startOffset. If endOffset is also set, the folders listed will have names between startOffset (inclusive) and endOffset (exclusive).",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path": "b/{bucket}/folders",
|
||||||
|
"response": {
|
||||||
|
"$ref": "Folders"
|
||||||
|
},
|
||||||
|
"scopes": [
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform",
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform.read-only",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.full_control",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_only",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_write"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"rename": {
|
||||||
|
"description": "Renames a source folder to a destination folder. Only applicable to buckets with hierarchical namespace enabled.",
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"id": "storage.folders.rename",
|
||||||
|
"parameterOrder": [
|
||||||
|
"bucket",
|
||||||
|
"sourceFolder",
|
||||||
|
"destinationFolder"
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"bucket": {
|
||||||
|
"description": "Name of the bucket in which the folders are in.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"destinationFolder": {
|
||||||
|
"description": "Name of the destination folder.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ifSourceMetagenerationMatch": {
|
||||||
|
"description": "Makes the operation conditional on whether the source object's current metageneration matches the given value.",
|
||||||
|
"format": "int64",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ifSourceMetagenerationNotMatch": {
|
||||||
|
"description": "Makes the operation conditional on whether the source object's current metageneration does not match the given value.",
|
||||||
|
"format": "int64",
|
||||||
|
"location": "query",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sourceFolder": {
|
||||||
|
"description": "Name of the source folder.",
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path": "b/{bucket}/folders/{sourceFolder}/renameTo/folders/{destinationFolder}",
|
||||||
|
"response": {
|
||||||
|
"$ref": "GoogleLongrunningOperation"
|
||||||
|
},
|
||||||
|
"scopes": [
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.full_control",
|
||||||
|
"https://www.googleapis.com/auth/devstorage.read_write"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"managedFolders": {
|
"managedFolders": {
|
||||||
"methods": {
|
"methods": {
|
||||||
"delete": {
|
"delete": {
|
||||||
|
|
@ -1565,7 +1799,7 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"pageSize": {
|
"pageSize": {
|
||||||
"description": "Maximum number of items return in a single page of responses.",
|
"description": "Maximum number of items to return in a single page of responses.",
|
||||||
"format": "int32",
|
"format": "int32",
|
||||||
"location": "query",
|
"location": "query",
|
||||||
"minimum": "0",
|
"minimum": "0",
|
||||||
|
|
@ -3806,7 +4040,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"revision": "20231202",
|
"revision": "20240105",
|
||||||
"rootUrl": "https://storage.googleapis.com/",
|
"rootUrl": "https://storage.googleapis.com/",
|
||||||
"schemas": {
|
"schemas": {
|
||||||
"AnywhereCache": {
|
"AnywhereCache": {
|
||||||
|
|
@ -3860,6 +4094,10 @@
|
||||||
"description": "The modification time of the cache instance metadata in RFC 3339 format.",
|
"description": "The modification time of the cache instance metadata in RFC 3339 format.",
|
||||||
"format": "date-time",
|
"format": "date-time",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"zone": {
|
||||||
|
"description": "The zone in which the cache instance is running. For example, us-central1-a.",
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
|
|
@ -4010,6 +4248,16 @@
|
||||||
"description": "HTTP 1.1 Entity tag for the bucket.",
|
"description": "HTTP 1.1 Entity tag for the bucket.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"hierarchicalNamespace": {
|
||||||
|
"description": "The bucket's hierarchical namespace configuration.",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"description": "When set to true, hierarchical namespace is enabled for this bucket.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"iamConfiguration": {
|
"iamConfiguration": {
|
||||||
"description": "The bucket's IAM configuration.",
|
"description": "The bucket's IAM configuration.",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
@ -4597,6 +4845,90 @@
|
||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"Folder": {
|
||||||
|
"description": "A folder. Only available in buckets with hierarchical namespace enabled.",
|
||||||
|
"id": "Folder",
|
||||||
|
"properties": {
|
||||||
|
"bucket": {
|
||||||
|
"description": "The name of the bucket containing this folder.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"description": "The ID of the folder, including the bucket name, folder name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"default": "storage#folder",
|
||||||
|
"description": "The kind of item this is. For folders, this is always storage#folder.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"description": "An individual metadata entry.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "User-provided metadata, in key/value pairs.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"metageneration": {
|
||||||
|
"description": "The version of the metadata for this folder. Used for preconditions and for detecting changes in metadata.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "The name of the folder. Required if not specified by URL parameter.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pendingRenameInfo": {
|
||||||
|
"description": "Only present if the folder is part of an ongoing rename folder operation. Contains information which can be used to query the operation status.",
|
||||||
|
"properties": {
|
||||||
|
"operationId": {
|
||||||
|
"description": "The ID of the rename folder operation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"selfLink": {
|
||||||
|
"description": "The link to this folder.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"timeCreated": {
|
||||||
|
"description": "The creation time of the folder in RFC 3339 format.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updated": {
|
||||||
|
"description": "The modification time of the folder metadata in RFC 3339 format.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"Folders": {
|
||||||
|
"description": "A list of folders.",
|
||||||
|
"id": "Folders",
|
||||||
|
"properties": {
|
||||||
|
"items": {
|
||||||
|
"description": "The list of items.",
|
||||||
|
"items": {
|
||||||
|
"$ref": "Folder"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"default": "storage#folders",
|
||||||
|
"description": "The kind of item this is. For lists of folders, this is always storage#folders.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nextPageToken": {
|
||||||
|
"description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"GoogleLongrunningListOperationsResponse": {
|
"GoogleLongrunningListOperationsResponse": {
|
||||||
"description": "The response message for storage.buckets.operations.list.",
|
"description": "The response message for storage.buckets.operations.list.",
|
||||||
"id": "GoogleLongrunningListOperationsResponse",
|
"id": "GoogleLongrunningListOperationsResponse",
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
"google.golang.org/protobuf/internal/encoding/json"
|
"google.golang.org/protobuf/internal/encoding/json"
|
||||||
"google.golang.org/protobuf/internal/encoding/messageset"
|
"google.golang.org/protobuf/internal/encoding/messageset"
|
||||||
"google.golang.org/protobuf/internal/errors"
|
"google.golang.org/protobuf/internal/errors"
|
||||||
|
|
@ -23,7 +24,7 @@ import (
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Unmarshal reads the given []byte into the given proto.Message.
|
// Unmarshal reads the given []byte into the given [proto.Message].
|
||||||
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
||||||
func Unmarshal(b []byte, m proto.Message) error {
|
func Unmarshal(b []byte, m proto.Message) error {
|
||||||
return UnmarshalOptions{}.Unmarshal(b, m)
|
return UnmarshalOptions{}.Unmarshal(b, m)
|
||||||
|
|
@ -37,7 +38,7 @@ type UnmarshalOptions struct {
|
||||||
// required fields will not return an error.
|
// required fields will not return an error.
|
||||||
AllowPartial bool
|
AllowPartial bool
|
||||||
|
|
||||||
// If DiscardUnknown is set, unknown fields are ignored.
|
// If DiscardUnknown is set, unknown fields and enum name values are ignored.
|
||||||
DiscardUnknown bool
|
DiscardUnknown bool
|
||||||
|
|
||||||
// Resolver is used for looking up types when unmarshaling
|
// Resolver is used for looking up types when unmarshaling
|
||||||
|
|
@ -47,9 +48,13 @@ type UnmarshalOptions struct {
|
||||||
protoregistry.MessageTypeResolver
|
protoregistry.MessageTypeResolver
|
||||||
protoregistry.ExtensionTypeResolver
|
protoregistry.ExtensionTypeResolver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecursionLimit limits how deeply messages may be nested.
|
||||||
|
// If zero, a default limit is applied.
|
||||||
|
RecursionLimit int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unmarshal reads the given []byte and populates the given proto.Message
|
// Unmarshal reads the given []byte and populates the given [proto.Message]
|
||||||
// using options in the UnmarshalOptions object.
|
// using options in the UnmarshalOptions object.
|
||||||
// It will clear the message first before setting the fields.
|
// It will clear the message first before setting the fields.
|
||||||
// If it returns an error, the given message may be partially set.
|
// If it returns an error, the given message may be partially set.
|
||||||
|
|
@ -67,6 +72,9 @@ func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error {
|
||||||
if o.Resolver == nil {
|
if o.Resolver == nil {
|
||||||
o.Resolver = protoregistry.GlobalTypes
|
o.Resolver = protoregistry.GlobalTypes
|
||||||
}
|
}
|
||||||
|
if o.RecursionLimit == 0 {
|
||||||
|
o.RecursionLimit = protowire.DefaultRecursionLimit
|
||||||
|
}
|
||||||
|
|
||||||
dec := decoder{json.NewDecoder(b), o}
|
dec := decoder{json.NewDecoder(b), o}
|
||||||
if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil {
|
if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil {
|
||||||
|
|
@ -114,6 +122,10 @@ func (d decoder) syntaxError(pos int, f string, x ...interface{}) error {
|
||||||
|
|
||||||
// unmarshalMessage unmarshals a message into the given protoreflect.Message.
|
// unmarshalMessage unmarshals a message into the given protoreflect.Message.
|
||||||
func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) error {
|
func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) error {
|
||||||
|
d.opts.RecursionLimit--
|
||||||
|
if d.opts.RecursionLimit < 0 {
|
||||||
|
return errors.New("exceeded max recursion depth")
|
||||||
|
}
|
||||||
if unmarshal := wellKnownTypeUnmarshaler(m.Descriptor().FullName()); unmarshal != nil {
|
if unmarshal := wellKnownTypeUnmarshaler(m.Descriptor().FullName()); unmarshal != nil {
|
||||||
return unmarshal(d, m)
|
return unmarshal(d, m)
|
||||||
}
|
}
|
||||||
|
|
@ -266,7 +278,9 @@ func (d decoder) unmarshalSingular(m protoreflect.Message, fd protoreflect.Field
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if val.IsValid() {
|
||||||
m.Set(fd, val)
|
m.Set(fd, val)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -329,7 +343,7 @@ func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.
|
||||||
}
|
}
|
||||||
|
|
||||||
case protoreflect.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
if v, ok := unmarshalEnum(tok, fd); ok {
|
if v, ok := unmarshalEnum(tok, fd, d.opts.DiscardUnknown); ok {
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -474,7 +488,7 @@ func unmarshalBytes(tok json.Token) (protoreflect.Value, bool) {
|
||||||
return protoreflect.ValueOfBytes(b), true
|
return protoreflect.ValueOfBytes(b), true
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalEnum(tok json.Token, fd protoreflect.FieldDescriptor) (protoreflect.Value, bool) {
|
func unmarshalEnum(tok json.Token, fd protoreflect.FieldDescriptor, discardUnknown bool) (protoreflect.Value, bool) {
|
||||||
switch tok.Kind() {
|
switch tok.Kind() {
|
||||||
case json.String:
|
case json.String:
|
||||||
// Lookup EnumNumber based on name.
|
// Lookup EnumNumber based on name.
|
||||||
|
|
@ -482,6 +496,9 @@ func unmarshalEnum(tok json.Token, fd protoreflect.FieldDescriptor) (protoreflec
|
||||||
if enumVal := fd.Enum().Values().ByName(protoreflect.Name(s)); enumVal != nil {
|
if enumVal := fd.Enum().Values().ByName(protoreflect.Name(s)); enumVal != nil {
|
||||||
return protoreflect.ValueOfEnum(enumVal.Number()), true
|
return protoreflect.ValueOfEnum(enumVal.Number()), true
|
||||||
}
|
}
|
||||||
|
if discardUnknown {
|
||||||
|
return protoreflect.Value{}, true
|
||||||
|
}
|
||||||
|
|
||||||
case json.Number:
|
case json.Number:
|
||||||
if n, ok := tok.Int(32); ok {
|
if n, ok := tok.Int(32); ok {
|
||||||
|
|
@ -542,9 +559,11 @@ func (d decoder) unmarshalList(list protoreflect.List, fd protoreflect.FieldDesc
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if val.IsValid() {
|
||||||
list.Append(val)
|
list.Append(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
@ -609,9 +628,10 @@ Loop:
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if pval.IsValid() {
|
||||||
mmap.Set(pkey, pval)
|
mmap.Set(pkey, pval)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,6 @@
|
||||||
// format. It follows the guide at
|
// format. It follows the guide at
|
||||||
// https://protobuf.dev/programming-guides/proto3#json.
|
// https://protobuf.dev/programming-guides/proto3#json.
|
||||||
//
|
//
|
||||||
// This package produces a different output than the standard "encoding/json"
|
// This package produces a different output than the standard [encoding/json]
|
||||||
// package, which does not operate correctly on protocol buffer messages.
|
// package, which does not operate correctly on protocol buffer messages.
|
||||||
package protojson
|
package protojson
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ func Format(m proto.Message) string {
|
||||||
return MarshalOptions{Multiline: true}.Format(m)
|
return MarshalOptions{Multiline: true}.Format(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal writes the given proto.Message in JSON format using default options.
|
// Marshal writes the given [proto.Message] in JSON format using default options.
|
||||||
// Do not depend on the output being stable. It may change over time across
|
// Do not depend on the output being stable. It may change over time across
|
||||||
// different versions of the program.
|
// different versions of the program.
|
||||||
func Marshal(m proto.Message) ([]byte, error) {
|
func Marshal(m proto.Message) ([]byte, error) {
|
||||||
|
|
@ -81,6 +81,25 @@ type MarshalOptions struct {
|
||||||
// ╚═══════╧════════════════════════════╝
|
// ╚═══════╧════════════════════════════╝
|
||||||
EmitUnpopulated bool
|
EmitUnpopulated bool
|
||||||
|
|
||||||
|
// EmitDefaultValues specifies whether to emit default-valued primitive fields,
|
||||||
|
// empty lists, and empty maps. The fields affected are as follows:
|
||||||
|
// ╔═══════╤════════════════════════════════════════╗
|
||||||
|
// ║ JSON │ Protobuf field ║
|
||||||
|
// ╠═══════╪════════════════════════════════════════╣
|
||||||
|
// ║ false │ non-optional scalar boolean fields ║
|
||||||
|
// ║ 0 │ non-optional scalar numeric fields ║
|
||||||
|
// ║ "" │ non-optional scalar string/byte fields ║
|
||||||
|
// ║ [] │ empty repeated fields ║
|
||||||
|
// ║ {} │ empty map fields ║
|
||||||
|
// ╚═══════╧════════════════════════════════════════╝
|
||||||
|
//
|
||||||
|
// Behaves similarly to EmitUnpopulated, but does not emit "null"-value fields,
|
||||||
|
// i.e. presence-sensing fields that are omitted will remain omitted to preserve
|
||||||
|
// presence-sensing.
|
||||||
|
// EmitUnpopulated takes precedence over EmitDefaultValues since the former generates
|
||||||
|
// a strict superset of the latter.
|
||||||
|
EmitDefaultValues bool
|
||||||
|
|
||||||
// Resolver is used for looking up types when expanding google.protobuf.Any
|
// Resolver is used for looking up types when expanding google.protobuf.Any
|
||||||
// messages. If nil, this defaults to using protoregistry.GlobalTypes.
|
// messages. If nil, this defaults to using protoregistry.GlobalTypes.
|
||||||
Resolver interface {
|
Resolver interface {
|
||||||
|
|
@ -102,7 +121,7 @@ func (o MarshalOptions) Format(m proto.Message) string {
|
||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal marshals the given proto.Message in the JSON format using options in
|
// Marshal marshals the given [proto.Message] in the JSON format using options in
|
||||||
// MarshalOptions. Do not depend on the output being stable. It may change over
|
// MarshalOptions. Do not depend on the output being stable. It may change over
|
||||||
// time across different versions of the program.
|
// 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) {
|
||||||
|
|
@ -178,7 +197,11 @@ func (m typeURLFieldRanger) Range(f func(protoreflect.FieldDescriptor, protorefl
|
||||||
|
|
||||||
// unpopulatedFieldRanger wraps a protoreflect.Message and modifies its Range
|
// unpopulatedFieldRanger wraps a protoreflect.Message and modifies its Range
|
||||||
// method to additionally iterate over unpopulated fields.
|
// method to additionally iterate over unpopulated fields.
|
||||||
type unpopulatedFieldRanger struct{ protoreflect.Message }
|
type unpopulatedFieldRanger struct {
|
||||||
|
protoreflect.Message
|
||||||
|
|
||||||
|
skipNull bool
|
||||||
|
}
|
||||||
|
|
||||||
func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
|
func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
|
||||||
fds := m.Descriptor().Fields()
|
fds := m.Descriptor().Fields()
|
||||||
|
|
@ -192,6 +215,9 @@ func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, proto
|
||||||
isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid()
|
isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid()
|
||||||
isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil
|
isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil
|
||||||
if isProto2Scalar || isSingularMessage {
|
if isProto2Scalar || isSingularMessage {
|
||||||
|
if m.skipNull {
|
||||||
|
continue
|
||||||
|
}
|
||||||
v = protoreflect.Value{} // use invalid value to emit null
|
v = protoreflect.Value{} // use invalid value to emit null
|
||||||
}
|
}
|
||||||
if !f(fd, v) {
|
if !f(fd, v) {
|
||||||
|
|
@ -217,8 +243,11 @@ func (e encoder) marshalMessage(m protoreflect.Message, typeURL string) error {
|
||||||
defer e.EndObject()
|
defer e.EndObject()
|
||||||
|
|
||||||
var fields order.FieldRanger = m
|
var fields order.FieldRanger = m
|
||||||
if e.opts.EmitUnpopulated {
|
switch {
|
||||||
fields = unpopulatedFieldRanger{m}
|
case e.opts.EmitUnpopulated:
|
||||||
|
fields = unpopulatedFieldRanger{Message: m, skipNull: false}
|
||||||
|
case e.opts.EmitDefaultValues:
|
||||||
|
fields = unpopulatedFieldRanger{Message: m, skipNull: true}
|
||||||
}
|
}
|
||||||
if typeURL != "" {
|
if typeURL != "" {
|
||||||
fields = typeURLFieldRanger{fields, typeURL}
|
fields = typeURLFieldRanger{fields, typeURL}
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ func (d decoder) unmarshalAny(m protoreflect.Message) error {
|
||||||
// Use another decoder to parse the unread bytes for @type field. This
|
// Use another decoder to parse the unread bytes for @type field. This
|
||||||
// avoids advancing a read from current decoder because the current JSON
|
// avoids advancing a read from current decoder because the current JSON
|
||||||
// object may contain the fields of the embedded type.
|
// object may contain the fields of the embedded type.
|
||||||
dec := decoder{d.Clone(), UnmarshalOptions{}}
|
dec := decoder{d.Clone(), UnmarshalOptions{RecursionLimit: d.opts.RecursionLimit}}
|
||||||
tok, err := findTypeURL(dec)
|
tok, err := findTypeURL(dec)
|
||||||
switch err {
|
switch err {
|
||||||
case errEmptyObject:
|
case errEmptyObject:
|
||||||
|
|
@ -308,50 +308,27 @@ Loop:
|
||||||
// array) in order to advance the read to the next JSON value. It relies on
|
// array) in order to advance the read to the next JSON value. It relies on
|
||||||
// the decoder returning an error if the types are not in valid sequence.
|
// the decoder returning an error if the types are not in valid sequence.
|
||||||
func (d decoder) skipJSONValue() error {
|
func (d decoder) skipJSONValue() error {
|
||||||
tok, err := d.Read()
|
var open int
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Only need to continue reading for objects and arrays.
|
|
||||||
switch tok.Kind() {
|
|
||||||
case json.ObjectOpen:
|
|
||||||
for {
|
for {
|
||||||
tok, err := d.Read()
|
tok, err := d.Read()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
switch tok.Kind() {
|
switch tok.Kind() {
|
||||||
case json.ObjectClose:
|
case json.ObjectClose, json.ArrayClose:
|
||||||
|
open--
|
||||||
|
case json.ObjectOpen, json.ArrayOpen:
|
||||||
|
open++
|
||||||
|
if open > d.opts.RecursionLimit {
|
||||||
|
return errors.New("exceeded max recursion depth")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if open == 0 {
|
||||||
return nil
|
return nil
|
||||||
case json.Name:
|
|
||||||
// Skip object field value.
|
|
||||||
if err := d.skipJSONValue(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case json.ArrayOpen:
|
|
||||||
for {
|
|
||||||
tok, err := d.Peek()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch tok.Kind() {
|
|
||||||
case json.ArrayClose:
|
|
||||||
d.Read()
|
|
||||||
return nil
|
|
||||||
default:
|
|
||||||
// Skip array item.
|
|
||||||
if err := d.skipJSONValue(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// unmarshalAnyValue unmarshals the given custom-type message from the JSON
|
// unmarshalAnyValue unmarshals the given custom-type message from the JSON
|
||||||
// object's "value" field.
|
// object's "value" field.
|
||||||
func (d decoder) unmarshalAnyValue(unmarshal unmarshalFunc, m protoreflect.Message) error {
|
func (d decoder) unmarshalAnyValue(unmarshal unmarshalFunc, m protoreflect.Message) error {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Unmarshal reads the given []byte into the given proto.Message.
|
// Unmarshal reads the given []byte into the given [proto.Message].
|
||||||
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
||||||
func Unmarshal(b []byte, m proto.Message) error {
|
func Unmarshal(b []byte, m proto.Message) error {
|
||||||
return UnmarshalOptions{}.Unmarshal(b, m)
|
return UnmarshalOptions{}.Unmarshal(b, m)
|
||||||
|
|
@ -51,7 +51,7 @@ type UnmarshalOptions struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unmarshal reads the given []byte and populates the given proto.Message
|
// Unmarshal reads the given []byte and populates the given [proto.Message]
|
||||||
// using options in the UnmarshalOptions object.
|
// using options in the UnmarshalOptions object.
|
||||||
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
||||||
func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error {
|
func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error {
|
||||||
|
|
@ -739,7 +739,9 @@ func (d decoder) skipValue() error {
|
||||||
case text.ListClose:
|
case text.ListClose:
|
||||||
return nil
|
return nil
|
||||||
case text.MessageOpen:
|
case text.MessageOpen:
|
||||||
return d.skipMessageValue()
|
if err := d.skipMessageValue(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
// Skip items. This will not validate whether skipped values are
|
// Skip items. This will not validate whether skipped values are
|
||||||
// of the same type or not, same behavior as C++
|
// of the same type or not, same behavior as C++
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ func Format(m proto.Message) string {
|
||||||
return MarshalOptions{Multiline: true}.Format(m)
|
return MarshalOptions{Multiline: true}.Format(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal writes the given proto.Message in textproto format using default
|
// Marshal writes the given [proto.Message] in textproto format using default
|
||||||
// options. Do not depend on the output being stable. It may change over time
|
// options. Do not depend on the output being stable. It may change over time
|
||||||
// across different versions of the program.
|
// across different versions of the program.
|
||||||
func Marshal(m proto.Message) ([]byte, error) {
|
func Marshal(m proto.Message) ([]byte, error) {
|
||||||
|
|
@ -97,7 +97,7 @@ func (o MarshalOptions) Format(m proto.Message) string {
|
||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal writes the given proto.Message in textproto format using options in
|
// Marshal writes the given [proto.Message] in textproto format using options in
|
||||||
// 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) {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
// See https://protobuf.dev/programming-guides/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.
|
||||||
package protowire
|
package protowire
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
@ -87,7 +87,7 @@ func ParseError(n int) error {
|
||||||
|
|
||||||
// ConsumeField parses an entire field record (both tag and value) and returns
|
// ConsumeField parses an entire field record (both tag and value) and returns
|
||||||
// the field number, the wire type, and the total length.
|
// the field number, the wire type, and the total length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
//
|
//
|
||||||
// The total length includes the tag header and the end group marker (if the
|
// The total length includes the tag header and the end group marker (if the
|
||||||
// field is a group).
|
// field is a group).
|
||||||
|
|
@ -104,8 +104,8 @@ func ConsumeField(b []byte) (Number, Type, int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeFieldValue parses a field value and returns its length.
|
// ConsumeFieldValue parses a field value and returns its length.
|
||||||
// This assumes that the field Number and wire Type have already been parsed.
|
// This assumes that the field [Number] and wire [Type] have already been parsed.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
//
|
//
|
||||||
// When parsing a group, the length includes the end group marker and
|
// When parsing a group, the length includes the end group marker and
|
||||||
// the end group is verified to match the starting field number.
|
// the end group is verified to match the starting field number.
|
||||||
|
|
@ -164,7 +164,7 @@ func AppendTag(b []byte, num Number, typ Type) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeTag parses b as a varint-encoded tag, reporting its length.
|
// ConsumeTag parses b as a varint-encoded tag, reporting its length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeTag(b []byte) (Number, Type, int) {
|
func ConsumeTag(b []byte) (Number, Type, int) {
|
||||||
v, n := ConsumeVarint(b)
|
v, n := ConsumeVarint(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -263,7 +263,7 @@ func AppendVarint(b []byte, v uint64) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeVarint parses b as a varint-encoded uint64, reporting its length.
|
// ConsumeVarint parses b as a varint-encoded uint64, reporting its length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeVarint(b []byte) (v uint64, n int) {
|
func ConsumeVarint(b []byte) (v uint64, n int) {
|
||||||
var y uint64
|
var y uint64
|
||||||
if len(b) <= 0 {
|
if len(b) <= 0 {
|
||||||
|
|
@ -384,7 +384,7 @@ func AppendFixed32(b []byte, v uint32) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeFixed32 parses b as a little-endian uint32, reporting its length.
|
// ConsumeFixed32 parses b as a little-endian uint32, reporting its length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeFixed32(b []byte) (v uint32, n int) {
|
func ConsumeFixed32(b []byte) (v uint32, n int) {
|
||||||
if len(b) < 4 {
|
if len(b) < 4 {
|
||||||
return 0, errCodeTruncated
|
return 0, errCodeTruncated
|
||||||
|
|
@ -412,7 +412,7 @@ func AppendFixed64(b []byte, v uint64) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeFixed64 parses b as a little-endian uint64, reporting its length.
|
// ConsumeFixed64 parses b as a little-endian uint64, reporting its length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeFixed64(b []byte) (v uint64, n int) {
|
func ConsumeFixed64(b []byte) (v uint64, n int) {
|
||||||
if len(b) < 8 {
|
if len(b) < 8 {
|
||||||
return 0, errCodeTruncated
|
return 0, errCodeTruncated
|
||||||
|
|
@ -432,7 +432,7 @@ func AppendBytes(b []byte, v []byte) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeBytes parses b as a length-prefixed bytes value, reporting its length.
|
// ConsumeBytes parses b as a length-prefixed bytes value, reporting its length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeBytes(b []byte) (v []byte, n int) {
|
func ConsumeBytes(b []byte) (v []byte, n int) {
|
||||||
m, n := ConsumeVarint(b)
|
m, n := ConsumeVarint(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -456,7 +456,7 @@ func AppendString(b []byte, v string) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConsumeString parses b as a length-prefixed bytes value, reporting its length.
|
// ConsumeString parses b as a length-prefixed bytes value, reporting its length.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeString(b []byte) (v string, n int) {
|
func ConsumeString(b []byte) (v string, n int) {
|
||||||
bb, n := ConsumeBytes(b)
|
bb, n := ConsumeBytes(b)
|
||||||
return string(bb), n
|
return string(bb), n
|
||||||
|
|
@ -471,7 +471,7 @@ func AppendGroup(b []byte, num Number, v []byte) []byte {
|
||||||
// ConsumeGroup parses b as a group value until the trailing end group marker,
|
// ConsumeGroup parses b as a group value until the trailing end group marker,
|
||||||
// and verifies that the end marker matches the provided num. The value v
|
// and verifies that the end marker matches the provided num. The value v
|
||||||
// does not contain the end marker, while the length does contain the end marker.
|
// does not contain the end marker, while the length does contain the end marker.
|
||||||
// This returns a negative length upon an error (see ParseError).
|
// This returns a negative length upon an error (see [ParseError]).
|
||||||
func ConsumeGroup(num Number, b []byte) (v []byte, n int) {
|
func ConsumeGroup(num Number, b []byte) (v []byte, n int) {
|
||||||
n = ConsumeFieldValue(num, StartGroupType, b)
|
n = ConsumeFieldValue(num, StartGroupType, b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -495,8 +495,8 @@ func SizeGroup(num Number, n int) int {
|
||||||
return n + SizeTag(num)
|
return n + SizeTag(num)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeTag decodes the field Number and wire Type from its unified form.
|
// DecodeTag decodes the field [Number] and wire [Type] from its unified form.
|
||||||
// The Number is -1 if the decoded field number overflows int32.
|
// The [Number] is -1 if the decoded field number overflows int32.
|
||||||
// Other than overflow, this does not check for field number validity.
|
// Other than overflow, this does not check for field number validity.
|
||||||
func DecodeTag(x uint64) (Number, Type) {
|
func DecodeTag(x uint64) (Number, Type) {
|
||||||
// NOTE: MessageSet allows for larger field numbers than normal.
|
// NOTE: MessageSet allows for larger field numbers than normal.
|
||||||
|
|
@ -506,7 +506,7 @@ func DecodeTag(x uint64) (Number, Type) {
|
||||||
return Number(x >> 3), Type(x & 7)
|
return Number(x >> 3), Type(x & 7)
|
||||||
}
|
}
|
||||||
|
|
||||||
// EncodeTag encodes the field Number and wire Type into its unified form.
|
// EncodeTag encodes the field [Number] and wire [Type] into its unified form.
|
||||||
func EncodeTag(num Number, typ Type) uint64 {
|
func EncodeTag(num Number, typ Type) uint64 {
|
||||||
return uint64(num)<<3 | uint64(typ&7)
|
return uint64(num)<<3 | uint64(typ&7)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,13 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
||||||
case protoreflect.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")
|
rv := reflect.ValueOf(vs.Get(i))
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Path"), "Path"},
|
||||||
|
{rv.MethodByName("Package"), "Package"},
|
||||||
|
{rv.MethodByName("IsPublic"), "IsPublic"},
|
||||||
|
{rv.MethodByName("IsWeak"), "IsWeak"},
|
||||||
|
}...)
|
||||||
ss = append(ss, "{"+rs.Join()+"}")
|
ss = append(ss, "{"+rs.Join()+"}")
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, allowMulti) + end
|
return start + joinStrings(ss, allowMulti) + end
|
||||||
|
|
@ -92,34 +98,26 @@ func formatListOpt(vs list, isRoot, allowMulti bool) string {
|
||||||
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.(protoreflect.Descriptor), false, allowMulti && !isEnumValue))
|
ss = append(ss, formatDescOpt(v.(protoreflect.Descriptor), false, allowMulti && !isEnumValue, nil))
|
||||||
}
|
}
|
||||||
return start + joinStrings(ss, allowMulti && isEnumValue) + end
|
return start + joinStrings(ss, allowMulti && isEnumValue) + end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// descriptorAccessors is a list of accessors to print for each descriptor.
|
type methodAndName struct {
|
||||||
//
|
method reflect.Value
|
||||||
// Do not print all accessors since some contain redundant information,
|
name string
|
||||||
// while others are pointers that we do not want to follow since the descriptor
|
|
||||||
// is actually a cyclic graph.
|
|
||||||
//
|
|
||||||
// Using a list allows us to print the accessors in a sensible order.
|
|
||||||
var descriptorAccessors = map[reflect.Type][]string{
|
|
||||||
reflect.TypeOf((*protoreflect.FileDescriptor)(nil)).Elem(): {"Path", "Package", "Imports", "Messages", "Enums", "Extensions", "Services"},
|
|
||||||
reflect.TypeOf((*protoreflect.MessageDescriptor)(nil)).Elem(): {"IsMapEntry", "Fields", "Oneofs", "ReservedNames", "ReservedRanges", "RequiredNumbers", "ExtensionRanges", "Messages", "Enums", "Extensions"},
|
|
||||||
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((*protoreflect.OneofDescriptor)(nil)).Elem(): {"Fields"}, // not directly used; must keep in sync with formatDescOpt
|
|
||||||
reflect.TypeOf((*protoreflect.EnumDescriptor)(nil)).Elem(): {"Values", "ReservedNames", "ReservedRanges"},
|
|
||||||
reflect.TypeOf((*protoreflect.EnumValueDescriptor)(nil)).Elem(): {"Number"},
|
|
||||||
reflect.TypeOf((*protoreflect.ServiceDescriptor)(nil)).Elem(): {"Methods"},
|
|
||||||
reflect.TypeOf((*protoreflect.MethodDescriptor)(nil)).Elem(): {"Input", "Output", "IsStreamingClient", "IsStreamingServer"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func FormatDesc(s fmt.State, r rune, t protoreflect.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('#')), nil))
|
||||||
}
|
}
|
||||||
func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool) string {
|
|
||||||
|
func InternalFormatDescOptForTesting(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string {
|
||||||
|
return formatDescOpt(t, isRoot, allowMulti, record)
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string {
|
||||||
rv := reflect.ValueOf(t)
|
rv := reflect.ValueOf(t)
|
||||||
rt := rv.MethodByName("ProtoType").Type().In(0)
|
rt := rv.MethodByName("ProtoType").Type().In(0)
|
||||||
|
|
||||||
|
|
@ -129,26 +127,60 @@ func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
_, isFile := t.(protoreflect.FileDescriptor)
|
_, isFile := t.(protoreflect.FileDescriptor)
|
||||||
rs := records{allowMulti: allowMulti}
|
rs := records{
|
||||||
|
allowMulti: allowMulti,
|
||||||
|
record: record,
|
||||||
|
}
|
||||||
if t.IsPlaceholder() {
|
if t.IsPlaceholder() {
|
||||||
if isFile {
|
if isFile {
|
||||||
rs.Append(rv, "Path", "Package", "IsPlaceholder")
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Path"), "Path"},
|
||||||
|
{rv.MethodByName("Package"), "Package"},
|
||||||
|
{rv.MethodByName("IsPlaceholder"), "IsPlaceholder"},
|
||||||
|
}...)
|
||||||
} else {
|
} else {
|
||||||
rs.Append(rv, "FullName", "IsPlaceholder")
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("FullName"), "FullName"},
|
||||||
|
{rv.MethodByName("IsPlaceholder"), "IsPlaceholder"},
|
||||||
|
}...)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch {
|
switch {
|
||||||
case isFile:
|
case isFile:
|
||||||
rs.Append(rv, "Syntax")
|
rs.Append(rv, methodAndName{rv.MethodByName("Syntax"), "Syntax"})
|
||||||
case isRoot:
|
case isRoot:
|
||||||
rs.Append(rv, "Syntax", "FullName")
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Syntax"), "Syntax"},
|
||||||
|
{rv.MethodByName("FullName"), "FullName"},
|
||||||
|
}...)
|
||||||
default:
|
default:
|
||||||
rs.Append(rv, "Name")
|
rs.Append(rv, methodAndName{rv.MethodByName("Name"), "Name"})
|
||||||
}
|
}
|
||||||
switch t := t.(type) {
|
switch t := t.(type) {
|
||||||
case protoreflect.FieldDescriptor:
|
case protoreflect.FieldDescriptor:
|
||||||
for _, s := range descriptorAccessors[rt] {
|
accessors := []methodAndName{
|
||||||
switch s {
|
{rv.MethodByName("Number"), "Number"},
|
||||||
|
{rv.MethodByName("Cardinality"), "Cardinality"},
|
||||||
|
{rv.MethodByName("Kind"), "Kind"},
|
||||||
|
{rv.MethodByName("HasJSONName"), "HasJSONName"},
|
||||||
|
{rv.MethodByName("JSONName"), "JSONName"},
|
||||||
|
{rv.MethodByName("HasPresence"), "HasPresence"},
|
||||||
|
{rv.MethodByName("IsExtension"), "IsExtension"},
|
||||||
|
{rv.MethodByName("IsPacked"), "IsPacked"},
|
||||||
|
{rv.MethodByName("IsWeak"), "IsWeak"},
|
||||||
|
{rv.MethodByName("IsList"), "IsList"},
|
||||||
|
{rv.MethodByName("IsMap"), "IsMap"},
|
||||||
|
{rv.MethodByName("MapKey"), "MapKey"},
|
||||||
|
{rv.MethodByName("MapValue"), "MapValue"},
|
||||||
|
{rv.MethodByName("HasDefault"), "HasDefault"},
|
||||||
|
{rv.MethodByName("Default"), "Default"},
|
||||||
|
{rv.MethodByName("ContainingOneof"), "ContainingOneof"},
|
||||||
|
{rv.MethodByName("ContainingMessage"), "ContainingMessage"},
|
||||||
|
{rv.MethodByName("Message"), "Message"},
|
||||||
|
{rv.MethodByName("Enum"), "Enum"},
|
||||||
|
}
|
||||||
|
for _, s := range accessors {
|
||||||
|
switch s.name {
|
||||||
case "MapKey":
|
case "MapKey":
|
||||||
if k := t.MapKey(); k != nil {
|
if k := t.MapKey(); k != nil {
|
||||||
rs.recs = append(rs.recs, [2]string{"MapKey", k.Kind().String()})
|
rs.recs = append(rs.recs, [2]string{"MapKey", k.Kind().String()})
|
||||||
|
|
@ -157,20 +189,20 @@ func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool) string {
|
||||||
if v := t.MapValue(); v != nil {
|
if v := t.MapValue(); v != nil {
|
||||||
switch v.Kind() {
|
switch v.Kind() {
|
||||||
case protoreflect.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Enum().FullName())})
|
rs.AppendRecs("MapValue", [2]string{"MapValue", string(v.Enum().FullName())})
|
||||||
case protoreflect.MessageKind, protoreflect.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Message().FullName())})
|
rs.AppendRecs("MapValue", [2]string{"MapValue", string(v.Message().FullName())})
|
||||||
default:
|
default:
|
||||||
rs.recs = append(rs.recs, [2]string{"MapValue", v.Kind().String()})
|
rs.AppendRecs("MapValue", [2]string{"MapValue", v.Kind().String()})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "ContainingOneof":
|
case "ContainingOneof":
|
||||||
if od := t.ContainingOneof(); od != nil {
|
if od := t.ContainingOneof(); od != nil {
|
||||||
rs.recs = append(rs.recs, [2]string{"Oneof", string(od.Name())})
|
rs.AppendRecs("ContainingOneof", [2]string{"Oneof", string(od.Name())})
|
||||||
}
|
}
|
||||||
case "ContainingMessage":
|
case "ContainingMessage":
|
||||||
if t.IsExtension() {
|
if t.IsExtension() {
|
||||||
rs.recs = append(rs.recs, [2]string{"Extendee", string(t.ContainingMessage().FullName())})
|
rs.AppendRecs("ContainingMessage", [2]string{"Extendee", string(t.ContainingMessage().FullName())})
|
||||||
}
|
}
|
||||||
case "Message":
|
case "Message":
|
||||||
if !t.IsMap() {
|
if !t.IsMap() {
|
||||||
|
|
@ -187,13 +219,61 @@ func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool) string {
|
||||||
ss = append(ss, string(fs.Get(i).Name()))
|
ss = append(ss, string(fs.Get(i).Name()))
|
||||||
}
|
}
|
||||||
if len(ss) > 0 {
|
if len(ss) > 0 {
|
||||||
rs.recs = append(rs.recs, [2]string{"Fields", "[" + joinStrings(ss, false) + "]"})
|
rs.AppendRecs("Fields", [2]string{"Fields", "[" + joinStrings(ss, false) + "]"})
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
rs.Append(rv, descriptorAccessors[rt]...)
|
case protoreflect.FileDescriptor:
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Path"), "Path"},
|
||||||
|
{rv.MethodByName("Package"), "Package"},
|
||||||
|
{rv.MethodByName("Imports"), "Imports"},
|
||||||
|
{rv.MethodByName("Messages"), "Messages"},
|
||||||
|
{rv.MethodByName("Enums"), "Enums"},
|
||||||
|
{rv.MethodByName("Extensions"), "Extensions"},
|
||||||
|
{rv.MethodByName("Services"), "Services"},
|
||||||
|
}...)
|
||||||
|
|
||||||
|
case protoreflect.MessageDescriptor:
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("IsMapEntry"), "IsMapEntry"},
|
||||||
|
{rv.MethodByName("Fields"), "Fields"},
|
||||||
|
{rv.MethodByName("Oneofs"), "Oneofs"},
|
||||||
|
{rv.MethodByName("ReservedNames"), "ReservedNames"},
|
||||||
|
{rv.MethodByName("ReservedRanges"), "ReservedRanges"},
|
||||||
|
{rv.MethodByName("RequiredNumbers"), "RequiredNumbers"},
|
||||||
|
{rv.MethodByName("ExtensionRanges"), "ExtensionRanges"},
|
||||||
|
{rv.MethodByName("Messages"), "Messages"},
|
||||||
|
{rv.MethodByName("Enums"), "Enums"},
|
||||||
|
{rv.MethodByName("Extensions"), "Extensions"},
|
||||||
|
}...)
|
||||||
|
|
||||||
|
case protoreflect.EnumDescriptor:
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Values"), "Values"},
|
||||||
|
{rv.MethodByName("ReservedNames"), "ReservedNames"},
|
||||||
|
{rv.MethodByName("ReservedRanges"), "ReservedRanges"},
|
||||||
|
}...)
|
||||||
|
|
||||||
|
case protoreflect.EnumValueDescriptor:
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Number"), "Number"},
|
||||||
|
}...)
|
||||||
|
|
||||||
|
case protoreflect.ServiceDescriptor:
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Methods"), "Methods"},
|
||||||
|
}...)
|
||||||
|
|
||||||
|
case protoreflect.MethodDescriptor:
|
||||||
|
rs.Append(rv, []methodAndName{
|
||||||
|
{rv.MethodByName("Input"), "Input"},
|
||||||
|
{rv.MethodByName("Output"), "Output"},
|
||||||
|
{rv.MethodByName("IsStreamingClient"), "IsStreamingClient"},
|
||||||
|
{rv.MethodByName("IsStreamingServer"), "IsStreamingServer"},
|
||||||
|
}...)
|
||||||
}
|
}
|
||||||
if rv.MethodByName("GoType").IsValid() {
|
if m := rv.MethodByName("GoType"); m.IsValid() {
|
||||||
rs.Append(rv, "GoType")
|
rs.Append(rv, methodAndName{m, "GoType"})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return start + rs.Join() + end
|
return start + rs.Join() + end
|
||||||
|
|
@ -202,19 +282,34 @@ func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool) string {
|
||||||
type records struct {
|
type records struct {
|
||||||
recs [][2]string
|
recs [][2]string
|
||||||
allowMulti bool
|
allowMulti bool
|
||||||
|
|
||||||
|
// record is a function that will be called for every Append() or
|
||||||
|
// AppendRecs() call, to be used for testing with the
|
||||||
|
// InternalFormatDescOptForTesting function.
|
||||||
|
record func(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *records) Append(v reflect.Value, accessors ...string) {
|
func (rs *records) AppendRecs(fieldName string, newRecs [2]string) {
|
||||||
|
if rs.record != nil {
|
||||||
|
rs.record(fieldName)
|
||||||
|
}
|
||||||
|
rs.recs = append(rs.recs, newRecs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rs *records) Append(v reflect.Value, accessors ...methodAndName) {
|
||||||
for _, a := range accessors {
|
for _, a := range accessors {
|
||||||
|
if rs.record != nil {
|
||||||
|
rs.record(a.name)
|
||||||
|
}
|
||||||
var rv reflect.Value
|
var rv reflect.Value
|
||||||
if m := v.MethodByName(a); m.IsValid() {
|
if a.method.IsValid() {
|
||||||
rv = m.Call(nil)[0]
|
rv = a.method.Call(nil)[0]
|
||||||
}
|
}
|
||||||
if v.Kind() == reflect.Struct && !rv.IsValid() {
|
if v.Kind() == reflect.Struct && !rv.IsValid() {
|
||||||
rv = v.FieldByName(a)
|
rv = v.FieldByName(a.name)
|
||||||
}
|
}
|
||||||
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.name))
|
||||||
}
|
}
|
||||||
if _, ok := rv.Interface().(protoreflect.Value); ok {
|
if _, ok := rv.Interface().(protoreflect.Value); ok {
|
||||||
rv = rv.MethodByName("Interface").Call(nil)[0]
|
rv = rv.MethodByName("Interface").Call(nil)[0]
|
||||||
|
|
@ -261,7 +356,7 @@ func (rs *records) Append(v reflect.Value, accessors ...string) {
|
||||||
default:
|
default:
|
||||||
s = fmt.Sprint(v)
|
s = fmt.Sprint(v)
|
||||||
}
|
}
|
||||||
rs.recs = append(rs.recs, [2]string{a, s})
|
rs.recs = append(rs.recs, [2]string{a.name, s})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,26 @@ import (
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Edition is an Enum for proto2.Edition
|
||||||
|
type Edition int32
|
||||||
|
|
||||||
|
// These values align with the value of Enum in descriptor.proto which allows
|
||||||
|
// direct conversion between the proto enum and this enum.
|
||||||
|
const (
|
||||||
|
EditionUnknown Edition = 0
|
||||||
|
EditionProto2 Edition = 998
|
||||||
|
EditionProto3 Edition = 999
|
||||||
|
Edition2023 Edition = 1000
|
||||||
|
EditionUnsupported Edition = 100000
|
||||||
|
)
|
||||||
|
|
||||||
// The types in this file may have a suffix:
|
// The types in this file may have a suffix:
|
||||||
// • L0: Contains fields common to all descriptors (except File) and
|
// • L0: Contains fields common to all descriptors (except File) and
|
||||||
// must be initialized up front.
|
// must be initialized up front.
|
||||||
// • L1: Contains fields specific to a descriptor and
|
// • L1: Contains fields specific to a descriptor and
|
||||||
// must be initialized up front.
|
// must be initialized up front. If the associated proto uses Editions, the
|
||||||
|
// Editions features must always be resolved. If not explicitly set, the
|
||||||
|
// appropriate default must be resolved and set.
|
||||||
// • L2: Contains fields that are lazily initialized when constructing
|
// • L2: Contains fields that are lazily initialized when constructing
|
||||||
// from the raw file descriptor. When constructing as a literal, the L2
|
// from the raw file descriptor. When constructing as a literal, the L2
|
||||||
// fields must be initialized up front.
|
// fields must be initialized up front.
|
||||||
|
|
@ -44,6 +59,7 @@ type (
|
||||||
}
|
}
|
||||||
FileL1 struct {
|
FileL1 struct {
|
||||||
Syntax protoreflect.Syntax
|
Syntax protoreflect.Syntax
|
||||||
|
Edition Edition // Only used if Syntax == Editions
|
||||||
Path string
|
Path string
|
||||||
Package protoreflect.FullName
|
Package protoreflect.FullName
|
||||||
|
|
||||||
|
|
@ -51,12 +67,35 @@ type (
|
||||||
Messages Messages
|
Messages Messages
|
||||||
Extensions Extensions
|
Extensions Extensions
|
||||||
Services Services
|
Services Services
|
||||||
|
|
||||||
|
EditionFeatures FileEditionFeatures
|
||||||
}
|
}
|
||||||
FileL2 struct {
|
FileL2 struct {
|
||||||
Options func() protoreflect.ProtoMessage
|
Options func() protoreflect.ProtoMessage
|
||||||
Imports FileImports
|
Imports FileImports
|
||||||
Locations SourceLocations
|
Locations SourceLocations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileEditionFeatures struct {
|
||||||
|
// IsFieldPresence is true if field_presence is EXPLICIT
|
||||||
|
// https://protobuf.dev/editions/features/#field_presence
|
||||||
|
IsFieldPresence bool
|
||||||
|
// IsOpenEnum is true if enum_type is OPEN
|
||||||
|
// https://protobuf.dev/editions/features/#enum_type
|
||||||
|
IsOpenEnum bool
|
||||||
|
// IsPacked is true if repeated_field_encoding is PACKED
|
||||||
|
// https://protobuf.dev/editions/features/#repeated_field_encoding
|
||||||
|
IsPacked bool
|
||||||
|
// IsUTF8Validated is true if utf_validation is VERIFY
|
||||||
|
// https://protobuf.dev/editions/features/#utf8_validation
|
||||||
|
IsUTF8Validated bool
|
||||||
|
// IsDelimitedEncoded is true if message_encoding is DELIMITED
|
||||||
|
// https://protobuf.dev/editions/features/#message_encoding
|
||||||
|
IsDelimitedEncoded bool
|
||||||
|
// IsJSONCompliant is true if json_format is ALLOW
|
||||||
|
// https://protobuf.dev/editions/features/#json_format
|
||||||
|
IsJSONCompliant bool
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd }
|
func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd }
|
||||||
|
|
@ -210,6 +249,9 @@ type (
|
||||||
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
||||||
Enum protoreflect.EnumDescriptor
|
Enum protoreflect.EnumDescriptor
|
||||||
Message protoreflect.MessageDescriptor
|
Message protoreflect.MessageDescriptor
|
||||||
|
|
||||||
|
// Edition features.
|
||||||
|
Presence bool
|
||||||
}
|
}
|
||||||
|
|
||||||
Oneof struct {
|
Oneof struct {
|
||||||
|
|
@ -273,6 +315,9 @@ func (fd *Field) HasJSONName() bool { return fd.L1.StringNam
|
||||||
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 {
|
||||||
|
if fd.L0.ParentFile.L1.Syntax == protoreflect.Editions {
|
||||||
|
return fd.L1.Presence || 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)
|
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 {
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,12 @@ import (
|
||||||
|
|
||||||
const File_google_protobuf_descriptor_proto = "google/protobuf/descriptor.proto"
|
const File_google_protobuf_descriptor_proto = "google/protobuf/descriptor.proto"
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.Edition.
|
||||||
|
const (
|
||||||
|
Edition_enum_fullname = "google.protobuf.Edition"
|
||||||
|
Edition_enum_name = "Edition"
|
||||||
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.FileDescriptorSet.
|
// Names for google.protobuf.FileDescriptorSet.
|
||||||
const (
|
const (
|
||||||
FileDescriptorSet_message_name protoreflect.Name = "FileDescriptorSet"
|
FileDescriptorSet_message_name protoreflect.Name = "FileDescriptorSet"
|
||||||
|
|
@ -81,7 +87,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
|
FileDescriptorProto_Edition_field_number protoreflect.FieldNumber = 14
|
||||||
)
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.DescriptorProto.
|
// Names for google.protobuf.DescriptorProto.
|
||||||
|
|
@ -184,10 +190,12 @@ const (
|
||||||
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_Declaration_field_name protoreflect.Name = "declaration"
|
||||||
|
ExtensionRangeOptions_Features_field_name protoreflect.Name = "features"
|
||||||
ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification"
|
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_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration"
|
||||||
|
ExtensionRangeOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.features"
|
||||||
ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification"
|
ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -195,6 +203,7 @@ const (
|
||||||
const (
|
const (
|
||||||
ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2
|
ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2
|
||||||
|
ExtensionRangeOptions_Features_field_number protoreflect.FieldNumber = 50
|
||||||
ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3
|
ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -215,14 +224,12 @@ const (
|
||||||
ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number"
|
ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number"
|
||||||
ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name"
|
ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name"
|
||||||
ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type"
|
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_Reserved_field_name protoreflect.Name = "reserved"
|
||||||
ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated"
|
ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated"
|
||||||
|
|
||||||
ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number"
|
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_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_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_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved"
|
||||||
ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated"
|
ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated"
|
||||||
)
|
)
|
||||||
|
|
@ -232,7 +239,6 @@ const (
|
||||||
ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1
|
ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1
|
||||||
ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2
|
ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2
|
||||||
ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3
|
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_Reserved_field_number protoreflect.FieldNumber = 5
|
||||||
ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6
|
ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6
|
||||||
)
|
)
|
||||||
|
|
@ -478,6 +484,7 @@ const (
|
||||||
FileOptions_PhpNamespace_field_name protoreflect.Name = "php_namespace"
|
FileOptions_PhpNamespace_field_name protoreflect.Name = "php_namespace"
|
||||||
FileOptions_PhpMetadataNamespace_field_name protoreflect.Name = "php_metadata_namespace"
|
FileOptions_PhpMetadataNamespace_field_name protoreflect.Name = "php_metadata_namespace"
|
||||||
FileOptions_RubyPackage_field_name protoreflect.Name = "ruby_package"
|
FileOptions_RubyPackage_field_name protoreflect.Name = "ruby_package"
|
||||||
|
FileOptions_Features_field_name protoreflect.Name = "features"
|
||||||
FileOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
FileOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
FileOptions_JavaPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_package"
|
FileOptions_JavaPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_package"
|
||||||
|
|
@ -500,6 +507,7 @@ const (
|
||||||
FileOptions_PhpNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_namespace"
|
FileOptions_PhpNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_namespace"
|
||||||
FileOptions_PhpMetadataNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_metadata_namespace"
|
FileOptions_PhpMetadataNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_metadata_namespace"
|
||||||
FileOptions_RubyPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.ruby_package"
|
FileOptions_RubyPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.ruby_package"
|
||||||
|
FileOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.features"
|
||||||
FileOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.uninterpreted_option"
|
FileOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -525,6 +533,7 @@ const (
|
||||||
FileOptions_PhpNamespace_field_number protoreflect.FieldNumber = 41
|
FileOptions_PhpNamespace_field_number protoreflect.FieldNumber = 41
|
||||||
FileOptions_PhpMetadataNamespace_field_number protoreflect.FieldNumber = 44
|
FileOptions_PhpMetadataNamespace_field_number protoreflect.FieldNumber = 44
|
||||||
FileOptions_RubyPackage_field_number protoreflect.FieldNumber = 45
|
FileOptions_RubyPackage_field_number protoreflect.FieldNumber = 45
|
||||||
|
FileOptions_Features_field_number protoreflect.FieldNumber = 50
|
||||||
FileOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
FileOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -547,6 +556,7 @@ const (
|
||||||
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_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
|
MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
|
||||||
|
MessageOptions_Features_field_name protoreflect.Name = "features"
|
||||||
MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
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"
|
||||||
|
|
@ -554,6 +564,7 @@ const (
|
||||||
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_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts"
|
MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts"
|
||||||
|
MessageOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.features"
|
||||||
MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option"
|
MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -564,6 +575,7 @@ const (
|
||||||
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_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11
|
MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11
|
||||||
|
MessageOptions_Features_field_number protoreflect.FieldNumber = 12
|
||||||
MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -584,8 +596,9 @@ const (
|
||||||
FieldOptions_Weak_field_name protoreflect.Name = "weak"
|
FieldOptions_Weak_field_name protoreflect.Name = "weak"
|
||||||
FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
|
FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
|
||||||
FieldOptions_Retention_field_name protoreflect.Name = "retention"
|
FieldOptions_Retention_field_name protoreflect.Name = "retention"
|
||||||
FieldOptions_Target_field_name protoreflect.Name = "target"
|
|
||||||
FieldOptions_Targets_field_name protoreflect.Name = "targets"
|
FieldOptions_Targets_field_name protoreflect.Name = "targets"
|
||||||
|
FieldOptions_EditionDefaults_field_name protoreflect.Name = "edition_defaults"
|
||||||
|
FieldOptions_Features_field_name protoreflect.Name = "features"
|
||||||
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"
|
||||||
|
|
@ -597,8 +610,9 @@ const (
|
||||||
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_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact"
|
||||||
FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention"
|
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_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets"
|
||||||
|
FieldOptions_EditionDefaults_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.edition_defaults"
|
||||||
|
FieldOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.features"
|
||||||
FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option"
|
FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -613,8 +627,9 @@ const (
|
||||||
FieldOptions_Weak_field_number protoreflect.FieldNumber = 10
|
FieldOptions_Weak_field_number protoreflect.FieldNumber = 10
|
||||||
FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16
|
FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16
|
||||||
FieldOptions_Retention_field_number protoreflect.FieldNumber = 17
|
FieldOptions_Retention_field_number protoreflect.FieldNumber = 17
|
||||||
FieldOptions_Target_field_number protoreflect.FieldNumber = 18
|
|
||||||
FieldOptions_Targets_field_number protoreflect.FieldNumber = 19
|
FieldOptions_Targets_field_number protoreflect.FieldNumber = 19
|
||||||
|
FieldOptions_EditionDefaults_field_number protoreflect.FieldNumber = 20
|
||||||
|
FieldOptions_Features_field_number protoreflect.FieldNumber = 21
|
||||||
FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -642,6 +657,27 @@ const (
|
||||||
FieldOptions_OptionTargetType_enum_name = "OptionTargetType"
|
FieldOptions_OptionTargetType_enum_name = "OptionTargetType"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Names for google.protobuf.FieldOptions.EditionDefault.
|
||||||
|
const (
|
||||||
|
FieldOptions_EditionDefault_message_name protoreflect.Name = "EditionDefault"
|
||||||
|
FieldOptions_EditionDefault_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field names for google.protobuf.FieldOptions.EditionDefault.
|
||||||
|
const (
|
||||||
|
FieldOptions_EditionDefault_Edition_field_name protoreflect.Name = "edition"
|
||||||
|
FieldOptions_EditionDefault_Value_field_name protoreflect.Name = "value"
|
||||||
|
|
||||||
|
FieldOptions_EditionDefault_Edition_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault.edition"
|
||||||
|
FieldOptions_EditionDefault_Value_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault.value"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field numbers for google.protobuf.FieldOptions.EditionDefault.
|
||||||
|
const (
|
||||||
|
FieldOptions_EditionDefault_Edition_field_number protoreflect.FieldNumber = 3
|
||||||
|
FieldOptions_EditionDefault_Value_field_number protoreflect.FieldNumber = 2
|
||||||
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.OneofOptions.
|
// Names for google.protobuf.OneofOptions.
|
||||||
const (
|
const (
|
||||||
OneofOptions_message_name protoreflect.Name = "OneofOptions"
|
OneofOptions_message_name protoreflect.Name = "OneofOptions"
|
||||||
|
|
@ -650,13 +686,16 @@ const (
|
||||||
|
|
||||||
// Field names for google.protobuf.OneofOptions.
|
// Field names for google.protobuf.OneofOptions.
|
||||||
const (
|
const (
|
||||||
|
OneofOptions_Features_field_name protoreflect.Name = "features"
|
||||||
OneofOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
OneofOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
|
OneofOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.features"
|
||||||
OneofOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.uninterpreted_option"
|
OneofOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.OneofOptions.
|
// Field numbers for google.protobuf.OneofOptions.
|
||||||
const (
|
const (
|
||||||
|
OneofOptions_Features_field_number protoreflect.FieldNumber = 1
|
||||||
OneofOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
OneofOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -671,11 +710,13 @@ 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_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
|
EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
|
||||||
|
EnumOptions_Features_field_name protoreflect.Name = "features"
|
||||||
EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
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_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts"
|
EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts"
|
||||||
|
EnumOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.features"
|
||||||
EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option"
|
EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -684,6 +725,7 @@ 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_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6
|
EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6
|
||||||
|
EnumOptions_Features_field_number protoreflect.FieldNumber = 7
|
||||||
EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -696,15 +738,21 @@ const (
|
||||||
// Field names for google.protobuf.EnumValueOptions.
|
// Field names for google.protobuf.EnumValueOptions.
|
||||||
const (
|
const (
|
||||||
EnumValueOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
EnumValueOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
|
EnumValueOptions_Features_field_name protoreflect.Name = "features"
|
||||||
|
EnumValueOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
|
||||||
EnumValueOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
EnumValueOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
EnumValueOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.deprecated"
|
EnumValueOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.deprecated"
|
||||||
|
EnumValueOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.features"
|
||||||
|
EnumValueOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.debug_redact"
|
||||||
EnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.uninterpreted_option"
|
EnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.EnumValueOptions.
|
// Field numbers for google.protobuf.EnumValueOptions.
|
||||||
const (
|
const (
|
||||||
EnumValueOptions_Deprecated_field_number protoreflect.FieldNumber = 1
|
EnumValueOptions_Deprecated_field_number protoreflect.FieldNumber = 1
|
||||||
|
EnumValueOptions_Features_field_number protoreflect.FieldNumber = 2
|
||||||
|
EnumValueOptions_DebugRedact_field_number protoreflect.FieldNumber = 3
|
||||||
EnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
EnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -716,15 +764,18 @@ const (
|
||||||
|
|
||||||
// Field names for google.protobuf.ServiceOptions.
|
// Field names for google.protobuf.ServiceOptions.
|
||||||
const (
|
const (
|
||||||
|
ServiceOptions_Features_field_name protoreflect.Name = "features"
|
||||||
ServiceOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
ServiceOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
ServiceOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
ServiceOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
|
ServiceOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.features"
|
||||||
ServiceOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.deprecated"
|
ServiceOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.deprecated"
|
||||||
ServiceOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.uninterpreted_option"
|
ServiceOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.ServiceOptions.
|
// Field numbers for google.protobuf.ServiceOptions.
|
||||||
const (
|
const (
|
||||||
|
ServiceOptions_Features_field_number protoreflect.FieldNumber = 34
|
||||||
ServiceOptions_Deprecated_field_number protoreflect.FieldNumber = 33
|
ServiceOptions_Deprecated_field_number protoreflect.FieldNumber = 33
|
||||||
ServiceOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
ServiceOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
@ -739,10 +790,12 @@ const (
|
||||||
const (
|
const (
|
||||||
MethodOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
MethodOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
MethodOptions_IdempotencyLevel_field_name protoreflect.Name = "idempotency_level"
|
MethodOptions_IdempotencyLevel_field_name protoreflect.Name = "idempotency_level"
|
||||||
|
MethodOptions_Features_field_name protoreflect.Name = "features"
|
||||||
MethodOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
MethodOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
MethodOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.deprecated"
|
MethodOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.deprecated"
|
||||||
MethodOptions_IdempotencyLevel_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.idempotency_level"
|
MethodOptions_IdempotencyLevel_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.idempotency_level"
|
||||||
|
MethodOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.features"
|
||||||
MethodOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.uninterpreted_option"
|
MethodOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -750,6 +803,7 @@ const (
|
||||||
const (
|
const (
|
||||||
MethodOptions_Deprecated_field_number protoreflect.FieldNumber = 33
|
MethodOptions_Deprecated_field_number protoreflect.FieldNumber = 33
|
||||||
MethodOptions_IdempotencyLevel_field_number protoreflect.FieldNumber = 34
|
MethodOptions_IdempotencyLevel_field_number protoreflect.FieldNumber = 34
|
||||||
|
MethodOptions_Features_field_number protoreflect.FieldNumber = 35
|
||||||
MethodOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
MethodOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -816,6 +870,120 @@ const (
|
||||||
UninterpretedOption_NamePart_IsExtension_field_number protoreflect.FieldNumber = 2
|
UninterpretedOption_NamePart_IsExtension_field_number protoreflect.FieldNumber = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Names for google.protobuf.FeatureSet.
|
||||||
|
const (
|
||||||
|
FeatureSet_message_name protoreflect.Name = "FeatureSet"
|
||||||
|
FeatureSet_message_fullname protoreflect.FullName = "google.protobuf.FeatureSet"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field names for google.protobuf.FeatureSet.
|
||||||
|
const (
|
||||||
|
FeatureSet_FieldPresence_field_name protoreflect.Name = "field_presence"
|
||||||
|
FeatureSet_EnumType_field_name protoreflect.Name = "enum_type"
|
||||||
|
FeatureSet_RepeatedFieldEncoding_field_name protoreflect.Name = "repeated_field_encoding"
|
||||||
|
FeatureSet_Utf8Validation_field_name protoreflect.Name = "utf8_validation"
|
||||||
|
FeatureSet_MessageEncoding_field_name protoreflect.Name = "message_encoding"
|
||||||
|
FeatureSet_JsonFormat_field_name protoreflect.Name = "json_format"
|
||||||
|
|
||||||
|
FeatureSet_FieldPresence_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.field_presence"
|
||||||
|
FeatureSet_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enum_type"
|
||||||
|
FeatureSet_RepeatedFieldEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding"
|
||||||
|
FeatureSet_Utf8Validation_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation"
|
||||||
|
FeatureSet_MessageEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding"
|
||||||
|
FeatureSet_JsonFormat_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.json_format"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field numbers for google.protobuf.FeatureSet.
|
||||||
|
const (
|
||||||
|
FeatureSet_FieldPresence_field_number protoreflect.FieldNumber = 1
|
||||||
|
FeatureSet_EnumType_field_number protoreflect.FieldNumber = 2
|
||||||
|
FeatureSet_RepeatedFieldEncoding_field_number protoreflect.FieldNumber = 3
|
||||||
|
FeatureSet_Utf8Validation_field_number protoreflect.FieldNumber = 4
|
||||||
|
FeatureSet_MessageEncoding_field_number protoreflect.FieldNumber = 5
|
||||||
|
FeatureSet_JsonFormat_field_number protoreflect.FieldNumber = 6
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FeatureSet.FieldPresence.
|
||||||
|
const (
|
||||||
|
FeatureSet_FieldPresence_enum_fullname = "google.protobuf.FeatureSet.FieldPresence"
|
||||||
|
FeatureSet_FieldPresence_enum_name = "FieldPresence"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FeatureSet.EnumType.
|
||||||
|
const (
|
||||||
|
FeatureSet_EnumType_enum_fullname = "google.protobuf.FeatureSet.EnumType"
|
||||||
|
FeatureSet_EnumType_enum_name = "EnumType"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FeatureSet.RepeatedFieldEncoding.
|
||||||
|
const (
|
||||||
|
FeatureSet_RepeatedFieldEncoding_enum_fullname = "google.protobuf.FeatureSet.RepeatedFieldEncoding"
|
||||||
|
FeatureSet_RepeatedFieldEncoding_enum_name = "RepeatedFieldEncoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FeatureSet.Utf8Validation.
|
||||||
|
const (
|
||||||
|
FeatureSet_Utf8Validation_enum_fullname = "google.protobuf.FeatureSet.Utf8Validation"
|
||||||
|
FeatureSet_Utf8Validation_enum_name = "Utf8Validation"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FeatureSet.MessageEncoding.
|
||||||
|
const (
|
||||||
|
FeatureSet_MessageEncoding_enum_fullname = "google.protobuf.FeatureSet.MessageEncoding"
|
||||||
|
FeatureSet_MessageEncoding_enum_name = "MessageEncoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Full and short names for google.protobuf.FeatureSet.JsonFormat.
|
||||||
|
const (
|
||||||
|
FeatureSet_JsonFormat_enum_fullname = "google.protobuf.FeatureSet.JsonFormat"
|
||||||
|
FeatureSet_JsonFormat_enum_name = "JsonFormat"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Names for google.protobuf.FeatureSetDefaults.
|
||||||
|
const (
|
||||||
|
FeatureSetDefaults_message_name protoreflect.Name = "FeatureSetDefaults"
|
||||||
|
FeatureSetDefaults_message_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field names for google.protobuf.FeatureSetDefaults.
|
||||||
|
const (
|
||||||
|
FeatureSetDefaults_Defaults_field_name protoreflect.Name = "defaults"
|
||||||
|
FeatureSetDefaults_MinimumEdition_field_name protoreflect.Name = "minimum_edition"
|
||||||
|
FeatureSetDefaults_MaximumEdition_field_name protoreflect.Name = "maximum_edition"
|
||||||
|
|
||||||
|
FeatureSetDefaults_Defaults_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.defaults"
|
||||||
|
FeatureSetDefaults_MinimumEdition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.minimum_edition"
|
||||||
|
FeatureSetDefaults_MaximumEdition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.maximum_edition"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field numbers for google.protobuf.FeatureSetDefaults.
|
||||||
|
const (
|
||||||
|
FeatureSetDefaults_Defaults_field_number protoreflect.FieldNumber = 1
|
||||||
|
FeatureSetDefaults_MinimumEdition_field_number protoreflect.FieldNumber = 4
|
||||||
|
FeatureSetDefaults_MaximumEdition_field_number protoreflect.FieldNumber = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
// Names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.
|
||||||
|
const (
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_message_name protoreflect.Name = "FeatureSetEditionDefault"
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_message_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.
|
||||||
|
const (
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_name protoreflect.Name = "edition"
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_Features_field_name protoreflect.Name = "features"
|
||||||
|
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition"
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_Features_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.features"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Field numbers for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.
|
||||||
|
const (
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number protoreflect.FieldNumber = 3
|
||||||
|
FeatureSetDefaults_FeatureSetEditionDefault_Features_field_number protoreflect.FieldNumber = 2
|
||||||
|
)
|
||||||
|
|
||||||
// Names for google.protobuf.SourceCodeInfo.
|
// Names for google.protobuf.SourceCodeInfo.
|
||||||
const (
|
const (
|
||||||
SourceCodeInfo_message_name protoreflect.Name = "SourceCodeInfo"
|
SourceCodeInfo_message_name protoreflect.Name = "SourceCodeInfo"
|
||||||
|
|
|
||||||
|
|
@ -162,11 +162,20 @@ func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions
|
||||||
func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.BoolSlice()
|
sp := p.BoolSlice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growBoolSlice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -732,11 +741,20 @@ func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOption
|
||||||
func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Int32Slice()
|
sp := p.Int32Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growInt32Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -1138,11 +1156,20 @@ func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptio
|
||||||
func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Int32Slice()
|
sp := p.Int32Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growInt32Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -1544,11 +1571,20 @@ func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptio
|
||||||
func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Uint32Slice()
|
sp := p.Uint32Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growUint32Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -1950,11 +1986,20 @@ func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOption
|
||||||
func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Int64Slice()
|
sp := p.Int64Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growInt64Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -2356,11 +2401,20 @@ func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptio
|
||||||
func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Int64Slice()
|
sp := p.Int64Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growInt64Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -2762,11 +2816,20 @@ func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptio
|
||||||
func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Uint64Slice()
|
sp := p.Uint64Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := 0
|
||||||
|
for _, v := range b {
|
||||||
|
if v < 0x80 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
p.growUint64Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
var v uint64
|
var v uint64
|
||||||
var n int
|
var n int
|
||||||
|
|
@ -3145,11 +3208,15 @@ func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOpt
|
||||||
func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Int32Slice()
|
sp := p.Int32Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := len(b) / protowire.SizeFixed32()
|
||||||
|
if count > 0 {
|
||||||
|
p.growInt32Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
v, n := protowire.ConsumeFixed32(b)
|
v, n := protowire.ConsumeFixed32(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -3461,11 +3528,15 @@ func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOpti
|
||||||
func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Uint32Slice()
|
sp := p.Uint32Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := len(b) / protowire.SizeFixed32()
|
||||||
|
if count > 0 {
|
||||||
|
p.growUint32Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
v, n := protowire.ConsumeFixed32(b)
|
v, n := protowire.ConsumeFixed32(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -3777,11 +3848,15 @@ func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOption
|
||||||
func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Float32Slice()
|
sp := p.Float32Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := len(b) / protowire.SizeFixed32()
|
||||||
|
if count > 0 {
|
||||||
|
p.growFloat32Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
v, n := protowire.ConsumeFixed32(b)
|
v, n := protowire.ConsumeFixed32(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -4093,11 +4168,15 @@ func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOpt
|
||||||
func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Int64Slice()
|
sp := p.Int64Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := len(b) / protowire.SizeFixed64()
|
||||||
|
if count > 0 {
|
||||||
|
p.growInt64Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
v, n := protowire.ConsumeFixed64(b)
|
v, n := protowire.ConsumeFixed64(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -4409,11 +4488,15 @@ func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOpti
|
||||||
func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Uint64Slice()
|
sp := p.Uint64Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := len(b) / protowire.SizeFixed64()
|
||||||
|
if count > 0 {
|
||||||
|
p.growUint64Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
v, n := protowire.ConsumeFixed64(b)
|
v, n := protowire.ConsumeFixed64(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
@ -4725,11 +4808,15 @@ func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptio
|
||||||
func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
||||||
sp := p.Float64Slice()
|
sp := p.Float64Slice()
|
||||||
if wtyp == protowire.BytesType {
|
if wtyp == protowire.BytesType {
|
||||||
s := *sp
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
b, n := protowire.ConsumeBytes(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
return out, errDecode
|
return out, errDecode
|
||||||
}
|
}
|
||||||
|
count := len(b) / protowire.SizeFixed64()
|
||||||
|
if count > 0 {
|
||||||
|
p.growFloat64Slice(count)
|
||||||
|
}
|
||||||
|
s := *sp
|
||||||
for len(b) > 0 {
|
for len(b) > 0 {
|
||||||
v, n := protowire.ConsumeFixed64(b)
|
v, n := protowire.ConsumeFixed64(b)
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
|
|
|
||||||
|
|
@ -206,8 +206,14 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName
|
||||||
|
|
||||||
// Obtain a list of oneof wrapper types.
|
// Obtain a list of oneof wrapper types.
|
||||||
var oneofWrappers []reflect.Type
|
var oneofWrappers []reflect.Type
|
||||||
for _, method := range []string{"XXX_OneofFuncs", "XXX_OneofWrappers"} {
|
methods := make([]reflect.Method, 0, 2)
|
||||||
if fn, ok := t.MethodByName(method); ok {
|
if m, ok := t.MethodByName("XXX_OneofFuncs"); ok {
|
||||||
|
methods = append(methods, m)
|
||||||
|
}
|
||||||
|
if m, ok := t.MethodByName("XXX_OneofWrappers"); ok {
|
||||||
|
methods = append(methods, m)
|
||||||
|
}
|
||||||
|
for _, fn := range methods {
|
||||||
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
||||||
if vs, ok := v.Interface().([]interface{}); ok {
|
if vs, ok := v.Interface().([]interface{}); ok {
|
||||||
for _, v := range vs {
|
for _, v := range vs {
|
||||||
|
|
@ -216,7 +222,6 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Obtain a list of the extension ranges.
|
// Obtain a list of the extension ranges.
|
||||||
if fn, ok := t.MethodByName("ExtensionRangeArray"); ok {
|
if fn, ok := t.MethodByName("ExtensionRangeArray"); ok {
|
||||||
|
|
|
||||||
|
|
@ -192,15 +192,20 @@ fieldLoop:
|
||||||
|
|
||||||
// Derive a mapping of oneof wrappers to fields.
|
// Derive a mapping of oneof wrappers to fields.
|
||||||
oneofWrappers := mi.OneofWrappers
|
oneofWrappers := mi.OneofWrappers
|
||||||
for _, method := range []string{"XXX_OneofFuncs", "XXX_OneofWrappers"} {
|
methods := make([]reflect.Method, 0, 2)
|
||||||
if fn, ok := reflect.PtrTo(t).MethodByName(method); ok {
|
if m, ok := reflect.PtrTo(t).MethodByName("XXX_OneofFuncs"); ok {
|
||||||
|
methods = append(methods, m)
|
||||||
|
}
|
||||||
|
if m, ok := reflect.PtrTo(t).MethodByName("XXX_OneofWrappers"); ok {
|
||||||
|
methods = append(methods, m)
|
||||||
|
}
|
||||||
|
for _, fn := range methods {
|
||||||
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
||||||
if vs, ok := v.Interface().([]interface{}); ok {
|
if vs, ok := v.Interface().([]interface{}); ok {
|
||||||
oneofWrappers = vs
|
oneofWrappers = vs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for _, v := range oneofWrappers {
|
for _, v := range oneofWrappers {
|
||||||
tf := reflect.TypeOf(v).Elem()
|
tf := reflect.TypeOf(v).Elem()
|
||||||
f := tf.Field(0)
|
f := tf.Field(0)
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,42 @@ func (p pointer) SetPointer(v pointer) {
|
||||||
p.v.Elem().Set(v.v)
|
p.v.Elem().Set(v.v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func growSlice(p pointer, addCap int) {
|
||||||
|
// TODO: Once we only support Go 1.20 and newer, use reflect.Grow.
|
||||||
|
in := p.v.Elem()
|
||||||
|
out := reflect.MakeSlice(in.Type(), in.Len(), in.Len()+addCap)
|
||||||
|
reflect.Copy(out, in)
|
||||||
|
p.v.Elem().Set(out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growBoolSlice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growInt32Slice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growUint32Slice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growInt64Slice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growUint64Slice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growFloat64Slice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growFloat32Slice(addCap int) {
|
||||||
|
growSlice(p, addCap)
|
||||||
|
}
|
||||||
|
|
||||||
func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") }
|
func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") }
|
||||||
func (ms *messageState) pointer() pointer { panic("not supported") }
|
func (ms *messageState) pointer() pointer { panic("not supported") }
|
||||||
func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") }
|
func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") }
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,46 @@ func (p pointer) SetPointer(v pointer) {
|
||||||
*(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p)
|
*(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p pointer) growBoolSlice(addCap int) {
|
||||||
|
sp := p.BoolSlice()
|
||||||
|
s := make([]bool, 0, addCap+len(*sp))
|
||||||
|
s = s[:len(*sp)]
|
||||||
|
copy(s, *sp)
|
||||||
|
*sp = s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growInt32Slice(addCap int) {
|
||||||
|
sp := p.Int32Slice()
|
||||||
|
s := make([]int32, 0, addCap+len(*sp))
|
||||||
|
s = s[:len(*sp)]
|
||||||
|
copy(s, *sp)
|
||||||
|
*sp = s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growUint32Slice(addCap int) {
|
||||||
|
p.growInt32Slice(addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growFloat32Slice(addCap int) {
|
||||||
|
p.growInt32Slice(addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growInt64Slice(addCap int) {
|
||||||
|
sp := p.Int64Slice()
|
||||||
|
s := make([]int64, 0, addCap+len(*sp))
|
||||||
|
s = s[:len(*sp)]
|
||||||
|
copy(s, *sp)
|
||||||
|
*sp = s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growUint64Slice(addCap int) {
|
||||||
|
p.growInt64Slice(addCap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p pointer) growFloat64Slice(addCap int) {
|
||||||
|
p.growInt64Slice(addCap)
|
||||||
|
}
|
||||||
|
|
||||||
// Static check that MessageState does not exceed the size of a pointer.
|
// Static check that MessageState does not exceed the size of a pointer.
|
||||||
const _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{}))
|
const _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{}))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine
|
//go:build !purego && !appengine && !go1.21
|
||||||
// +build !purego,!appengine
|
// +build !purego,!appengine,!go1.21
|
||||||
|
|
||||||
package strs
|
package strs
|
||||||
|
|
||||||
74
vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
generated
vendored
Normal file
74
vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
generated
vendored
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
// Copyright 2018 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 !purego && !appengine && go1.21
|
||||||
|
// +build !purego,!appengine,go1.21
|
||||||
|
|
||||||
|
package strs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UnsafeString returns an unsafe string reference of b.
|
||||||
|
// The caller must treat the input slice as immutable.
|
||||||
|
//
|
||||||
|
// WARNING: Use carefully. The returned result must not leak to the end user
|
||||||
|
// unless the input slice is provably immutable.
|
||||||
|
func UnsafeString(b []byte) string {
|
||||||
|
return unsafe.String(unsafe.SliceData(b), len(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnsafeBytes returns an unsafe bytes slice reference of s.
|
||||||
|
// The caller must treat returned slice as immutable.
|
||||||
|
//
|
||||||
|
// WARNING: Use carefully. The returned result must not leak to the end user.
|
||||||
|
func UnsafeBytes(s string) []byte {
|
||||||
|
return unsafe.Slice(unsafe.StringData(s), len(s))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Builder builds a set of strings with shared lifetime.
|
||||||
|
// This differs from strings.Builder, which is for building a single string.
|
||||||
|
type Builder struct {
|
||||||
|
buf []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// AppendFullName is equivalent to protoreflect.FullName.Append,
|
||||||
|
// but optimized for large batches where each name has a shared lifetime.
|
||||||
|
func (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName {
|
||||||
|
n := len(prefix) + len(".") + len(name)
|
||||||
|
if len(prefix) == 0 {
|
||||||
|
n -= len(".")
|
||||||
|
}
|
||||||
|
sb.grow(n)
|
||||||
|
sb.buf = append(sb.buf, prefix...)
|
||||||
|
sb.buf = append(sb.buf, '.')
|
||||||
|
sb.buf = append(sb.buf, name...)
|
||||||
|
return protoreflect.FullName(sb.last(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MakeString is equivalent to string(b), but optimized for large batches
|
||||||
|
// with a shared lifetime.
|
||||||
|
func (sb *Builder) MakeString(b []byte) string {
|
||||||
|
sb.grow(len(b))
|
||||||
|
sb.buf = append(sb.buf, b...)
|
||||||
|
return sb.last(len(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sb *Builder) grow(n int) {
|
||||||
|
if cap(sb.buf)-len(sb.buf) >= n {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unlike strings.Builder, we do not need to copy over the contents
|
||||||
|
// of the old buffer since our builder provides no API for
|
||||||
|
// retrieving previously created strings.
|
||||||
|
sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sb *Builder) last(n int) string {
|
||||||
|
return UnsafeString(sb.buf[len(sb.buf)-n:])
|
||||||
|
}
|
||||||
|
|
@ -51,7 +51,7 @@ import (
|
||||||
// 10. Send out the CL for review and submit it.
|
// 10. Send out the CL for review and submit it.
|
||||||
const (
|
const (
|
||||||
Major = 1
|
Major = 1
|
||||||
Minor = 31
|
Minor = 32
|
||||||
Patch = 0
|
Patch = 0
|
||||||
PreRelease = ""
|
PreRelease = ""
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error {
|
||||||
// UnmarshalState parses a wire-format message and places the result in m.
|
// UnmarshalState parses a wire-format message and places the result in m.
|
||||||
//
|
//
|
||||||
// This method permits fine-grained control over the unmarshaler.
|
// This method permits fine-grained control over the unmarshaler.
|
||||||
// Most users should use Unmarshal instead.
|
// Most users should use [Unmarshal] instead.
|
||||||
func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
|
func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
|
||||||
if o.RecursionLimit == 0 {
|
if o.RecursionLimit == 0 {
|
||||||
o.RecursionLimit = protowire.DefaultRecursionLimit
|
o.RecursionLimit = protowire.DefaultRecursionLimit
|
||||||
|
|
|
||||||
|
|
@ -18,27 +18,27 @@
|
||||||
// This package contains functions to convert to and from the wire format,
|
// This package contains functions to convert to and from the wire format,
|
||||||
// an efficient binary serialization of protocol buffers.
|
// an efficient binary serialization of protocol buffers.
|
||||||
//
|
//
|
||||||
// • Size reports the size of a message in the wire format.
|
// - [Size] reports the size of a message in the wire format.
|
||||||
//
|
//
|
||||||
// • Marshal converts a message to the wire format.
|
// - [Marshal] converts a message to the wire format.
|
||||||
// The MarshalOptions type provides more control over wire marshaling.
|
// The [MarshalOptions] type provides more control over wire marshaling.
|
||||||
//
|
//
|
||||||
// • Unmarshal converts a message from the wire format.
|
// - [Unmarshal] converts a message from the wire format.
|
||||||
// The UnmarshalOptions type provides more control over wire unmarshaling.
|
// The [UnmarshalOptions] type provides more control over wire unmarshaling.
|
||||||
//
|
//
|
||||||
// # Basic message operations
|
// # Basic message operations
|
||||||
//
|
//
|
||||||
// • Clone makes a deep copy of a message.
|
// - [Clone] makes a deep copy of a message.
|
||||||
//
|
//
|
||||||
// • Merge merges the content of a message into another.
|
// - [Merge] merges the content of a message into another.
|
||||||
//
|
//
|
||||||
// • Equal compares two messages. For more control over comparisons
|
// - [Equal] compares two messages. For more control over comparisons
|
||||||
// and detailed reporting of differences, see package
|
// and detailed reporting of differences, see package
|
||||||
// "google.golang.org/protobuf/testing/protocmp".
|
// [google.golang.org/protobuf/testing/protocmp].
|
||||||
//
|
//
|
||||||
// • Reset clears the content of a message.
|
// - [Reset] clears the content of a message.
|
||||||
//
|
//
|
||||||
// • CheckInitialized reports whether all required fields in a message are set.
|
// - [CheckInitialized] reports whether all required fields in a message are set.
|
||||||
//
|
//
|
||||||
// # Optional scalar constructors
|
// # Optional scalar constructors
|
||||||
//
|
//
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
// as pointers to a value. For example, an optional string field has the
|
// as pointers to a value. For example, an optional string field has the
|
||||||
// Go type *string.
|
// Go type *string.
|
||||||
//
|
//
|
||||||
// • Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, and String
|
// - [Bool], [Int32], [Int64], [Uint32], [Uint64], [Float32], [Float64], and [String]
|
||||||
// take a value and return a pointer to a new instance of it,
|
// take a value and return a pointer to a new instance of it,
|
||||||
// to simplify construction of optional field values.
|
// to simplify construction of optional field values.
|
||||||
//
|
//
|
||||||
|
|
@ -57,27 +57,27 @@
|
||||||
//
|
//
|
||||||
// # Extension accessors
|
// # Extension accessors
|
||||||
//
|
//
|
||||||
// • HasExtension, GetExtension, SetExtension, and ClearExtension
|
// - [HasExtension], [GetExtension], [SetExtension], and [ClearExtension]
|
||||||
// access extension field values in a protocol buffer message.
|
// access extension field values in a protocol buffer message.
|
||||||
//
|
//
|
||||||
// Extension fields are only supported in proto2.
|
// Extension fields are only supported in proto2.
|
||||||
//
|
//
|
||||||
// # Related packages
|
// # Related packages
|
||||||
//
|
//
|
||||||
// • Package "google.golang.org/protobuf/encoding/protojson" converts messages to
|
// - Package [google.golang.org/protobuf/encoding/protojson] converts messages to
|
||||||
// and from JSON.
|
// and from JSON.
|
||||||
//
|
//
|
||||||
// • Package "google.golang.org/protobuf/encoding/prototext" converts messages to
|
// - Package [google.golang.org/protobuf/encoding/prototext] converts messages to
|
||||||
// and from the text format.
|
// and from the text format.
|
||||||
//
|
//
|
||||||
// • Package "google.golang.org/protobuf/reflect/protoreflect" provides a
|
// - Package [google.golang.org/protobuf/reflect/protoreflect] provides a
|
||||||
// reflection interface for protocol buffer data types.
|
// reflection interface for protocol buffer data types.
|
||||||
//
|
//
|
||||||
// • Package "google.golang.org/protobuf/testing/protocmp" provides features
|
// - Package [google.golang.org/protobuf/testing/protocmp] provides features
|
||||||
// to compare protocol buffer messages with the "github.com/google/go-cmp/cmp"
|
// to compare protocol buffer messages with the [github.com/google/go-cmp/cmp]
|
||||||
// package.
|
// package.
|
||||||
//
|
//
|
||||||
// • Package "google.golang.org/protobuf/types/dynamicpb" provides a dynamic
|
// - Package [google.golang.org/protobuf/types/dynamicpb] provides a dynamic
|
||||||
// message type, suitable for working with messages where the protocol buffer
|
// message type, suitable for working with messages where the protocol buffer
|
||||||
// type is only known at runtime.
|
// type is only known at runtime.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ func (o MarshalOptions) MarshalAppend(b []byte, m Message) ([]byte, error) {
|
||||||
// MarshalState returns the wire-format encoding of a message.
|
// MarshalState returns the wire-format encoding of a message.
|
||||||
//
|
//
|
||||||
// This method permits fine-grained control over the marshaler.
|
// This method permits fine-grained control over the marshaler.
|
||||||
// Most users should use Marshal instead.
|
// Most users should use [Marshal] instead.
|
||||||
func (o MarshalOptions) MarshalState(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
|
func (o MarshalOptions) MarshalState(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
|
||||||
return o.marshal(in.Buf, in.Message)
|
return o.marshal(in.Buf, in.Message)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ func HasExtension(m Message, xt protoreflect.ExtensionType) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClearExtension clears an extension field such that subsequent
|
// ClearExtension clears an extension field such that subsequent
|
||||||
// HasExtension calls return false.
|
// [HasExtension] calls return false.
|
||||||
// It panics if m is invalid or if xt does not extend m.
|
// It panics if m is invalid or if xt does not extend m.
|
||||||
func ClearExtension(m Message, xt protoreflect.ExtensionType) {
|
func ClearExtension(m Message, xt protoreflect.ExtensionType) {
|
||||||
m.ProtoReflect().Clear(xt.TypeDescriptor())
|
m.ProtoReflect().Clear(xt.TypeDescriptor())
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import (
|
||||||
// The unknown fields of src are appended to the unknown fields of dst.
|
// The unknown fields of src are appended to the unknown fields of dst.
|
||||||
//
|
//
|
||||||
// It is semantically equivalent to unmarshaling the encoded form of src
|
// It is semantically equivalent to unmarshaling the encoded form of src
|
||||||
// into dst with the UnmarshalOptions.Merge option specified.
|
// into dst with the [UnmarshalOptions.Merge] option specified.
|
||||||
func Merge(dst, src Message) {
|
func Merge(dst, src Message) {
|
||||||
// TODO: Should nil src be treated as semantically equivalent to a
|
// TODO: Should nil src be treated as semantically equivalent to a
|
||||||
// untyped, read-only, empty message? What about a nil dst?
|
// untyped, read-only, empty message? What about a nil dst?
|
||||||
|
|
|
||||||
|
|
@ -15,18 +15,20 @@ import (
|
||||||
// protobuf module that accept a Message, except where otherwise specified.
|
// protobuf module that accept a Message, except where otherwise specified.
|
||||||
//
|
//
|
||||||
// This is the v2 interface definition for protobuf messages.
|
// This is the v2 interface definition for protobuf messages.
|
||||||
// The v1 interface definition is "github.com/golang/protobuf/proto".Message.
|
// The v1 interface definition is [github.com/golang/protobuf/proto.Message].
|
||||||
//
|
//
|
||||||
// To convert a v1 message to a v2 message,
|
// - To convert a v1 message to a v2 message,
|
||||||
// use "github.com/golang/protobuf/proto".MessageV2.
|
// use [google.golang.org/protobuf/protoadapt.MessageV2Of].
|
||||||
// To convert a v2 message to a v1 message,
|
// - To convert a v2 message to a v1 message,
|
||||||
// use "github.com/golang/protobuf/proto".MessageV1.
|
// use [google.golang.org/protobuf/protoadapt.MessageV1Of].
|
||||||
type Message = protoreflect.ProtoMessage
|
type Message = protoreflect.ProtoMessage
|
||||||
|
|
||||||
// Error matches all errors produced by packages in the protobuf module.
|
// Error matches all errors produced by packages in the protobuf module
|
||||||
|
// according to [errors.Is].
|
||||||
//
|
//
|
||||||
// That is, errors.Is(err, Error) reports whether an error is produced
|
// Example usage:
|
||||||
// by this module.
|
//
|
||||||
|
// if errors.Is(err, proto.Error) { ... }
|
||||||
var Error error
|
var Error error
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// Package protodesc provides functionality for converting
|
// Package protodesc provides functionality for converting
|
||||||
// FileDescriptorProto messages to/from protoreflect.FileDescriptor values.
|
// FileDescriptorProto messages to/from [protoreflect.FileDescriptor] values.
|
||||||
//
|
//
|
||||||
// The google.protobuf.FileDescriptorProto is a protobuf message that describes
|
// The google.protobuf.FileDescriptorProto is a protobuf message that describes
|
||||||
// the type information for a .proto file in a form that is easily serializable.
|
// the type information for a .proto file in a form that is easily serializable.
|
||||||
// The protoreflect.FileDescriptor is a more structured representation of
|
// The [protoreflect.FileDescriptor] is a more structured representation of
|
||||||
// the FileDescriptorProto message where references and remote dependencies
|
// the FileDescriptorProto message where references and remote dependencies
|
||||||
// can be directly followed.
|
// can be directly followed.
|
||||||
package protodesc
|
package protodesc
|
||||||
|
|
@ -24,11 +24,11 @@ import (
|
||||||
"google.golang.org/protobuf/types/descriptorpb"
|
"google.golang.org/protobuf/types/descriptorpb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Resolver is the resolver used by NewFile to resolve dependencies.
|
// Resolver is the resolver used by [NewFile] to resolve dependencies.
|
||||||
// The enums and messages provided must belong to some parent file,
|
// The enums and messages provided must belong to some parent file,
|
||||||
// which is also registered.
|
// which is also registered.
|
||||||
//
|
//
|
||||||
// It is implemented by protoregistry.Files.
|
// It is implemented by [protoregistry.Files].
|
||||||
type Resolver interface {
|
type Resolver interface {
|
||||||
FindFileByPath(string) (protoreflect.FileDescriptor, error)
|
FindFileByPath(string) (protoreflect.FileDescriptor, error)
|
||||||
FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
|
FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
|
||||||
|
|
@ -61,19 +61,19 @@ type FileOptions struct {
|
||||||
AllowUnresolvable bool
|
AllowUnresolvable bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFile creates a new protoreflect.FileDescriptor from the provided
|
// NewFile creates a new [protoreflect.FileDescriptor] from the provided
|
||||||
// file descriptor message. See FileOptions.New for more information.
|
// file descriptor message. See [FileOptions.New] for more information.
|
||||||
func NewFile(fd *descriptorpb.FileDescriptorProto, r Resolver) (protoreflect.FileDescriptor, error) {
|
func NewFile(fd *descriptorpb.FileDescriptorProto, r Resolver) (protoreflect.FileDescriptor, error) {
|
||||||
return FileOptions{}.New(fd, r)
|
return FileOptions{}.New(fd, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFiles creates a new protoregistry.Files from the provided
|
// NewFiles creates a new [protoregistry.Files] from the provided
|
||||||
// FileDescriptorSet message. See FileOptions.NewFiles for more information.
|
// FileDescriptorSet message. See [FileOptions.NewFiles] for more information.
|
||||||
func NewFiles(fd *descriptorpb.FileDescriptorSet) (*protoregistry.Files, error) {
|
func NewFiles(fd *descriptorpb.FileDescriptorSet) (*protoregistry.Files, error) {
|
||||||
return FileOptions{}.NewFiles(fd)
|
return FileOptions{}.NewFiles(fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new protoreflect.FileDescriptor from the provided
|
// New creates a new [protoreflect.FileDescriptor] from the provided
|
||||||
// file descriptor message. The file must represent a valid proto file according
|
// file descriptor message. The file must represent a valid proto file according
|
||||||
// to protobuf semantics. The returned descriptor is a deep copy of the input.
|
// to protobuf semantics. The returned descriptor is a deep copy of the input.
|
||||||
//
|
//
|
||||||
|
|
@ -93,9 +93,15 @@ func (o FileOptions) New(fd *descriptorpb.FileDescriptorProto, r Resolver) (prot
|
||||||
f.L1.Syntax = protoreflect.Proto2
|
f.L1.Syntax = protoreflect.Proto2
|
||||||
case "proto3":
|
case "proto3":
|
||||||
f.L1.Syntax = protoreflect.Proto3
|
f.L1.Syntax = protoreflect.Proto3
|
||||||
|
case "editions":
|
||||||
|
f.L1.Syntax = protoreflect.Editions
|
||||||
|
f.L1.Edition = fromEditionProto(fd.GetEdition())
|
||||||
default:
|
default:
|
||||||
return nil, errors.New("invalid syntax: %q", fd.GetSyntax())
|
return nil, errors.New("invalid syntax: %q", fd.GetSyntax())
|
||||||
}
|
}
|
||||||
|
if f.L1.Syntax == protoreflect.Editions && (fd.GetEdition() < SupportedEditionsMinimum || fd.GetEdition() > SupportedEditionsMaximum) {
|
||||||
|
return nil, errors.New("use of edition %v not yet supported by the Go Protobuf runtime", fd.GetEdition())
|
||||||
|
}
|
||||||
f.L1.Path = fd.GetName()
|
f.L1.Path = fd.GetName()
|
||||||
if f.L1.Path == "" {
|
if f.L1.Path == "" {
|
||||||
return nil, errors.New("file path must be populated")
|
return nil, errors.New("file path must be populated")
|
||||||
|
|
@ -108,6 +114,9 @@ func (o FileOptions) New(fd *descriptorpb.FileDescriptorProto, r Resolver) (prot
|
||||||
opts = proto.Clone(opts).(*descriptorpb.FileOptions)
|
opts = proto.Clone(opts).(*descriptorpb.FileOptions)
|
||||||
f.L2.Options = func() protoreflect.ProtoMessage { return opts }
|
f.L2.Options = func() protoreflect.ProtoMessage { return opts }
|
||||||
}
|
}
|
||||||
|
if f.L1.Syntax == protoreflect.Editions {
|
||||||
|
initFileDescFromFeatureSet(f, fd.GetOptions().GetFeatures())
|
||||||
|
}
|
||||||
|
|
||||||
f.L2.Imports = make(filedesc.FileImports, len(fd.GetDependency()))
|
f.L2.Imports = make(filedesc.FileImports, len(fd.GetDependency()))
|
||||||
for _, i := range fd.GetPublicDependency() {
|
for _, i := range fd.GetPublicDependency() {
|
||||||
|
|
@ -231,7 +240,7 @@ func (is importSet) importPublic(imps protoreflect.FileImports) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFiles creates a new protoregistry.Files from the provided
|
// NewFiles creates a new [protoregistry.Files] from the provided
|
||||||
// FileDescriptorSet message. The descriptor set must include only
|
// FileDescriptorSet message. The descriptor set must include only
|
||||||
// valid files according to protobuf semantics. The returned descriptors
|
// valid files according to protobuf semantics. The returned descriptors
|
||||||
// are a deep copy of the input.
|
// are a deep copy of the input.
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,30 @@ func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDesc
|
||||||
if fd.JsonName != nil {
|
if fd.JsonName != nil {
|
||||||
f.L1.StringName.InitJSON(fd.GetJsonName())
|
f.L1.StringName.InitJSON(fd.GetJsonName())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if f.Base.L0.ParentFile.Syntax() == protoreflect.Editions {
|
||||||
|
f.L1.Presence = resolveFeatureHasFieldPresence(f.Base.L0.ParentFile, fd)
|
||||||
|
// We reuse the existing field because the old option `[packed =
|
||||||
|
// true]` is mutually exclusive with the editions feature.
|
||||||
|
if fd.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED {
|
||||||
|
f.L1.HasPacked = true
|
||||||
|
f.L1.IsPacked = resolveFeatureRepeatedFieldEncodingPacked(f.Base.L0.ParentFile, fd)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We pretend this option is always explicitly set because the only
|
||||||
|
// use of HasEnforceUTF8 is to determine whether to use EnforceUTF8
|
||||||
|
// or to return the appropriate default.
|
||||||
|
// When using editions we either parse the option or resolve the
|
||||||
|
// appropriate default here (instead of later when this option is
|
||||||
|
// requested from the descriptor).
|
||||||
|
// In proto2/proto3 syntax HasEnforceUTF8 might be false.
|
||||||
|
f.L1.HasEnforceUTF8 = true
|
||||||
|
f.L1.EnforceUTF8 = resolveFeatureEnforceUTF8(f.Base.L0.ParentFile, fd)
|
||||||
|
|
||||||
|
if f.L1.Kind == protoreflect.MessageKind && resolveFeatureDelimitedEncoding(f.Base.L0.ParentFile, fd) {
|
||||||
|
f.L1.Kind = protoreflect.GroupKind
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fs, nil
|
return fs, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,177 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
package protodesc
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/internal/filedesc"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/types/descriptorpb"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
SupportedEditionsMinimum = descriptorpb.Edition_EDITION_PROTO2
|
||||||
|
SupportedEditionsMaximum = descriptorpb.Edition_EDITION_2023
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed editions_defaults.binpb
|
||||||
|
var binaryEditionDefaults []byte
|
||||||
|
var defaults = &descriptorpb.FeatureSetDefaults{}
|
||||||
|
var defaultsCacheMu sync.Mutex
|
||||||
|
var defaultsCache = make(map[filedesc.Edition]*descriptorpb.FeatureSet)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
err := proto.Unmarshal(binaryEditionDefaults, defaults)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "unmarshal editions defaults: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromEditionProto(epb descriptorpb.Edition) filedesc.Edition {
|
||||||
|
return filedesc.Edition(epb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func toEditionProto(ed filedesc.Edition) descriptorpb.Edition {
|
||||||
|
switch ed {
|
||||||
|
case filedesc.EditionUnknown:
|
||||||
|
return descriptorpb.Edition_EDITION_UNKNOWN
|
||||||
|
case filedesc.EditionProto2:
|
||||||
|
return descriptorpb.Edition_EDITION_PROTO2
|
||||||
|
case filedesc.EditionProto3:
|
||||||
|
return descriptorpb.Edition_EDITION_PROTO3
|
||||||
|
case filedesc.Edition2023:
|
||||||
|
return descriptorpb.Edition_EDITION_2023
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("unknown value for edition: %v", ed))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFeatureSetFor(ed filedesc.Edition) *descriptorpb.FeatureSet {
|
||||||
|
defaultsCacheMu.Lock()
|
||||||
|
defer defaultsCacheMu.Unlock()
|
||||||
|
if def, ok := defaultsCache[ed]; ok {
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
edpb := toEditionProto(ed)
|
||||||
|
if defaults.GetMinimumEdition() > edpb || defaults.GetMaximumEdition() < edpb {
|
||||||
|
// This should never happen protodesc.(FileOptions).New would fail when
|
||||||
|
// initializing the file descriptor.
|
||||||
|
// This most likely means the embedded defaults were not updated.
|
||||||
|
fmt.Fprintf(os.Stderr, "internal error: unsupported edition %v (did you forget to update the embedded defaults (i.e. the bootstrap descriptor proto)?)\n", edpb)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fs := defaults.GetDefaults()[0].GetFeatures()
|
||||||
|
// Using a linear search for now.
|
||||||
|
// Editions are guaranteed to be sorted and thus we could use a binary search.
|
||||||
|
// Given that there are only a handful of editions (with one more per year)
|
||||||
|
// there is not much reason to use a binary search.
|
||||||
|
for _, def := range defaults.GetDefaults() {
|
||||||
|
if def.GetEdition() <= edpb {
|
||||||
|
fs = def.GetFeatures()
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defaultsCache[ed] = fs
|
||||||
|
return fs
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveFeatureHasFieldPresence(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool {
|
||||||
|
fs := fieldDesc.GetOptions().GetFeatures()
|
||||||
|
if fs == nil || fs.FieldPresence == nil {
|
||||||
|
return fileDesc.L1.EditionFeatures.IsFieldPresence
|
||||||
|
}
|
||||||
|
return fs.GetFieldPresence() == descriptorpb.FeatureSet_LEGACY_REQUIRED ||
|
||||||
|
fs.GetFieldPresence() == descriptorpb.FeatureSet_EXPLICIT
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveFeatureRepeatedFieldEncodingPacked(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool {
|
||||||
|
fs := fieldDesc.GetOptions().GetFeatures()
|
||||||
|
if fs == nil || fs.RepeatedFieldEncoding == nil {
|
||||||
|
return fileDesc.L1.EditionFeatures.IsPacked
|
||||||
|
}
|
||||||
|
return fs.GetRepeatedFieldEncoding() == descriptorpb.FeatureSet_PACKED
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveFeatureEnforceUTF8(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool {
|
||||||
|
fs := fieldDesc.GetOptions().GetFeatures()
|
||||||
|
if fs == nil || fs.Utf8Validation == nil {
|
||||||
|
return fileDesc.L1.EditionFeatures.IsUTF8Validated
|
||||||
|
}
|
||||||
|
return fs.GetUtf8Validation() == descriptorpb.FeatureSet_VERIFY
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveFeatureDelimitedEncoding(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool {
|
||||||
|
fs := fieldDesc.GetOptions().GetFeatures()
|
||||||
|
if fs == nil || fs.MessageEncoding == nil {
|
||||||
|
return fileDesc.L1.EditionFeatures.IsDelimitedEncoded
|
||||||
|
}
|
||||||
|
return fs.GetMessageEncoding() == descriptorpb.FeatureSet_DELIMITED
|
||||||
|
}
|
||||||
|
|
||||||
|
// initFileDescFromFeatureSet initializes editions related fields in fd based
|
||||||
|
// on fs. If fs is nil it is assumed to be an empty featureset and all fields
|
||||||
|
// will be initialized with the appropriate default. fd.L1.Edition must be set
|
||||||
|
// before calling this function.
|
||||||
|
func initFileDescFromFeatureSet(fd *filedesc.File, fs *descriptorpb.FeatureSet) {
|
||||||
|
dfs := getFeatureSetFor(fd.L1.Edition)
|
||||||
|
if fs == nil {
|
||||||
|
fs = &descriptorpb.FeatureSet{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var fieldPresence descriptorpb.FeatureSet_FieldPresence
|
||||||
|
if fp := fs.FieldPresence; fp != nil {
|
||||||
|
fieldPresence = *fp
|
||||||
|
} else {
|
||||||
|
fieldPresence = *dfs.FieldPresence
|
||||||
|
}
|
||||||
|
fd.L1.EditionFeatures.IsFieldPresence = fieldPresence == descriptorpb.FeatureSet_LEGACY_REQUIRED ||
|
||||||
|
fieldPresence == descriptorpb.FeatureSet_EXPLICIT
|
||||||
|
|
||||||
|
var enumType descriptorpb.FeatureSet_EnumType
|
||||||
|
if et := fs.EnumType; et != nil {
|
||||||
|
enumType = *et
|
||||||
|
} else {
|
||||||
|
enumType = *dfs.EnumType
|
||||||
|
}
|
||||||
|
fd.L1.EditionFeatures.IsOpenEnum = enumType == descriptorpb.FeatureSet_OPEN
|
||||||
|
|
||||||
|
var respeatedFieldEncoding descriptorpb.FeatureSet_RepeatedFieldEncoding
|
||||||
|
if rfe := fs.RepeatedFieldEncoding; rfe != nil {
|
||||||
|
respeatedFieldEncoding = *rfe
|
||||||
|
} else {
|
||||||
|
respeatedFieldEncoding = *dfs.RepeatedFieldEncoding
|
||||||
|
}
|
||||||
|
fd.L1.EditionFeatures.IsPacked = respeatedFieldEncoding == descriptorpb.FeatureSet_PACKED
|
||||||
|
|
||||||
|
var isUTF8Validated descriptorpb.FeatureSet_Utf8Validation
|
||||||
|
if utf8val := fs.Utf8Validation; utf8val != nil {
|
||||||
|
isUTF8Validated = *utf8val
|
||||||
|
} else {
|
||||||
|
isUTF8Validated = *dfs.Utf8Validation
|
||||||
|
}
|
||||||
|
fd.L1.EditionFeatures.IsUTF8Validated = isUTF8Validated == descriptorpb.FeatureSet_VERIFY
|
||||||
|
|
||||||
|
var messageEncoding descriptorpb.FeatureSet_MessageEncoding
|
||||||
|
if me := fs.MessageEncoding; me != nil {
|
||||||
|
messageEncoding = *me
|
||||||
|
} else {
|
||||||
|
messageEncoding = *dfs.MessageEncoding
|
||||||
|
}
|
||||||
|
fd.L1.EditionFeatures.IsDelimitedEncoded = messageEncoding == descriptorpb.FeatureSet_DELIMITED
|
||||||
|
|
||||||
|
var jsonFormat descriptorpb.FeatureSet_JsonFormat
|
||||||
|
if jf := fs.JsonFormat; jf != nil {
|
||||||
|
jsonFormat = *jf
|
||||||
|
} else {
|
||||||
|
jsonFormat = *dfs.JsonFormat
|
||||||
|
}
|
||||||
|
fd.L1.EditionFeatures.IsJSONCompliant = jsonFormat == descriptorpb.FeatureSet_ALLOW
|
||||||
|
}
|
||||||
4
vendor/google.golang.org/protobuf/reflect/protodesc/editions_defaults.binpb
generated
vendored
Normal file
4
vendor/google.golang.org/protobuf/reflect/protodesc/editions_defaults.binpb
generated
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
(0ж
|
||||||
|
(0з
|
||||||
|
(0и ж(и
|
||||||
|
|
@ -16,7 +16,7 @@ import (
|
||||||
"google.golang.org/protobuf/types/descriptorpb"
|
"google.golang.org/protobuf/types/descriptorpb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ToFileDescriptorProto copies a protoreflect.FileDescriptor into a
|
// ToFileDescriptorProto copies a [protoreflect.FileDescriptor] into a
|
||||||
// google.protobuf.FileDescriptorProto message.
|
// google.protobuf.FileDescriptorProto message.
|
||||||
func ToFileDescriptorProto(file protoreflect.FileDescriptor) *descriptorpb.FileDescriptorProto {
|
func ToFileDescriptorProto(file protoreflect.FileDescriptor) *descriptorpb.FileDescriptorProto {
|
||||||
p := &descriptorpb.FileDescriptorProto{
|
p := &descriptorpb.FileDescriptorProto{
|
||||||
|
|
@ -70,13 +70,13 @@ func ToFileDescriptorProto(file protoreflect.FileDescriptor) *descriptorpb.FileD
|
||||||
for i, exts := 0, file.Extensions(); i < exts.Len(); i++ {
|
for i, exts := 0, file.Extensions(); i < exts.Len(); i++ {
|
||||||
p.Extension = append(p.Extension, ToFieldDescriptorProto(exts.Get(i)))
|
p.Extension = append(p.Extension, ToFieldDescriptorProto(exts.Get(i)))
|
||||||
}
|
}
|
||||||
if syntax := file.Syntax(); syntax != protoreflect.Proto2 {
|
if syntax := file.Syntax(); syntax != protoreflect.Proto2 && syntax.IsValid() {
|
||||||
p.Syntax = proto.String(file.Syntax().String())
|
p.Syntax = proto.String(file.Syntax().String())
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToDescriptorProto copies a protoreflect.MessageDescriptor into a
|
// ToDescriptorProto copies a [protoreflect.MessageDescriptor] into a
|
||||||
// google.protobuf.DescriptorProto message.
|
// google.protobuf.DescriptorProto message.
|
||||||
func ToDescriptorProto(message protoreflect.MessageDescriptor) *descriptorpb.DescriptorProto {
|
func ToDescriptorProto(message protoreflect.MessageDescriptor) *descriptorpb.DescriptorProto {
|
||||||
p := &descriptorpb.DescriptorProto{
|
p := &descriptorpb.DescriptorProto{
|
||||||
|
|
@ -119,7 +119,7 @@ func ToDescriptorProto(message protoreflect.MessageDescriptor) *descriptorpb.Des
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToFieldDescriptorProto copies a protoreflect.FieldDescriptor into a
|
// ToFieldDescriptorProto copies a [protoreflect.FieldDescriptor] into a
|
||||||
// google.protobuf.FieldDescriptorProto message.
|
// google.protobuf.FieldDescriptorProto message.
|
||||||
func ToFieldDescriptorProto(field protoreflect.FieldDescriptor) *descriptorpb.FieldDescriptorProto {
|
func ToFieldDescriptorProto(field protoreflect.FieldDescriptor) *descriptorpb.FieldDescriptorProto {
|
||||||
p := &descriptorpb.FieldDescriptorProto{
|
p := &descriptorpb.FieldDescriptorProto{
|
||||||
|
|
@ -168,7 +168,7 @@ func ToFieldDescriptorProto(field protoreflect.FieldDescriptor) *descriptorpb.Fi
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToOneofDescriptorProto copies a protoreflect.OneofDescriptor into a
|
// ToOneofDescriptorProto copies a [protoreflect.OneofDescriptor] into a
|
||||||
// google.protobuf.OneofDescriptorProto message.
|
// google.protobuf.OneofDescriptorProto message.
|
||||||
func ToOneofDescriptorProto(oneof protoreflect.OneofDescriptor) *descriptorpb.OneofDescriptorProto {
|
func ToOneofDescriptorProto(oneof protoreflect.OneofDescriptor) *descriptorpb.OneofDescriptorProto {
|
||||||
return &descriptorpb.OneofDescriptorProto{
|
return &descriptorpb.OneofDescriptorProto{
|
||||||
|
|
@ -177,7 +177,7 @@ func ToOneofDescriptorProto(oneof protoreflect.OneofDescriptor) *descriptorpb.On
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToEnumDescriptorProto copies a protoreflect.EnumDescriptor into a
|
// ToEnumDescriptorProto copies a [protoreflect.EnumDescriptor] into a
|
||||||
// google.protobuf.EnumDescriptorProto message.
|
// google.protobuf.EnumDescriptorProto message.
|
||||||
func ToEnumDescriptorProto(enum protoreflect.EnumDescriptor) *descriptorpb.EnumDescriptorProto {
|
func ToEnumDescriptorProto(enum protoreflect.EnumDescriptor) *descriptorpb.EnumDescriptorProto {
|
||||||
p := &descriptorpb.EnumDescriptorProto{
|
p := &descriptorpb.EnumDescriptorProto{
|
||||||
|
|
@ -200,7 +200,7 @@ func ToEnumDescriptorProto(enum protoreflect.EnumDescriptor) *descriptorpb.EnumD
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToEnumValueDescriptorProto copies a protoreflect.EnumValueDescriptor into a
|
// ToEnumValueDescriptorProto copies a [protoreflect.EnumValueDescriptor] into a
|
||||||
// google.protobuf.EnumValueDescriptorProto message.
|
// google.protobuf.EnumValueDescriptorProto message.
|
||||||
func ToEnumValueDescriptorProto(value protoreflect.EnumValueDescriptor) *descriptorpb.EnumValueDescriptorProto {
|
func ToEnumValueDescriptorProto(value protoreflect.EnumValueDescriptor) *descriptorpb.EnumValueDescriptorProto {
|
||||||
return &descriptorpb.EnumValueDescriptorProto{
|
return &descriptorpb.EnumValueDescriptorProto{
|
||||||
|
|
@ -210,7 +210,7 @@ func ToEnumValueDescriptorProto(value protoreflect.EnumValueDescriptor) *descrip
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToServiceDescriptorProto copies a protoreflect.ServiceDescriptor into a
|
// ToServiceDescriptorProto copies a [protoreflect.ServiceDescriptor] into a
|
||||||
// google.protobuf.ServiceDescriptorProto message.
|
// google.protobuf.ServiceDescriptorProto message.
|
||||||
func ToServiceDescriptorProto(service protoreflect.ServiceDescriptor) *descriptorpb.ServiceDescriptorProto {
|
func ToServiceDescriptorProto(service protoreflect.ServiceDescriptor) *descriptorpb.ServiceDescriptorProto {
|
||||||
p := &descriptorpb.ServiceDescriptorProto{
|
p := &descriptorpb.ServiceDescriptorProto{
|
||||||
|
|
@ -223,7 +223,7 @@ func ToServiceDescriptorProto(service protoreflect.ServiceDescriptor) *descripto
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToMethodDescriptorProto copies a protoreflect.MethodDescriptor into a
|
// ToMethodDescriptorProto copies a [protoreflect.MethodDescriptor] into a
|
||||||
// google.protobuf.MethodDescriptorProto message.
|
// google.protobuf.MethodDescriptorProto message.
|
||||||
func ToMethodDescriptorProto(method protoreflect.MethodDescriptor) *descriptorpb.MethodDescriptorProto {
|
func ToMethodDescriptorProto(method protoreflect.MethodDescriptor) *descriptorpb.MethodDescriptorProto {
|
||||||
p := &descriptorpb.MethodDescriptorProto{
|
p := &descriptorpb.MethodDescriptorProto{
|
||||||
|
|
|
||||||
|
|
@ -10,46 +10,46 @@
|
||||||
//
|
//
|
||||||
// # Protocol Buffer Descriptors
|
// # Protocol Buffer Descriptors
|
||||||
//
|
//
|
||||||
// Protobuf descriptors (e.g., EnumDescriptor or MessageDescriptor)
|
// Protobuf descriptors (e.g., [EnumDescriptor] or [MessageDescriptor])
|
||||||
// are immutable objects that represent protobuf type information.
|
// are immutable objects that represent protobuf type information.
|
||||||
// They are wrappers around the messages declared in descriptor.proto.
|
// They are wrappers around the messages declared in descriptor.proto.
|
||||||
// Protobuf descriptors alone lack any information regarding Go types.
|
// Protobuf descriptors alone lack any information regarding Go types.
|
||||||
//
|
//
|
||||||
// Enums and messages generated by this module implement Enum and ProtoMessage,
|
// Enums and messages generated by this module implement [Enum] and [ProtoMessage],
|
||||||
// where the Descriptor and ProtoReflect.Descriptor accessors respectively
|
// where the Descriptor and ProtoReflect.Descriptor accessors respectively
|
||||||
// return the protobuf descriptor for the values.
|
// return the protobuf descriptor for the values.
|
||||||
//
|
//
|
||||||
// The protobuf descriptor interfaces are not meant to be implemented by
|
// The protobuf descriptor interfaces are not meant to be implemented by
|
||||||
// user code since they might need to be extended in the future to support
|
// user code since they might need to be extended in the future to support
|
||||||
// additions to the protobuf language.
|
// additions to the protobuf language.
|
||||||
// The "google.golang.org/protobuf/reflect/protodesc" package converts between
|
// The [google.golang.org/protobuf/reflect/protodesc] package converts between
|
||||||
// google.protobuf.DescriptorProto messages and protobuf descriptors.
|
// google.protobuf.DescriptorProto messages and protobuf descriptors.
|
||||||
//
|
//
|
||||||
// # Go Type Descriptors
|
// # Go Type Descriptors
|
||||||
//
|
//
|
||||||
// A type descriptor (e.g., EnumType or MessageType) is a constructor for
|
// A type descriptor (e.g., [EnumType] or [MessageType]) is a constructor for
|
||||||
// a concrete Go type that represents the associated protobuf descriptor.
|
// a concrete Go type that represents the associated protobuf descriptor.
|
||||||
// There is commonly a one-to-one relationship between protobuf descriptors and
|
// There is commonly a one-to-one relationship between protobuf descriptors and
|
||||||
// Go type descriptors, but it can potentially be a one-to-many relationship.
|
// Go type descriptors, but it can potentially be a one-to-many relationship.
|
||||||
//
|
//
|
||||||
// Enums and messages generated by this module implement Enum and ProtoMessage,
|
// Enums and messages generated by this module implement [Enum] and [ProtoMessage],
|
||||||
// where the Type and ProtoReflect.Type accessors respectively
|
// where the Type and ProtoReflect.Type accessors respectively
|
||||||
// return the protobuf descriptor for the values.
|
// return the protobuf descriptor for the values.
|
||||||
//
|
//
|
||||||
// The "google.golang.org/protobuf/types/dynamicpb" package can be used to
|
// The [google.golang.org/protobuf/types/dynamicpb] package can be used to
|
||||||
// create Go type descriptors from protobuf descriptors.
|
// create Go type descriptors from protobuf descriptors.
|
||||||
//
|
//
|
||||||
// # Value Interfaces
|
// # Value Interfaces
|
||||||
//
|
//
|
||||||
// The Enum and Message interfaces provide a reflective view over an
|
// The [Enum] and [Message] interfaces provide a reflective view over an
|
||||||
// enum or message instance. For enums, it provides the ability to retrieve
|
// enum or message instance. For enums, it provides the ability to retrieve
|
||||||
// the enum value number for any concrete enum type. For messages, it provides
|
// the enum value number for any concrete enum type. For messages, it provides
|
||||||
// the ability to access or manipulate fields of the message.
|
// the ability to access or manipulate fields of the message.
|
||||||
//
|
//
|
||||||
// To convert a proto.Message to a protoreflect.Message, use the
|
// To convert a [google.golang.org/protobuf/proto.Message] to a [protoreflect.Message], use the
|
||||||
// former's ProtoReflect method. Since the ProtoReflect method is new to the
|
// former's ProtoReflect method. Since the ProtoReflect method is new to the
|
||||||
// v2 message interface, it may not be present on older message implementations.
|
// v2 message interface, it may not be present on older message implementations.
|
||||||
// The "github.com/golang/protobuf/proto".MessageReflect function can be used
|
// The [github.com/golang/protobuf/proto.MessageReflect] function can be used
|
||||||
// to obtain a reflective view on older messages.
|
// to obtain a reflective view on older messages.
|
||||||
//
|
//
|
||||||
// # Relationships
|
// # Relationships
|
||||||
|
|
@ -71,12 +71,12 @@
|
||||||
// │ │
|
// │ │
|
||||||
// └────────────────── Type() ───────┘
|
// └────────────────── Type() ───────┘
|
||||||
//
|
//
|
||||||
// • An EnumType describes a concrete Go enum type.
|
// • An [EnumType] describes a concrete Go enum type.
|
||||||
// It has an EnumDescriptor and can construct an Enum instance.
|
// It has an EnumDescriptor and can construct an Enum instance.
|
||||||
//
|
//
|
||||||
// • An EnumDescriptor describes an abstract protobuf enum type.
|
// • An [EnumDescriptor] describes an abstract protobuf enum type.
|
||||||
//
|
//
|
||||||
// • An Enum is a concrete enum instance. Generated enums implement Enum.
|
// • An [Enum] is a concrete enum instance. Generated enums implement Enum.
|
||||||
//
|
//
|
||||||
// ┌──────────────── New() ─────────────────┐
|
// ┌──────────────── New() ─────────────────┐
|
||||||
// │ │
|
// │ │
|
||||||
|
|
@ -90,24 +90,26 @@
|
||||||
// │ │
|
// │ │
|
||||||
// └─────────────────── Type() ─────────┘
|
// └─────────────────── Type() ─────────┘
|
||||||
//
|
//
|
||||||
// • A MessageType describes a concrete Go message type.
|
// • A [MessageType] describes a concrete Go message type.
|
||||||
// It has a MessageDescriptor and can construct a Message instance.
|
// It has a [MessageDescriptor] and can construct a [Message] instance.
|
||||||
// Just as how Go's reflect.Type is a reflective description of a Go type,
|
// Just as how Go's [reflect.Type] is a reflective description of a Go type,
|
||||||
// a MessageType is a reflective description of a Go type for a protobuf message.
|
// a [MessageType] is a reflective description of a Go type for a protobuf message.
|
||||||
//
|
//
|
||||||
// • A MessageDescriptor describes an abstract protobuf message type.
|
// • A [MessageDescriptor] describes an abstract protobuf message type.
|
||||||
// It has no understanding of Go types. In order to construct a MessageType
|
// It has no understanding of Go types. In order to construct a [MessageType]
|
||||||
// from just a MessageDescriptor, you can consider looking up the message type
|
// from just a [MessageDescriptor], you can consider looking up the message type
|
||||||
// in the global registry using protoregistry.GlobalTypes.FindMessageByName
|
// in the global registry using the FindMessageByName method on
|
||||||
// or constructing a dynamic MessageType using dynamicpb.NewMessageType.
|
// [google.golang.org/protobuf/reflect/protoregistry.GlobalTypes]
|
||||||
|
// or constructing a dynamic [MessageType] using
|
||||||
|
// [google.golang.org/protobuf/types/dynamicpb.NewMessageType].
|
||||||
//
|
//
|
||||||
// • A Message is a reflective view over a concrete message instance.
|
// • A [Message] is a reflective view over a concrete message instance.
|
||||||
// Generated messages implement ProtoMessage, which can convert to a Message.
|
// Generated messages implement [ProtoMessage], which can convert to a [Message].
|
||||||
// Just as how Go's reflect.Value is a reflective view over a Go value,
|
// Just as how Go's [reflect.Value] is a reflective view over a Go value,
|
||||||
// a Message is a reflective view over a concrete protobuf message instance.
|
// a [Message] is a reflective view over a concrete protobuf message instance.
|
||||||
// Using Go reflection as an analogy, the ProtoReflect method is similar to
|
// Using Go reflection as an analogy, the [ProtoMessage.ProtoReflect] method is similar to
|
||||||
// calling reflect.ValueOf, and the Message.Interface method is similar to
|
// calling [reflect.ValueOf], and the [Message.Interface] method is similar to
|
||||||
// calling reflect.Value.Interface.
|
// calling [reflect.Value.Interface].
|
||||||
//
|
//
|
||||||
// ┌── TypeDescriptor() ──┐ ┌───── Descriptor() ─────┐
|
// ┌── TypeDescriptor() ──┐ ┌───── Descriptor() ─────┐
|
||||||
// │ V │ V
|
// │ V │ V
|
||||||
|
|
@ -119,15 +121,15 @@
|
||||||
// │ │
|
// │ │
|
||||||
// └────── implements ────────┘
|
// └────── implements ────────┘
|
||||||
//
|
//
|
||||||
// • An ExtensionType describes a concrete Go implementation of an extension.
|
// • An [ExtensionType] describes a concrete Go implementation of an extension.
|
||||||
// It has an ExtensionTypeDescriptor and can convert to/from
|
// It has an [ExtensionTypeDescriptor] and can convert to/from
|
||||||
// abstract Values and Go values.
|
// an abstract [Value] and a Go value.
|
||||||
//
|
//
|
||||||
// • An ExtensionTypeDescriptor is an ExtensionDescriptor
|
// • An [ExtensionTypeDescriptor] is an [ExtensionDescriptor]
|
||||||
// which also has an ExtensionType.
|
// which also has an [ExtensionType].
|
||||||
//
|
//
|
||||||
// • An ExtensionDescriptor describes an abstract protobuf extension field and
|
// • An [ExtensionDescriptor] describes an abstract protobuf extension field and
|
||||||
// may not always be an ExtensionTypeDescriptor.
|
// may not always be an [ExtensionTypeDescriptor].
|
||||||
package protoreflect
|
package protoreflect
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
@ -142,7 +144,7 @@ type doNotImplement pragma.DoNotImplement
|
||||||
|
|
||||||
// ProtoMessage is the top-level interface that all proto messages implement.
|
// ProtoMessage is the top-level interface that all proto messages implement.
|
||||||
// This is declared in the protoreflect package to avoid a cyclic dependency;
|
// This is declared in the protoreflect package to avoid a cyclic dependency;
|
||||||
// use the proto.Message type instead, which aliases this type.
|
// use the [google.golang.org/protobuf/proto.Message] type instead, which aliases this type.
|
||||||
type ProtoMessage interface{ ProtoReflect() Message }
|
type ProtoMessage interface{ ProtoReflect() Message }
|
||||||
|
|
||||||
// Syntax is the language version of the proto file.
|
// Syntax is the language version of the proto file.
|
||||||
|
|
@ -153,6 +155,7 @@ type syntax int8 // keep exact type opaque as the int type may change
|
||||||
const (
|
const (
|
||||||
Proto2 Syntax = 2
|
Proto2 Syntax = 2
|
||||||
Proto3 Syntax = 3
|
Proto3 Syntax = 3
|
||||||
|
Editions Syntax = 4
|
||||||
)
|
)
|
||||||
|
|
||||||
// IsValid reports whether the syntax is valid.
|
// IsValid reports whether the syntax is valid.
|
||||||
|
|
@ -436,7 +439,7 @@ type Names interface {
|
||||||
// FullName is a qualified name that uniquely identifies a proto declaration.
|
// FullName is a qualified name that uniquely identifies a proto declaration.
|
||||||
// A qualified name is the concatenation of the proto package along with the
|
// A qualified name is the concatenation of the proto package along with the
|
||||||
// fully-declared name (i.e., name of parent preceding the name of the child),
|
// fully-declared name (i.e., name of parent preceding the name of the child),
|
||||||
// with a '.' delimiter placed between each Name.
|
// with a '.' delimiter placed between each [Name].
|
||||||
//
|
//
|
||||||
// This should not have any leading or trailing dots.
|
// This should not have any leading or trailing dots.
|
||||||
type FullName string // e.g., "google.protobuf.Field.Kind"
|
type FullName string // e.g., "google.protobuf.Field.Kind"
|
||||||
|
|
@ -480,7 +483,7 @@ func isLetterDigit(c byte) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the short name, which is the last identifier segment.
|
// Name returns the short name, which is the last identifier segment.
|
||||||
// A single segment FullName is the Name itself.
|
// A single segment FullName is the [Name] itself.
|
||||||
func (n FullName) Name() Name {
|
func (n FullName) Name() Name {
|
||||||
if i := strings.LastIndexByte(string(n), '.'); i >= 0 {
|
if i := strings.LastIndexByte(string(n), '.'); i >= 0 {
|
||||||
return Name(n[i+1:])
|
return Name(n[i+1:])
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "source_code_info", (*SourcePath).appendSourceCodeInfo)
|
b = p.appendSingularField(b, "source_code_info", (*SourcePath).appendSourceCodeInfo)
|
||||||
case 12:
|
case 12:
|
||||||
b = p.appendSingularField(b, "syntax", nil)
|
b = p.appendSingularField(b, "syntax", nil)
|
||||||
case 13:
|
case 14:
|
||||||
b = p.appendSingularField(b, "edition", nil)
|
b = p.appendSingularField(b, "edition", nil)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
|
|
@ -180,6 +180,8 @@ func (p *SourcePath) appendFileOptions(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "php_metadata_namespace", nil)
|
b = p.appendSingularField(b, "php_metadata_namespace", nil)
|
||||||
case 45:
|
case 45:
|
||||||
b = p.appendSingularField(b, "ruby_package", nil)
|
b = p.appendSingularField(b, "ruby_package", nil)
|
||||||
|
case 50:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
|
|
@ -240,6 +242,8 @@ func (p *SourcePath) appendMessageOptions(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "map_entry", nil)
|
b = p.appendSingularField(b, "map_entry", nil)
|
||||||
case 11:
|
case 11:
|
||||||
b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil)
|
b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil)
|
||||||
|
case 12:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
|
|
@ -285,6 +289,8 @@ func (p *SourcePath) appendEnumOptions(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "deprecated", nil)
|
b = p.appendSingularField(b, "deprecated", nil)
|
||||||
case 6:
|
case 6:
|
||||||
b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil)
|
b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil)
|
||||||
|
case 7:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
|
|
@ -330,6 +336,8 @@ func (p *SourcePath) appendServiceOptions(b []byte) []byte {
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
switch (*p)[0] {
|
switch (*p)[0] {
|
||||||
|
case 34:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 33:
|
case 33:
|
||||||
b = p.appendSingularField(b, "deprecated", nil)
|
b = p.appendSingularField(b, "deprecated", nil)
|
||||||
case 999:
|
case 999:
|
||||||
|
|
@ -361,16 +369,39 @@ func (p *SourcePath) appendFieldOptions(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "debug_redact", nil)
|
b = p.appendSingularField(b, "debug_redact", nil)
|
||||||
case 17:
|
case 17:
|
||||||
b = p.appendSingularField(b, "retention", nil)
|
b = p.appendSingularField(b, "retention", nil)
|
||||||
case 18:
|
|
||||||
b = p.appendSingularField(b, "target", nil)
|
|
||||||
case 19:
|
case 19:
|
||||||
b = p.appendRepeatedField(b, "targets", nil)
|
b = p.appendRepeatedField(b, "targets", nil)
|
||||||
|
case 20:
|
||||||
|
b = p.appendRepeatedField(b, "edition_defaults", (*SourcePath).appendFieldOptions_EditionDefault)
|
||||||
|
case 21:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *SourcePath) appendFeatureSet(b []byte) []byte {
|
||||||
|
if len(*p) == 0 {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
switch (*p)[0] {
|
||||||
|
case 1:
|
||||||
|
b = p.appendSingularField(b, "field_presence", nil)
|
||||||
|
case 2:
|
||||||
|
b = p.appendSingularField(b, "enum_type", nil)
|
||||||
|
case 3:
|
||||||
|
b = p.appendSingularField(b, "repeated_field_encoding", nil)
|
||||||
|
case 4:
|
||||||
|
b = p.appendSingularField(b, "utf8_validation", nil)
|
||||||
|
case 5:
|
||||||
|
b = p.appendSingularField(b, "message_encoding", nil)
|
||||||
|
case 6:
|
||||||
|
b = p.appendSingularField(b, "json_format", nil)
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
func (p *SourcePath) appendUninterpretedOption(b []byte) []byte {
|
func (p *SourcePath) appendUninterpretedOption(b []byte) []byte {
|
||||||
if len(*p) == 0 {
|
if len(*p) == 0 {
|
||||||
return b
|
return b
|
||||||
|
|
@ -422,6 +453,8 @@ func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte {
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
case 2:
|
case 2:
|
||||||
b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration)
|
b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration)
|
||||||
|
case 50:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 3:
|
case 3:
|
||||||
b = p.appendSingularField(b, "verification", nil)
|
b = p.appendSingularField(b, "verification", nil)
|
||||||
}
|
}
|
||||||
|
|
@ -433,6 +466,8 @@ func (p *SourcePath) appendOneofOptions(b []byte) []byte {
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
switch (*p)[0] {
|
switch (*p)[0] {
|
||||||
|
case 1:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
|
|
@ -446,6 +481,10 @@ func (p *SourcePath) appendEnumValueOptions(b []byte) []byte {
|
||||||
switch (*p)[0] {
|
switch (*p)[0] {
|
||||||
case 1:
|
case 1:
|
||||||
b = p.appendSingularField(b, "deprecated", nil)
|
b = p.appendSingularField(b, "deprecated", nil)
|
||||||
|
case 2:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
|
case 3:
|
||||||
|
b = p.appendSingularField(b, "debug_redact", nil)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
|
|
@ -461,12 +500,27 @@ func (p *SourcePath) appendMethodOptions(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "deprecated", nil)
|
b = p.appendSingularField(b, "deprecated", nil)
|
||||||
case 34:
|
case 34:
|
||||||
b = p.appendSingularField(b, "idempotency_level", nil)
|
b = p.appendSingularField(b, "idempotency_level", nil)
|
||||||
|
case 35:
|
||||||
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *SourcePath) appendFieldOptions_EditionDefault(b []byte) []byte {
|
||||||
|
if len(*p) == 0 {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
switch (*p)[0] {
|
||||||
|
case 3:
|
||||||
|
b = p.appendSingularField(b, "edition", nil)
|
||||||
|
case 2:
|
||||||
|
b = p.appendSingularField(b, "value", nil)
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte {
|
func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte {
|
||||||
if len(*p) == 0 {
|
if len(*p) == 0 {
|
||||||
return b
|
return b
|
||||||
|
|
@ -491,8 +545,6 @@ func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "full_name", nil)
|
b = p.appendSingularField(b, "full_name", nil)
|
||||||
case 3:
|
case 3:
|
||||||
b = p.appendSingularField(b, "type", nil)
|
b = p.appendSingularField(b, "type", nil)
|
||||||
case 4:
|
|
||||||
b = p.appendSingularField(b, "is_repeated", nil)
|
|
||||||
case 5:
|
case 5:
|
||||||
b = p.appendSingularField(b, "reserved", nil)
|
b = p.appendSingularField(b, "reserved", nil)
|
||||||
case 6:
|
case 6:
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ package protoreflect
|
||||||
// exactly identical. However, it is possible for the same semantically
|
// exactly identical. However, it is possible for the same semantically
|
||||||
// identical proto type to be represented by multiple type descriptors.
|
// identical proto type to be represented by multiple type descriptors.
|
||||||
//
|
//
|
||||||
// For example, suppose we have t1 and t2 which are both MessageDescriptors.
|
// For example, suppose we have t1 and t2 which are both an [MessageDescriptor].
|
||||||
// If t1 == t2, then the types are definitely equal and all accessors return
|
// If t1 == t2, then the types are definitely equal and all accessors return
|
||||||
// the same information. However, if t1 != t2, then it is still possible that
|
// the same information. However, if t1 != t2, then it is still possible that
|
||||||
// they still represent the same proto type (e.g., t1.FullName == t2.FullName).
|
// they still represent the same proto type (e.g., t1.FullName == t2.FullName).
|
||||||
|
|
@ -115,7 +115,7 @@ type Descriptor interface {
|
||||||
// corresponds with the google.protobuf.FileDescriptorProto message.
|
// corresponds with the google.protobuf.FileDescriptorProto message.
|
||||||
//
|
//
|
||||||
// Top-level declarations:
|
// Top-level declarations:
|
||||||
// EnumDescriptor, MessageDescriptor, FieldDescriptor, and/or ServiceDescriptor.
|
// [EnumDescriptor], [MessageDescriptor], [FieldDescriptor], and/or [ServiceDescriptor].
|
||||||
type FileDescriptor interface {
|
type FileDescriptor interface {
|
||||||
Descriptor // Descriptor.FullName is identical to Package
|
Descriptor // Descriptor.FullName is identical to Package
|
||||||
|
|
||||||
|
|
@ -180,8 +180,8 @@ type FileImport struct {
|
||||||
// corresponds with the google.protobuf.DescriptorProto message.
|
// corresponds with the google.protobuf.DescriptorProto message.
|
||||||
//
|
//
|
||||||
// Nested declarations:
|
// Nested declarations:
|
||||||
// FieldDescriptor, OneofDescriptor, FieldDescriptor, EnumDescriptor,
|
// [FieldDescriptor], [OneofDescriptor], [FieldDescriptor], [EnumDescriptor],
|
||||||
// and/or MessageDescriptor.
|
// and/or [MessageDescriptor].
|
||||||
type MessageDescriptor interface {
|
type MessageDescriptor interface {
|
||||||
Descriptor
|
Descriptor
|
||||||
|
|
||||||
|
|
@ -214,7 +214,7 @@ type MessageDescriptor interface {
|
||||||
ExtensionRanges() FieldRanges
|
ExtensionRanges() FieldRanges
|
||||||
// ExtensionRangeOptions returns the ith extension range options.
|
// ExtensionRangeOptions returns the ith extension range options.
|
||||||
//
|
//
|
||||||
// To avoid a dependency cycle, this method returns a proto.Message value,
|
// To avoid a dependency cycle, this method returns a proto.Message] value,
|
||||||
// which always contains a google.protobuf.ExtensionRangeOptions message.
|
// which always contains a google.protobuf.ExtensionRangeOptions message.
|
||||||
// This method returns a typed nil-pointer if no options are present.
|
// This method returns a typed nil-pointer if no options are present.
|
||||||
// The caller must import the descriptorpb package to use this.
|
// The caller must import the descriptorpb package to use this.
|
||||||
|
|
@ -231,9 +231,9 @@ type MessageDescriptor interface {
|
||||||
}
|
}
|
||||||
type isMessageDescriptor interface{ ProtoType(MessageDescriptor) }
|
type isMessageDescriptor interface{ ProtoType(MessageDescriptor) }
|
||||||
|
|
||||||
// MessageType encapsulates a MessageDescriptor with a concrete Go implementation.
|
// MessageType encapsulates a [MessageDescriptor] with a concrete Go implementation.
|
||||||
// It is recommended that implementations of this interface also implement the
|
// It is recommended that implementations of this interface also implement the
|
||||||
// MessageFieldTypes interface.
|
// [MessageFieldTypes] interface.
|
||||||
type MessageType interface {
|
type MessageType interface {
|
||||||
// New returns a newly allocated empty message.
|
// New returns a newly allocated empty message.
|
||||||
// It may return nil for synthetic messages representing a map entry.
|
// It may return nil for synthetic messages representing a map entry.
|
||||||
|
|
@ -249,19 +249,19 @@ type MessageType interface {
|
||||||
Descriptor() MessageDescriptor
|
Descriptor() MessageDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageFieldTypes extends a MessageType by providing type information
|
// MessageFieldTypes extends a [MessageType] by providing type information
|
||||||
// regarding enums and messages referenced by the message fields.
|
// regarding enums and messages referenced by the message fields.
|
||||||
type MessageFieldTypes interface {
|
type MessageFieldTypes interface {
|
||||||
MessageType
|
MessageType
|
||||||
|
|
||||||
// Enum returns the EnumType for the ith field in Descriptor.Fields.
|
// Enum returns the EnumType for the ith field in MessageDescriptor.Fields.
|
||||||
// It returns nil if the ith field is not an enum kind.
|
// It returns nil if the ith field is not an enum kind.
|
||||||
// It panics if out of bounds.
|
// It panics if out of bounds.
|
||||||
//
|
//
|
||||||
// Invariant: mt.Enum(i).Descriptor() == mt.Descriptor().Fields(i).Enum()
|
// Invariant: mt.Enum(i).Descriptor() == mt.Descriptor().Fields(i).Enum()
|
||||||
Enum(i int) EnumType
|
Enum(i int) EnumType
|
||||||
|
|
||||||
// Message returns the MessageType for the ith field in Descriptor.Fields.
|
// Message returns the MessageType for the ith field in MessageDescriptor.Fields.
|
||||||
// It returns nil if the ith field is not a message or group kind.
|
// It returns nil if the ith field is not a message or group kind.
|
||||||
// It panics if out of bounds.
|
// It panics if out of bounds.
|
||||||
//
|
//
|
||||||
|
|
@ -286,8 +286,8 @@ type MessageDescriptors interface {
|
||||||
// corresponds with the google.protobuf.FieldDescriptorProto message.
|
// corresponds with the google.protobuf.FieldDescriptorProto message.
|
||||||
//
|
//
|
||||||
// It is used for both normal fields defined within the parent message
|
// It is used for both normal fields defined within the parent message
|
||||||
// (e.g., MessageDescriptor.Fields) and fields that extend some remote message
|
// (e.g., [MessageDescriptor.Fields]) and fields that extend some remote message
|
||||||
// (e.g., FileDescriptor.Extensions or MessageDescriptor.Extensions).
|
// (e.g., [FileDescriptor.Extensions] or [MessageDescriptor.Extensions]).
|
||||||
type FieldDescriptor interface {
|
type FieldDescriptor interface {
|
||||||
Descriptor
|
Descriptor
|
||||||
|
|
||||||
|
|
@ -344,7 +344,7 @@ type FieldDescriptor interface {
|
||||||
// IsMap reports whether this field represents a map,
|
// IsMap reports whether this field represents a map,
|
||||||
// where the value type for the associated field is a Map.
|
// where the value type for the associated field is a Map.
|
||||||
// It is equivalent to checking whether Cardinality is Repeated,
|
// It is equivalent to checking whether Cardinality is Repeated,
|
||||||
// that the Kind is MessageKind, and that Message.IsMapEntry reports true.
|
// that the Kind is MessageKind, and that MessageDescriptor.IsMapEntry reports true.
|
||||||
IsMap() bool
|
IsMap() bool
|
||||||
|
|
||||||
// MapKey returns the field descriptor for the key in the map entry.
|
// MapKey returns the field descriptor for the key in the map entry.
|
||||||
|
|
@ -419,7 +419,7 @@ type OneofDescriptor interface {
|
||||||
|
|
||||||
// IsSynthetic reports whether this is a synthetic oneof created to support
|
// IsSynthetic reports whether this is a synthetic oneof created to support
|
||||||
// proto3 optional semantics. If true, Fields contains exactly one field
|
// proto3 optional semantics. If true, Fields contains exactly one field
|
||||||
// with HasOptionalKeyword specified.
|
// with FieldDescriptor.HasOptionalKeyword specified.
|
||||||
IsSynthetic() bool
|
IsSynthetic() bool
|
||||||
|
|
||||||
// Fields is a list of fields belonging to this oneof.
|
// Fields is a list of fields belonging to this oneof.
|
||||||
|
|
@ -442,10 +442,10 @@ type OneofDescriptors interface {
|
||||||
doNotImplement
|
doNotImplement
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExtensionDescriptor is an alias of FieldDescriptor for documentation.
|
// ExtensionDescriptor is an alias of [FieldDescriptor] for documentation.
|
||||||
type ExtensionDescriptor = FieldDescriptor
|
type ExtensionDescriptor = FieldDescriptor
|
||||||
|
|
||||||
// ExtensionTypeDescriptor is an ExtensionDescriptor with an associated ExtensionType.
|
// ExtensionTypeDescriptor is an [ExtensionDescriptor] with an associated [ExtensionType].
|
||||||
type ExtensionTypeDescriptor interface {
|
type ExtensionTypeDescriptor interface {
|
||||||
ExtensionDescriptor
|
ExtensionDescriptor
|
||||||
|
|
||||||
|
|
@ -470,12 +470,12 @@ type ExtensionDescriptors interface {
|
||||||
doNotImplement
|
doNotImplement
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExtensionType encapsulates an ExtensionDescriptor with a concrete
|
// ExtensionType encapsulates an [ExtensionDescriptor] with a concrete
|
||||||
// Go implementation. The nested field descriptor must be for a extension field.
|
// Go implementation. The nested field descriptor must be for a extension field.
|
||||||
//
|
//
|
||||||
// While a normal field is a member of the parent message that it is declared
|
// While a normal field is a member of the parent message that it is declared
|
||||||
// within (see Descriptor.Parent), an extension field is a member of some other
|
// within (see [Descriptor.Parent]), an extension field is a member of some other
|
||||||
// target message (see ExtensionDescriptor.Extendee) and may have no
|
// target message (see [FieldDescriptor.ContainingMessage]) and may have no
|
||||||
// relationship with the parent. However, the full name of an extension field is
|
// relationship with the parent. However, the full name of an extension field is
|
||||||
// relative to the parent that it is declared within.
|
// relative to the parent that it is declared within.
|
||||||
//
|
//
|
||||||
|
|
@ -532,7 +532,7 @@ type ExtensionType interface {
|
||||||
// corresponds with the google.protobuf.EnumDescriptorProto message.
|
// corresponds with the google.protobuf.EnumDescriptorProto message.
|
||||||
//
|
//
|
||||||
// Nested declarations:
|
// Nested declarations:
|
||||||
// EnumValueDescriptor.
|
// [EnumValueDescriptor].
|
||||||
type EnumDescriptor interface {
|
type EnumDescriptor interface {
|
||||||
Descriptor
|
Descriptor
|
||||||
|
|
||||||
|
|
@ -548,7 +548,7 @@ type EnumDescriptor interface {
|
||||||
}
|
}
|
||||||
type isEnumDescriptor interface{ ProtoType(EnumDescriptor) }
|
type isEnumDescriptor interface{ ProtoType(EnumDescriptor) }
|
||||||
|
|
||||||
// EnumType encapsulates an EnumDescriptor with a concrete Go implementation.
|
// EnumType encapsulates an [EnumDescriptor] with a concrete Go implementation.
|
||||||
type EnumType interface {
|
type EnumType interface {
|
||||||
// New returns an instance of this enum type with its value set to n.
|
// New returns an instance of this enum type with its value set to n.
|
||||||
New(n EnumNumber) Enum
|
New(n EnumNumber) Enum
|
||||||
|
|
@ -610,7 +610,7 @@ type EnumValueDescriptors interface {
|
||||||
// ServiceDescriptor describes a service and
|
// ServiceDescriptor describes a service and
|
||||||
// corresponds with the google.protobuf.ServiceDescriptorProto message.
|
// corresponds with the google.protobuf.ServiceDescriptorProto message.
|
||||||
//
|
//
|
||||||
// Nested declarations: MethodDescriptor.
|
// Nested declarations: [MethodDescriptor].
|
||||||
type ServiceDescriptor interface {
|
type ServiceDescriptor interface {
|
||||||
Descriptor
|
Descriptor
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,16 +27,16 @@ type Enum interface {
|
||||||
// Message is a reflective interface for a concrete message value,
|
// Message is a reflective interface for a concrete message value,
|
||||||
// encapsulating both type and value information for the message.
|
// encapsulating both type and value information for the message.
|
||||||
//
|
//
|
||||||
// Accessor/mutators for individual fields are keyed by FieldDescriptor.
|
// Accessor/mutators for individual fields are keyed by [FieldDescriptor].
|
||||||
// For non-extension fields, the descriptor must exactly match the
|
// For non-extension fields, the descriptor must exactly match the
|
||||||
// field known by the parent message.
|
// field known by the parent message.
|
||||||
// For extension fields, the descriptor must implement ExtensionTypeDescriptor,
|
// For extension fields, the descriptor must implement [ExtensionTypeDescriptor],
|
||||||
// extend the parent message (i.e., have the same message FullName), and
|
// extend the parent message (i.e., have the same message [FullName]), and
|
||||||
// be within the parent's extension range.
|
// be within the parent's extension range.
|
||||||
//
|
//
|
||||||
// Each field Value can be a scalar or a composite type (Message, List, or Map).
|
// Each field [Value] can be a scalar or a composite type ([Message], [List], or [Map]).
|
||||||
// See Value for the Go types associated with a FieldDescriptor.
|
// See [Value] for the Go types associated with a [FieldDescriptor].
|
||||||
// Providing a Value that is invalid or of an incorrect type panics.
|
// Providing a [Value] that is invalid or of an incorrect type panics.
|
||||||
type Message interface {
|
type Message interface {
|
||||||
// Descriptor returns message descriptor, which contains only the protobuf
|
// Descriptor returns message descriptor, which contains only the protobuf
|
||||||
// type information for the message.
|
// type information for the message.
|
||||||
|
|
@ -152,7 +152,7 @@ type Message interface {
|
||||||
// This method may return nil.
|
// This method may return nil.
|
||||||
//
|
//
|
||||||
// The returned methods type is identical to
|
// The returned methods type is identical to
|
||||||
// "google.golang.org/protobuf/runtime/protoiface".Methods.
|
// google.golang.org/protobuf/runtime/protoiface.Methods.
|
||||||
// Consult the protoiface package documentation for details.
|
// Consult the protoiface package documentation for details.
|
||||||
ProtoMethods() *methods
|
ProtoMethods() *methods
|
||||||
}
|
}
|
||||||
|
|
@ -175,8 +175,8 @@ func (b RawFields) IsValid() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// List is a zero-indexed, ordered list.
|
// List is a zero-indexed, ordered list.
|
||||||
// The element Value type is determined by FieldDescriptor.Kind.
|
// The element [Value] type is determined by [FieldDescriptor.Kind].
|
||||||
// Providing a Value that is invalid or of an incorrect type panics.
|
// Providing a [Value] that is invalid or of an incorrect type panics.
|
||||||
type List interface {
|
type List interface {
|
||||||
// Len reports the number of entries in the List.
|
// Len reports the number of entries in the List.
|
||||||
// Get, Set, and Truncate panic with out of bound indexes.
|
// Get, Set, and Truncate panic with out of bound indexes.
|
||||||
|
|
@ -226,9 +226,9 @@ type List interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Map is an unordered, associative map.
|
// Map is an unordered, associative map.
|
||||||
// The entry MapKey type is determined by FieldDescriptor.MapKey.Kind.
|
// The entry [MapKey] type is determined by [FieldDescriptor.MapKey].Kind.
|
||||||
// The entry Value type is determined by FieldDescriptor.MapValue.Kind.
|
// The entry [Value] type is determined by [FieldDescriptor.MapValue].Kind.
|
||||||
// Providing a MapKey or Value that is invalid or of an incorrect type panics.
|
// Providing a [MapKey] or [Value] that is invalid or of an incorrect type panics.
|
||||||
type Map interface {
|
type Map interface {
|
||||||
// Len reports the number of elements in the map.
|
// Len reports the number of elements in the map.
|
||||||
Len() int
|
Len() int
|
||||||
|
|
|
||||||
|
|
@ -24,19 +24,19 @@ import (
|
||||||
// Unlike the == operator, a NaN is equal to another NaN.
|
// Unlike the == operator, a NaN is equal to another NaN.
|
||||||
//
|
//
|
||||||
// - Enums are equal if they contain the same number.
|
// - Enums are equal if they contain the same number.
|
||||||
// Since Value does not contain an enum descriptor,
|
// Since [Value] does not contain an enum descriptor,
|
||||||
// enum values do not consider the type of the enum.
|
// enum values do not consider the type of the enum.
|
||||||
//
|
//
|
||||||
// - Other scalar values are equal if they contain the same value.
|
// - Other scalar values are equal if they contain the same value.
|
||||||
//
|
//
|
||||||
// - Message values are equal if they belong to the same message descriptor,
|
// - [Message] values are equal if they belong to the same message descriptor,
|
||||||
// have the same set of populated known and extension field values,
|
// have the same set of populated known and extension field values,
|
||||||
// and the same set of unknown fields values.
|
// and the same set of unknown fields values.
|
||||||
//
|
//
|
||||||
// - Lists are equal if they are the same length and
|
// - [List] values are equal if they are the same length and
|
||||||
// each corresponding element is equal.
|
// each corresponding element is equal.
|
||||||
//
|
//
|
||||||
// - Maps are equal if they have the same set of keys and
|
// - [Map] values are equal if they have the same set of keys and
|
||||||
// the corresponding value for each key is equal.
|
// the corresponding value for each key is equal.
|
||||||
func (v1 Value) Equal(v2 Value) bool {
|
func (v1 Value) Equal(v2 Value) bool {
|
||||||
return equalValue(v1, v2)
|
return equalValue(v1, v2)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import (
|
||||||
|
|
||||||
// Value is a union where only one Go type may be set at a time.
|
// Value is a union where only one Go type may be set at a time.
|
||||||
// The Value is used to represent all possible values a field may take.
|
// The Value is used to represent all possible values a field may take.
|
||||||
// The following shows which Go type is used to represent each proto Kind:
|
// The following shows which Go type is used to represent each proto [Kind]:
|
||||||
//
|
//
|
||||||
// ╔════════════╤═════════════════════════════════════╗
|
// ╔════════════╤═════════════════════════════════════╗
|
||||||
// ║ Go type │ Protobuf kind ║
|
// ║ Go type │ Protobuf kind ║
|
||||||
|
|
@ -31,22 +31,22 @@ import (
|
||||||
//
|
//
|
||||||
// Multiple protobuf Kinds may be represented by a single Go type if the type
|
// Multiple protobuf Kinds may be represented by a single Go type if the type
|
||||||
// can losslessly represent the information for the proto kind. For example,
|
// can losslessly represent the information for the proto kind. For example,
|
||||||
// Int64Kind, Sint64Kind, and Sfixed64Kind are all represented by int64,
|
// [Int64Kind], [Sint64Kind], and [Sfixed64Kind] are all represented by int64,
|
||||||
// but use different integer encoding methods.
|
// but use different integer encoding methods.
|
||||||
//
|
//
|
||||||
// The List or Map types are used if the field cardinality is repeated.
|
// The [List] or [Map] types are used if the field cardinality is repeated.
|
||||||
// A field is a List if FieldDescriptor.IsList reports true.
|
// A field is a [List] if [FieldDescriptor.IsList] reports true.
|
||||||
// A field is a Map if FieldDescriptor.IsMap reports true.
|
// A field is a [Map] if [FieldDescriptor.IsMap] reports true.
|
||||||
//
|
//
|
||||||
// Converting to/from a Value and a concrete Go value panics on type mismatch.
|
// Converting to/from a Value and a concrete Go value panics on type mismatch.
|
||||||
// For example, ValueOf("hello").Int() panics because this attempts to
|
// For example, [ValueOf]("hello").Int() panics because this attempts to
|
||||||
// retrieve an int64 from a string.
|
// retrieve an int64 from a string.
|
||||||
//
|
//
|
||||||
// List, Map, and Message Values are called "composite" values.
|
// [List], [Map], and [Message] Values are called "composite" values.
|
||||||
//
|
//
|
||||||
// A composite Value may alias (reference) memory at some location,
|
// A composite Value may alias (reference) memory at some location,
|
||||||
// such that changes to the Value updates the that location.
|
// such that changes to the Value updates the that location.
|
||||||
// A composite value acquired with a Mutable method, such as Message.Mutable,
|
// A composite value acquired with a Mutable method, such as [Message.Mutable],
|
||||||
// always references the source object.
|
// always references the source object.
|
||||||
//
|
//
|
||||||
// For example:
|
// For example:
|
||||||
|
|
@ -65,7 +65,7 @@ import (
|
||||||
// // appending to the List here may or may not modify the message.
|
// // appending to the List here may or may not modify the message.
|
||||||
// list.Append(protoreflect.ValueOfInt32(0))
|
// list.Append(protoreflect.ValueOfInt32(0))
|
||||||
//
|
//
|
||||||
// Some operations, such as Message.Get, may return an "empty, read-only"
|
// Some operations, such as [Message.Get], may return an "empty, read-only"
|
||||||
// composite Value. Modifying an empty, read-only value panics.
|
// composite Value. Modifying an empty, read-only value panics.
|
||||||
type Value value
|
type Value value
|
||||||
|
|
||||||
|
|
@ -306,7 +306,7 @@ func (v Value) Float() float64 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns v as a string. Since this method implements fmt.Stringer,
|
// String returns v as a string. Since this method implements [fmt.Stringer],
|
||||||
// this returns the formatted string value for any non-string type.
|
// this returns the formatted string value for any non-string type.
|
||||||
func (v Value) String() string {
|
func (v Value) String() string {
|
||||||
switch v.typ {
|
switch v.typ {
|
||||||
|
|
@ -327,7 +327,7 @@ func (v Value) Bytes() []byte {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enum returns v as a EnumNumber and panics if the type is not a EnumNumber.
|
// Enum returns v as a [EnumNumber] and panics if the type is not a [EnumNumber].
|
||||||
func (v Value) Enum() EnumNumber {
|
func (v Value) Enum() EnumNumber {
|
||||||
switch v.typ {
|
switch v.typ {
|
||||||
case enumType:
|
case enumType:
|
||||||
|
|
@ -337,7 +337,7 @@ func (v Value) Enum() EnumNumber {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Message returns v as a Message and panics if the type is not a Message.
|
// Message returns v as a [Message] and panics if the type is not a [Message].
|
||||||
func (v Value) Message() Message {
|
func (v Value) Message() Message {
|
||||||
switch vi := v.getIface().(type) {
|
switch vi := v.getIface().(type) {
|
||||||
case Message:
|
case Message:
|
||||||
|
|
@ -347,7 +347,7 @@ func (v Value) Message() Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// List returns v as a List and panics if the type is not a List.
|
// List returns v as a [List] and panics if the type is not a [List].
|
||||||
func (v Value) List() List {
|
func (v Value) List() List {
|
||||||
switch vi := v.getIface().(type) {
|
switch vi := v.getIface().(type) {
|
||||||
case List:
|
case List:
|
||||||
|
|
@ -357,7 +357,7 @@ func (v Value) List() List {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Map returns v as a Map and panics if the type is not a Map.
|
// Map returns v as a [Map] and panics if the type is not a [Map].
|
||||||
func (v Value) Map() Map {
|
func (v Value) Map() Map {
|
||||||
switch vi := v.getIface().(type) {
|
switch vi := v.getIface().(type) {
|
||||||
case Map:
|
case Map:
|
||||||
|
|
@ -367,7 +367,7 @@ func (v Value) Map() Map {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapKey returns v as a MapKey and panics for invalid MapKey types.
|
// MapKey returns v as a [MapKey] and panics for invalid [MapKey] types.
|
||||||
func (v Value) MapKey() MapKey {
|
func (v Value) MapKey() MapKey {
|
||||||
switch v.typ {
|
switch v.typ {
|
||||||
case boolType, int32Type, int64Type, uint32Type, uint64Type, stringType:
|
case boolType, int32Type, int64Type, uint32Type, uint64Type, stringType:
|
||||||
|
|
@ -378,8 +378,8 @@ func (v Value) MapKey() MapKey {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapKey is used to index maps, where the Go type of the MapKey must match
|
// MapKey is used to index maps, where the Go type of the MapKey must match
|
||||||
// the specified key Kind (see MessageDescriptor.IsMapEntry).
|
// the specified key [Kind] (see [MessageDescriptor.IsMapEntry]).
|
||||||
// The following shows what Go type is used to represent each proto Kind:
|
// The following shows what Go type is used to represent each proto [Kind]:
|
||||||
//
|
//
|
||||||
// ╔═════════╤═════════════════════════════════════╗
|
// ╔═════════╤═════════════════════════════════════╗
|
||||||
// ║ Go type │ Protobuf kind ║
|
// ║ Go type │ Protobuf kind ║
|
||||||
|
|
@ -392,13 +392,13 @@ func (v Value) MapKey() MapKey {
|
||||||
// ║ string │ StringKind ║
|
// ║ string │ StringKind ║
|
||||||
// ╚═════════╧═════════════════════════════════════╝
|
// ╚═════════╧═════════════════════════════════════╝
|
||||||
//
|
//
|
||||||
// A MapKey is constructed and accessed through a Value:
|
// A MapKey is constructed and accessed through a [Value]:
|
||||||
//
|
//
|
||||||
// k := ValueOf("hash").MapKey() // convert string to MapKey
|
// k := ValueOf("hash").MapKey() // convert string to MapKey
|
||||||
// s := k.String() // convert MapKey to string
|
// s := k.String() // convert MapKey to string
|
||||||
//
|
//
|
||||||
// The MapKey is a strict subset of valid types used in Value;
|
// The MapKey is a strict subset of valid types used in [Value];
|
||||||
// converting a Value to a MapKey with an invalid type panics.
|
// converting a [Value] to a MapKey with an invalid type panics.
|
||||||
type MapKey value
|
type MapKey value
|
||||||
|
|
||||||
// IsValid reports whether k is populated with a value.
|
// IsValid reports whether k is populated with a value.
|
||||||
|
|
@ -426,13 +426,13 @@ func (k MapKey) Uint() uint64 {
|
||||||
return Value(k).Uint()
|
return Value(k).Uint()
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns k as a string. Since this method implements fmt.Stringer,
|
// String returns k as a string. Since this method implements [fmt.Stringer],
|
||||||
// this returns the formatted string value for any non-string type.
|
// this returns the formatted string value for any non-string type.
|
||||||
func (k MapKey) String() string {
|
func (k MapKey) String() string {
|
||||||
return Value(k).String()
|
return Value(k).String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value returns k as a Value.
|
// Value returns k as a [Value].
|
||||||
func (k MapKey) Value() Value {
|
func (k MapKey) Value() Value {
|
||||||
return Value(k)
|
return Value(k)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine
|
//go:build !purego && !appengine && !go1.21
|
||||||
// +build !purego,!appengine
|
// +build !purego,!appengine,!go1.21
|
||||||
|
|
||||||
package protoreflect
|
package protoreflect
|
||||||
|
|
||||||
87
vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
generated
vendored
Normal file
87
vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
generated
vendored
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
// Copyright 2018 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 !purego && !appengine && go1.21
|
||||||
|
// +build !purego,!appengine,go1.21
|
||||||
|
|
||||||
|
package protoreflect
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/internal/pragma"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
ifaceHeader struct {
|
||||||
|
_ [0]interface{} // if interfaces have greater alignment than unsafe.Pointer, this will enforce it.
|
||||||
|
Type unsafe.Pointer
|
||||||
|
Data unsafe.Pointer
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
nilType = typeOf(nil)
|
||||||
|
boolType = typeOf(*new(bool))
|
||||||
|
int32Type = typeOf(*new(int32))
|
||||||
|
int64Type = typeOf(*new(int64))
|
||||||
|
uint32Type = typeOf(*new(uint32))
|
||||||
|
uint64Type = typeOf(*new(uint64))
|
||||||
|
float32Type = typeOf(*new(float32))
|
||||||
|
float64Type = typeOf(*new(float64))
|
||||||
|
stringType = typeOf(*new(string))
|
||||||
|
bytesType = typeOf(*new([]byte))
|
||||||
|
enumType = typeOf(*new(EnumNumber))
|
||||||
|
)
|
||||||
|
|
||||||
|
// typeOf returns a pointer to the Go type information.
|
||||||
|
// The pointer is comparable and equal if and only if the types are identical.
|
||||||
|
func typeOf(t interface{}) unsafe.Pointer {
|
||||||
|
return (*ifaceHeader)(unsafe.Pointer(&t)).Type
|
||||||
|
}
|
||||||
|
|
||||||
|
// value is a union where only one type can be represented at a time.
|
||||||
|
// The struct is 24B large on 64-bit systems and requires the minimum storage
|
||||||
|
// necessary to represent each possible type.
|
||||||
|
//
|
||||||
|
// The Go GC needs to be able to scan variables containing pointers.
|
||||||
|
// As such, pointers and non-pointers cannot be intermixed.
|
||||||
|
type value struct {
|
||||||
|
pragma.DoNotCompare // 0B
|
||||||
|
|
||||||
|
// typ stores the type of the value as a pointer to the Go type.
|
||||||
|
typ unsafe.Pointer // 8B
|
||||||
|
|
||||||
|
// ptr stores the data pointer for a String, Bytes, or interface value.
|
||||||
|
ptr unsafe.Pointer // 8B
|
||||||
|
|
||||||
|
// num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or
|
||||||
|
// Enum value as a raw uint64.
|
||||||
|
//
|
||||||
|
// It is also used to store the length of a String or Bytes value;
|
||||||
|
// the capacity is ignored.
|
||||||
|
num uint64 // 8B
|
||||||
|
}
|
||||||
|
|
||||||
|
func valueOfString(v string) Value {
|
||||||
|
return Value{typ: stringType, ptr: unsafe.Pointer(unsafe.StringData(v)), num: uint64(len(v))}
|
||||||
|
}
|
||||||
|
func valueOfBytes(v []byte) Value {
|
||||||
|
return Value{typ: bytesType, ptr: unsafe.Pointer(unsafe.SliceData(v)), num: uint64(len(v))}
|
||||||
|
}
|
||||||
|
func valueOfIface(v interface{}) Value {
|
||||||
|
p := (*ifaceHeader)(unsafe.Pointer(&v))
|
||||||
|
return Value{typ: p.Type, ptr: p.Data}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v Value) getString() string {
|
||||||
|
return unsafe.String((*byte)(v.ptr), v.num)
|
||||||
|
}
|
||||||
|
func (v Value) getBytes() []byte {
|
||||||
|
return unsafe.Slice((*byte)(v.ptr), v.num)
|
||||||
|
}
|
||||||
|
func (v Value) getIface() (x interface{}) {
|
||||||
|
*(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
// Package protoregistry provides data structures to register and lookup
|
// Package protoregistry provides data structures to register and lookup
|
||||||
// protobuf descriptor types.
|
// protobuf descriptor types.
|
||||||
//
|
//
|
||||||
// The Files registry contains file descriptors and provides the ability
|
// The [Files] registry contains file descriptors and provides the ability
|
||||||
// to iterate over the files or lookup a specific descriptor within the files.
|
// to iterate over the files or lookup a specific descriptor within the files.
|
||||||
// Files only contains protobuf descriptors and has no understanding of Go
|
// [Files] only contains protobuf descriptors and has no understanding of Go
|
||||||
// type information that may be associated with each descriptor.
|
// type information that may be associated with each descriptor.
|
||||||
//
|
//
|
||||||
// The Types registry contains descriptor types for which there is a known
|
// The [Types] registry contains descriptor types for which there is a known
|
||||||
// Go type associated with that descriptor. It provides the ability to iterate
|
// Go type associated with that descriptor. It provides the ability to iterate
|
||||||
// over the registered types or lookup a type by name.
|
// over the registered types or lookup a type by name.
|
||||||
package protoregistry
|
package protoregistry
|
||||||
|
|
@ -218,7 +218,7 @@ func (r *Files) checkGenProtoConflict(path string) {
|
||||||
|
|
||||||
// FindDescriptorByName looks up a descriptor by the full name.
|
// FindDescriptorByName looks up a descriptor by the full name.
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
func (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) {
|
func (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return nil, NotFound
|
return nil, NotFound
|
||||||
|
|
@ -310,7 +310,7 @@ func (s *nameSuffix) Pop() (name protoreflect.Name) {
|
||||||
|
|
||||||
// FindFileByPath looks up a file by the path.
|
// FindFileByPath looks up a file by the path.
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
// This returns an error if multiple files have the same path.
|
// This returns an error if multiple files have the same path.
|
||||||
func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) {
|
func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
|
|
@ -431,7 +431,7 @@ func rangeTopLevelDescriptors(fd protoreflect.FileDescriptor, f func(protoreflec
|
||||||
// A compliant implementation must deterministically return the same type
|
// A compliant implementation must deterministically return the same type
|
||||||
// if no error is encountered.
|
// if no error is encountered.
|
||||||
//
|
//
|
||||||
// The Types type implements this interface.
|
// The [Types] type implements this interface.
|
||||||
type MessageTypeResolver interface {
|
type MessageTypeResolver interface {
|
||||||
// FindMessageByName looks up a message by its full name.
|
// FindMessageByName looks up a message by its full name.
|
||||||
// E.g., "google.protobuf.Any"
|
// E.g., "google.protobuf.Any"
|
||||||
|
|
@ -451,7 +451,7 @@ type MessageTypeResolver interface {
|
||||||
// A compliant implementation must deterministically return the same type
|
// A compliant implementation must deterministically return the same type
|
||||||
// if no error is encountered.
|
// if no error is encountered.
|
||||||
//
|
//
|
||||||
// The Types type implements this interface.
|
// The [Types] type implements this interface.
|
||||||
type ExtensionTypeResolver interface {
|
type ExtensionTypeResolver interface {
|
||||||
// FindExtensionByName looks up a extension field by the field's full name.
|
// FindExtensionByName looks up a extension field by the field's full name.
|
||||||
// Note that this is the full name of the field as determined by
|
// Note that this is the full name of the field as determined by
|
||||||
|
|
@ -590,7 +590,7 @@ func (r *Types) register(kind string, desc protoreflect.Descriptor, typ interfac
|
||||||
// FindEnumByName looks up an enum by its full name.
|
// FindEnumByName looks up an enum by its full name.
|
||||||
// E.g., "google.protobuf.Field.Kind".
|
// E.g., "google.protobuf.Field.Kind".
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) {
|
func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return nil, NotFound
|
return nil, NotFound
|
||||||
|
|
@ -611,7 +611,7 @@ func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumTyp
|
||||||
// FindMessageByName looks up a message by its full name,
|
// FindMessageByName looks up a message by its full name,
|
||||||
// e.g. "google.protobuf.Any".
|
// e.g. "google.protobuf.Any".
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
|
func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return nil, NotFound
|
return nil, NotFound
|
||||||
|
|
@ -632,7 +632,7 @@ func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.M
|
||||||
// FindMessageByURL looks up a message by a URL identifier.
|
// FindMessageByURL looks up a message by a URL identifier.
|
||||||
// See documentation on google.protobuf.Any.type_url for the URL format.
|
// See documentation on google.protobuf.Any.type_url for the URL format.
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) {
|
func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) {
|
||||||
// This function is similar to FindMessageByName but
|
// This function is similar to FindMessageByName but
|
||||||
// truncates anything before and including '/' in the URL.
|
// truncates anything before and including '/' in the URL.
|
||||||
|
|
@ -662,7 +662,7 @@ func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) {
|
||||||
// where the extension is declared and is unrelated to the full name of the
|
// where the extension is declared and is unrelated to the full name of the
|
||||||
// message being extended.
|
// message being extended.
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
|
func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return nil, NotFound
|
return nil, NotFound
|
||||||
|
|
@ -703,7 +703,7 @@ func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.E
|
||||||
// FindExtensionByNumber looks up a extension field by the field number
|
// FindExtensionByNumber looks up a extension field by the field number
|
||||||
// within some parent message, identified by full name.
|
// within some parent message, identified by full name.
|
||||||
//
|
//
|
||||||
// This returns (nil, NotFound) if not found.
|
// This returns (nil, [NotFound]) if not found.
|
||||||
func (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
|
func (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return nil, NotFound
|
return nil, NotFound
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -237,7 +237,8 @@ type Any struct {
|
||||||
//
|
//
|
||||||
// Note: this functionality is not currently available in the official
|
// Note: this functionality is not currently available in the official
|
||||||
// protobuf release, and it is not used for type URLs beginning with
|
// protobuf release, and it is not used for type URLs beginning with
|
||||||
// type.googleapis.com.
|
// type.googleapis.com. As of May 2023, there are no widely used type server
|
||||||
|
// implementations and no plans to implement one.
|
||||||
//
|
//
|
||||||
// Schemes other than `http`, `https` (or the empty scheme) might be
|
// Schemes other than `http`, `https` (or the empty scheme) might be
|
||||||
// used with implementation specific semantics.
|
// used with implementation specific semantics.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# cloud.google.com/go v0.110.10
|
# cloud.google.com/go v0.111.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
cloud.google.com/go/internal
|
cloud.google.com/go/internal
|
||||||
cloud.google.com/go/internal/optional
|
cloud.google.com/go/internal/optional
|
||||||
|
|
@ -1191,11 +1191,7 @@ golang.org/x/tools/internal/tokeninternal
|
||||||
golang.org/x/tools/internal/typeparams
|
golang.org/x/tools/internal/typeparams
|
||||||
golang.org/x/tools/internal/typesinternal
|
golang.org/x/tools/internal/typesinternal
|
||||||
golang.org/x/tools/internal/versions
|
golang.org/x/tools/internal/versions
|
||||||
# golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
|
# google.golang.org/api v0.157.0
|
||||||
## explicit; go 1.17
|
|
||||||
golang.org/x/xerrors
|
|
||||||
golang.org/x/xerrors/internal
|
|
||||||
# google.golang.org/api v0.155.0
|
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/api/googleapi
|
google.golang.org/api/googleapi
|
||||||
google.golang.org/api/googleapi/transport
|
google.golang.org/api/googleapi/transport
|
||||||
|
|
@ -1225,17 +1221,17 @@ google.golang.org/appengine/internal/modules
|
||||||
google.golang.org/appengine/internal/remote_api
|
google.golang.org/appengine/internal/remote_api
|
||||||
google.golang.org/appengine/internal/urlfetch
|
google.golang.org/appengine/internal/urlfetch
|
||||||
google.golang.org/appengine/urlfetch
|
google.golang.org/appengine/urlfetch
|
||||||
# google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3
|
# google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/type/date
|
google.golang.org/genproto/googleapis/type/date
|
||||||
google.golang.org/genproto/googleapis/type/expr
|
google.golang.org/genproto/googleapis/type/expr
|
||||||
google.golang.org/genproto/internal
|
google.golang.org/genproto/internal
|
||||||
google.golang.org/genproto/protobuf/field_mask
|
google.golang.org/genproto/protobuf/field_mask
|
||||||
# google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3
|
# google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/api
|
google.golang.org/genproto/googleapis/api
|
||||||
google.golang.org/genproto/googleapis/api/annotations
|
google.golang.org/genproto/googleapis/api/annotations
|
||||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0
|
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/rpc/code
|
google.golang.org/genproto/googleapis/rpc/code
|
||||||
google.golang.org/genproto/googleapis/rpc/errdetails
|
google.golang.org/genproto/googleapis/rpc/errdetails
|
||||||
|
|
@ -1307,8 +1303,8 @@ google.golang.org/grpc/serviceconfig
|
||||||
google.golang.org/grpc/stats
|
google.golang.org/grpc/stats
|
||||||
google.golang.org/grpc/status
|
google.golang.org/grpc/status
|
||||||
google.golang.org/grpc/tap
|
google.golang.org/grpc/tap
|
||||||
# google.golang.org/protobuf v1.31.0
|
# google.golang.org/protobuf v1.32.0
|
||||||
## explicit; go 1.11
|
## explicit; go 1.17
|
||||||
google.golang.org/protobuf/encoding/protojson
|
google.golang.org/protobuf/encoding/protojson
|
||||||
google.golang.org/protobuf/encoding/prototext
|
google.golang.org/protobuf/encoding/prototext
|
||||||
google.golang.org/protobuf/encoding/protowire
|
google.golang.org/protobuf/encoding/protowire
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue