MM-32048: Upgrade dependencies (#16765)
```release-note Updated Go dependencies to their latest minor version ``` https://mattermost.atlassian.net/browse/MM-32048
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
dccdc9f6cf
Коммит
1cb019c0d8
41
go.mod
41
go.mod
@@ -8,14 +8,14 @@ require (
|
|||||||
github.com/Masterminds/semver/v3 v3.1.1
|
github.com/Masterminds/semver/v3 v3.1.1
|
||||||
github.com/Masterminds/squirrel v1.5.0
|
github.com/Masterminds/squirrel v1.5.0
|
||||||
github.com/NYTimes/gziphandler v1.1.1
|
github.com/NYTimes/gziphandler v1.1.1
|
||||||
github.com/PuerkitoBio/goquery v1.6.0 // indirect
|
github.com/PuerkitoBio/goquery v1.6.1 // indirect
|
||||||
github.com/RoaringBitmap/roaring v0.5.5 // indirect
|
github.com/RoaringBitmap/roaring v0.5.5 // indirect
|
||||||
github.com/advancedlogic/GoOse v0.0.0-20200830213114-1225d531e0ad // indirect
|
github.com/advancedlogic/GoOse v0.0.0-20200830213114-1225d531e0ad // indirect
|
||||||
github.com/andybalholm/brotli v1.0.1 // indirect
|
github.com/andybalholm/brotli v1.0.1 // indirect
|
||||||
github.com/araddon/dateparse v0.0.0-20201001162425-8aadafed4dc4 // indirect
|
github.com/araddon/dateparse v0.0.0-20201001162425-8aadafed4dc4 // indirect
|
||||||
github.com/armon/go-metrics v0.3.5 // indirect
|
github.com/armon/go-metrics v0.3.6 // indirect
|
||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
||||||
github.com/aws/aws-sdk-go v1.36.15
|
github.com/aws/aws-sdk-go v1.36.29
|
||||||
github.com/blang/semver v3.5.1+incompatible
|
github.com/blang/semver v3.5.1+incompatible
|
||||||
github.com/blevesearch/bleve v1.0.14
|
github.com/blevesearch/bleve v1.0.14
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
||||||
@@ -24,7 +24,7 @@ require (
|
|||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3
|
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3
|
||||||
github.com/disintegration/imaging v1.6.2
|
github.com/disintegration/imaging v1.6.2
|
||||||
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8
|
github.com/dyatlov/go-opengraph v0.0.0-20210112100619-dae8665a5b09
|
||||||
github.com/fatih/color v1.10.0 // indirect
|
github.com/fatih/color v1.10.0 // indirect
|
||||||
github.com/fortytw2/leaktest v1.3.0 // indirect
|
github.com/fortytw2/leaktest v1.3.0 // indirect
|
||||||
github.com/francoispqt/gojay v1.2.13
|
github.com/francoispqt/gojay v1.2.13
|
||||||
@@ -32,10 +32,12 @@ require (
|
|||||||
github.com/getsentry/sentry-go v0.9.0
|
github.com/getsentry/sentry-go v0.9.0
|
||||||
github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect
|
github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect
|
github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect
|
||||||
github.com/go-redis/redis/v8 v8.4.4 // indirect
|
github.com/go-redis/redis/v8 v8.4.9 // indirect
|
||||||
|
github.com/go-resty/resty/v2 v2.4.0 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
github.com/golang/snappy v0.0.2 // indirect
|
github.com/golang/snappy v0.0.2 // indirect
|
||||||
|
github.com/google/uuid v1.1.5 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
|
||||||
github.com/gorilla/handlers v1.5.1
|
github.com/gorilla/handlers v1.5.1
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
@@ -58,7 +60,7 @@ require (
|
|||||||
github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
|
github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
|
||||||
github.com/jmoiron/sqlx v1.2.0
|
github.com/jmoiron/sqlx v1.2.0
|
||||||
github.com/jonboulle/clockwork v0.2.2
|
github.com/jonboulle/clockwork v0.2.2
|
||||||
github.com/klauspost/compress v1.11.4 // indirect
|
github.com/klauspost/compress v1.11.7 // indirect
|
||||||
github.com/klauspost/pgzip v1.2.5 // indirect
|
github.com/klauspost/pgzip v1.2.5 // indirect
|
||||||
github.com/kr/pretty v0.2.0 // indirect
|
github.com/kr/pretty v0.2.0 // indirect
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/kr/text v0.2.0 // indirect
|
||||||
@@ -71,24 +73,28 @@ require (
|
|||||||
github.com/mattermost/ldap v0.0.0-20201202150706-ee0e6284187d
|
github.com/mattermost/ldap v0.0.0-20201202150706-ee0e6284187d
|
||||||
github.com/mattermost/logr v1.0.13
|
github.com/mattermost/logr v1.0.13
|
||||||
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0
|
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0
|
||||||
|
github.com/mattn/go-runewidth v0.0.10 // indirect
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
||||||
github.com/mholt/archiver/v3 v3.5.0
|
github.com/mholt/archiver/v3 v3.5.0
|
||||||
github.com/miekg/dns v1.1.35 // indirect
|
github.com/miekg/dns v1.1.35 // indirect
|
||||||
github.com/minio/md5-simd v1.1.1 // indirect
|
github.com/minio/md5-simd v1.1.1 // indirect
|
||||||
github.com/minio/minio-go/v7 v7.0.6
|
github.com/minio/minio-go/v7 v7.0.7
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
||||||
github.com/muesli/smartcrop v0.3.0 // indirect
|
github.com/muesli/smartcrop v0.3.0 // indirect
|
||||||
github.com/oklog/run v1.1.0 // indirect
|
github.com/oklog/run v1.1.0 // indirect
|
||||||
github.com/olivere/elastic v6.2.35+incompatible // indirect
|
github.com/olivere/elastic v6.2.35+incompatible // indirect
|
||||||
github.com/oov/psd v0.0.0-20201203182240-dad9002861d9
|
github.com/oov/psd v0.0.0-20201203182240-dad9002861d9
|
||||||
github.com/opentracing/opentracing-go v1.2.0
|
github.com/opentracing/opentracing-go v1.2.0
|
||||||
|
github.com/otiai10/gosseract/v2 v2.3.1 // indirect
|
||||||
github.com/pborman/uuid v1.2.1
|
github.com/pborman/uuid v1.2.1
|
||||||
github.com/pelletier/go-toml v1.8.1 // indirect
|
github.com/pelletier/go-toml v1.8.1 // indirect
|
||||||
github.com/pierrec/lz4/v4 v4.1.2 // indirect
|
github.com/pierrec/lz4/v4 v4.1.3 // indirect
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/prometheus/client_golang v1.9.0
|
github.com/prometheus/client_golang v1.9.0
|
||||||
github.com/prometheus/client_model v0.2.0
|
github.com/prometheus/client_model v0.2.0
|
||||||
|
github.com/prometheus/procfs v0.3.0 // indirect
|
||||||
github.com/reflog/dateconstraints v0.2.1
|
github.com/reflog/dateconstraints v0.2.1
|
||||||
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
github.com/rs/cors v1.7.0
|
github.com/rs/cors v1.7.0
|
||||||
github.com/rudderlabs/analytics-go v3.2.1+incompatible
|
github.com/rudderlabs/analytics-go v3.2.1+incompatible
|
||||||
github.com/russellhaering/goxmldsig v1.1.0
|
github.com/russellhaering/goxmldsig v1.1.0
|
||||||
@@ -99,14 +105,14 @@ require (
|
|||||||
github.com/spf13/cobra v1.1.1
|
github.com/spf13/cobra v1.1.1
|
||||||
github.com/splitio/go-client/v6 v6.0.1
|
github.com/splitio/go-client/v6 v6.0.1
|
||||||
github.com/stretchr/objx v0.3.0 // indirect
|
github.com/stretchr/objx v0.3.0 // indirect
|
||||||
github.com/stretchr/testify v1.6.1
|
github.com/stretchr/testify v1.7.0
|
||||||
github.com/throttled/throttled v2.2.5+incompatible
|
github.com/throttled/throttled v2.2.5+incompatible
|
||||||
github.com/tinylib/msgp v1.1.5
|
github.com/tinylib/msgp v1.1.5
|
||||||
github.com/tylerb/graceful v1.2.15
|
github.com/tylerb/graceful v1.2.15
|
||||||
github.com/uber/jaeger-client-go v2.25.0+incompatible
|
github.com/uber/jaeger-client-go v2.25.0+incompatible
|
||||||
github.com/uber/jaeger-lib v2.4.0+incompatible
|
github.com/uber/jaeger-lib v2.4.0+incompatible
|
||||||
github.com/ulikunitz/xz v0.5.9 // indirect
|
github.com/ulikunitz/xz v0.5.9 // indirect
|
||||||
github.com/vmihailenco/msgpack/v5 v5.1.1
|
github.com/vmihailenco/msgpack/v5 v5.1.4
|
||||||
github.com/wiggin77/merror v1.0.3
|
github.com/wiggin77/merror v1.0.3
|
||||||
github.com/wiggin77/srslog v1.0.1
|
github.com/wiggin77/srslog v1.0.1
|
||||||
github.com/willf/bitset v1.1.11 // indirect
|
github.com/willf/bitset v1.1.11 // indirect
|
||||||
@@ -115,20 +121,19 @@ require (
|
|||||||
go.uber.org/zap v1.16.0
|
go.uber.org/zap v1.16.0
|
||||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
|
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
|
||||||
golang.org/x/image v0.0.0-20201208152932-35266b937fa6
|
golang.org/x/image v0.0.0-20201208152932-35266b937fa6
|
||||||
golang.org/x/mod v0.4.0 // indirect
|
golang.org/x/mod v0.4.1 // indirect
|
||||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b
|
golang.org/x/net v0.0.0-20210119194325-5f4716e94777
|
||||||
golang.org/x/sys v0.0.0-20201223074533-0d417f636930 // indirect
|
golang.org/x/text v0.3.5
|
||||||
golang.org/x/text v0.3.4
|
golang.org/x/tools v0.1.0
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e
|
google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc // indirect
|
||||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d // indirect
|
google.golang.org/grpc v1.35.0 // indirect
|
||||||
google.golang.org/grpc v1.34.0 // indirect
|
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
gopkg.in/ini.v1 v1.62.0 // indirect
|
gopkg.in/ini.v1 v1.62.0 // indirect
|
||||||
gopkg.in/mail.v2 v2.3.1
|
gopkg.in/mail.v2 v2.3.1
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
||||||
gopkg.in/olivere/elastic.v6 v6.2.35
|
gopkg.in/olivere/elastic.v6 v6.2.35
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3 // indirect
|
honnef.co/go/tools v0.0.1-2020.1.3 // indirect
|
||||||
willnorris.com/go/imageproxy v0.10.0
|
willnorris.com/go/imageproxy v0.10.0
|
||||||
)
|
)
|
||||||
|
|||||||
92
go.sum
92
go.sum
@@ -52,8 +52,8 @@ github.com/PuerkitoBio/goquery v1.4.1 h1:smcIRGdYm/w7JSbcdeLHEMzxmsBQvl8lhf0dSw2
|
|||||||
github.com/PuerkitoBio/goquery v1.4.1/go.mod h1:T9ezsOHcCrDCgA8aF1Cqr3sSYbO/xgdy8/R/XiIMAhA=
|
github.com/PuerkitoBio/goquery v1.4.1/go.mod h1:T9ezsOHcCrDCgA8aF1Cqr3sSYbO/xgdy8/R/XiIMAhA=
|
||||||
github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE=
|
github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE=
|
||||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||||
github.com/PuerkitoBio/goquery v1.6.0 h1:j7taAbelrdcsOlGeMenZxc2AWXD5fieT1/znArdnx94=
|
github.com/PuerkitoBio/goquery v1.6.1 h1:FgjbQZKl5HTmcn4sKBgvx8vv63nhyhIpv7lJpFGCWpk=
|
||||||
github.com/PuerkitoBio/goquery v1.6.0/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/PuerkitoBio/goquery v1.6.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||||
github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
|
github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
|
||||||
github.com/RoaringBitmap/roaring v0.5.5 h1:naNqvO1mNnghk2UvcsqnzHDBn9DRbCIRy94GmDTRVTQ=
|
github.com/RoaringBitmap/roaring v0.5.5 h1:naNqvO1mNnghk2UvcsqnzHDBn9DRbCIRy94GmDTRVTQ=
|
||||||
github.com/RoaringBitmap/roaring v0.5.5/go.mod h1:puNo5VdzwbaIQxSiDIwfXl4Hnc+fbovcX4IW/dSTtUk=
|
github.com/RoaringBitmap/roaring v0.5.5/go.mod h1:puNo5VdzwbaIQxSiDIwfXl4Hnc+fbovcX4IW/dSTtUk=
|
||||||
@@ -97,8 +97,8 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
|
|||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
|
||||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||||
github.com/armon/go-metrics v0.3.5 h1:uq4txK6NAUvLQ60rotN+K+JuTnf3XP4TdQmcs9ma5mk=
|
github.com/armon/go-metrics v0.3.6 h1:x/tmtOF9cDBoXH7XoAGOz2qqm1DknFD1590XmD/DUJ8=
|
||||||
github.com/armon/go-metrics v0.3.5/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
github.com/armon/go-metrics v0.3.6/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
|
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
|
||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 h1:9h8f71kuF1pqovnn9h7LTHLEjxzyQaj0j1rQq5nsMM4=
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 h1:9h8f71kuF1pqovnn9h7LTHLEjxzyQaj0j1rQq5nsMM4=
|
||||||
@@ -106,8 +106,8 @@ github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1/go.mod h1:noBAuukeYO
|
|||||||
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
|
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
|
||||||
github.com/aws/aws-sdk-go v1.19.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.19.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/aws/aws-sdk-go v1.36.15 h1:nGqgPlXegCKPZOKXvWnYCLvLPJPRoSOHHn9d0N0DG7Y=
|
github.com/aws/aws-sdk-go v1.36.29 h1:lM1G3AF1+7vzFm0n7hfH8r2+750BTo+6Lo6FtPB7kzk=
|
||||||
github.com/aws/aws-sdk-go v1.36.15/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
github.com/aws/aws-sdk-go v1.36.29/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||||
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
|
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
|
||||||
github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
|
github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
|
||||||
@@ -160,7 +160,7 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
|
|||||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||||
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||||
@@ -224,7 +224,7 @@ github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZi
|
|||||||
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
|
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
|
||||||
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0=
|
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0=
|
||||||
@@ -286,11 +286,13 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG
|
|||||||
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
|
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
|
||||||
github.com/go-redis/redis/v8 v8.0.0 h1:PC0VsF9sFFd2sko5bu30aEFc8F1TKl6n65o0b8FnCIE=
|
github.com/go-redis/redis/v8 v8.0.0 h1:PC0VsF9sFFd2sko5bu30aEFc8F1TKl6n65o0b8FnCIE=
|
||||||
github.com/go-redis/redis/v8 v8.0.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo=
|
github.com/go-redis/redis/v8 v8.0.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo=
|
||||||
github.com/go-redis/redis/v8 v8.4.4 h1:fGqgxCTR1sydaKI00oQf3OmkU/DIe/I/fYXvGklCIuc=
|
github.com/go-redis/redis/v8 v8.4.9 h1:ixEQSxNnzo6zh/dmoZIHl9DmyX3mHV5a2p6OasPR93k=
|
||||||
github.com/go-redis/redis/v8 v8.4.4/go.mod h1:nA0bQuF0i5JFx4Ta9RZxGKXFrQ8cRWntra97f0196iY=
|
github.com/go-redis/redis/v8 v8.4.9/go.mod h1:d5yY/TlkQyYBSBHnXUmnf1OrHbyQere5JV4dLKwvXmo=
|
||||||
github.com/go-resty/resty/v2 v2.0.0/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
|
github.com/go-resty/resty/v2 v2.0.0/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
|
||||||
github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So=
|
github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So=
|
||||||
github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
|
github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
|
||||||
|
github.com/go-resty/resty/v2 v2.4.0 h1:s6TItTLejEI+2mn98oijC5w/Rk2YU+OA6x0mnZN6r6k=
|
||||||
|
github.com/go-resty/resty/v2 v2.4.0/go.mod h1:B88+xCTEwvfD94NOuE6GS1wMlnoKNY8eEiNizfNwOwA=
|
||||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
@@ -355,6 +357,8 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
|||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
|
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I=
|
||||||
|
github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
|
github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg=
|
github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
@@ -502,8 +506,8 @@ github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0
|
|||||||
github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||||
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/klauspost/compress v1.10.11/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
github.com/klauspost/compress v1.10.11/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/klauspost/compress v1.11.4 h1:kz40R/YWls3iqT9zX9AHN3WoVsrAWVyui5sxuLqiXqU=
|
github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg=
|
||||||
github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
@@ -581,6 +585,8 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp
|
|||||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
||||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
|
github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg=
|
||||||
|
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||||
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
@@ -600,10 +606,11 @@ github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
|
|||||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
||||||
github.com/minio/md5-simd v1.1.1 h1:9ojcLbuZ4gXbB2sX53MKn8JUZ0sB/2wfwsEcRw+I08U=
|
github.com/minio/md5-simd v1.1.1 h1:9ojcLbuZ4gXbB2sX53MKn8JUZ0sB/2wfwsEcRw+I08U=
|
||||||
github.com/minio/md5-simd v1.1.1/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
github.com/minio/md5-simd v1.1.1/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
||||||
github.com/minio/minio-go/v7 v7.0.6 h1:9czXaG0LEZ9s74smSqy0rm034MxngQoP6HTTuSc5GEs=
|
github.com/minio/minio-go/v7 v7.0.7 h1:Qld/xb8C1Pwbu0jU46xAceyn9xXKCMW+3XfNbpmTB70=
|
||||||
github.com/minio/minio-go/v7 v7.0.6/go.mod h1:HcIuq+11d/3MfavIPZiswSzfQ1VJ2Lwxp/XLtW46IWQ=
|
github.com/minio/minio-go/v7 v7.0.7/go.mod h1:pEZBUa+L2m9oECoIA6IcSK8bv/qggtQVLovjeKK5jYc=
|
||||||
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
|
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
|
||||||
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
||||||
|
github.com/minio/sio v0.2.1/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw=
|
||||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
@@ -692,10 +699,16 @@ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh
|
|||||||
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
||||||
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95 h1:+OLn68pqasWca0z5ryit9KGfp3sUsW4Lqg32iRMJyzs=
|
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95 h1:+OLn68pqasWca0z5ryit9KGfp3sUsW4Lqg32iRMJyzs=
|
||||||
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
||||||
|
github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI=
|
||||||
|
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
|
||||||
github.com/otiai10/gosseract/v2 v2.2.4 h1:h/PV+oJqke8q2Ccw9bjpMBWfd7N2vtGDCUcihZj3nRo=
|
github.com/otiai10/gosseract/v2 v2.2.4 h1:h/PV+oJqke8q2Ccw9bjpMBWfd7N2vtGDCUcihZj3nRo=
|
||||||
github.com/otiai10/gosseract/v2 v2.2.4/go.mod h1:ahOp/kHojnOMGv1RaUnR0jwY5JVa6BYKhYAS8nbMLSo=
|
github.com/otiai10/gosseract/v2 v2.2.4/go.mod h1:ahOp/kHojnOMGv1RaUnR0jwY5JVa6BYKhYAS8nbMLSo=
|
||||||
|
github.com/otiai10/gosseract/v2 v2.3.1 h1:BFy9Rru7dzqEYX7/tJuEvjVPkkJck0f+b5fYzzr6/RM=
|
||||||
|
github.com/otiai10/gosseract/v2 v2.3.1/go.mod h1:2ZOGgdTIXQzCS5f+N1HkcXRgDX6K3ZoYe3Yvo++cpp4=
|
||||||
github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc=
|
github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc=
|
||||||
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
|
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
|
||||||
|
github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E=
|
||||||
|
github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
|
||||||
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
|
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
|
||||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||||
@@ -717,8 +730,8 @@ github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM
|
|||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||||
github.com/pierrec/lz4/v4 v4.0.3 h1:vNQKSVZNYUEAvRY9FaUXAF1XPbSOHJtDTiP41kzDz2E=
|
github.com/pierrec/lz4/v4 v4.0.3 h1:vNQKSVZNYUEAvRY9FaUXAF1XPbSOHJtDTiP41kzDz2E=
|
||||||
github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||||
github.com/pierrec/lz4/v4 v4.1.2 h1:qvY3YFXRQE/XB8MlLzJH7mSzBs74eA2gg52YTk6jUPM=
|
github.com/pierrec/lz4/v4 v4.1.3 h1:/dvQpkb0o1pVlSgKNQqfkavlnXaIK+hJ0LXsKRUN9D4=
|
||||||
github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
github.com/pierrec/lz4/v4 v4.1.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||||
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
|
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
|
||||||
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
|
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
@@ -767,6 +780,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx
|
|||||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||||
github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
|
github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
|
||||||
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||||
|
github.com/prometheus/procfs v0.3.0 h1:Uehi/mxLK0eiUc0H0++5tpMGTexB8wZ598MIgU8VpDM=
|
||||||
|
github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
@@ -774,6 +789,10 @@ github.com/reflog/dateconstraints v0.2.1 h1:Hz1n2Q1vEm0Rj5gciDQcCN1iPBwfFjxUJy32
|
|||||||
github.com/reflog/dateconstraints v0.2.1/go.mod h1:Ax8AxTBcJc3E/oVS2hd2j7RDM/5MDtuPwuR7lIHtPLo=
|
github.com/reflog/dateconstraints v0.2.1/go.mod h1:Ax8AxTBcJc3E/oVS2hd2j7RDM/5MDtuPwuR7lIHtPLo=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY=
|
||||||
|
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
|
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
|
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
|
||||||
@@ -876,6 +895,8 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
|
|||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||||
@@ -916,8 +937,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU
|
|||||||
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
|
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
|
||||||
github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
|
github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
|
||||||
github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
|
github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
|
||||||
github.com/vmihailenco/msgpack/v5 v5.1.1 h1:FPebVyMovEFQuvSbKhvCeyAoYh5yAsQwL+yFlB75TP4=
|
github.com/vmihailenco/msgpack/v5 v5.1.4 h1:6K44/cU6dMNGkVTGGuu7ef2NdSRFMhAFGGLfE3cqtHM=
|
||||||
github.com/vmihailenco/msgpack/v5 v5.1.1/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI=
|
github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI=
|
||||||
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
|
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
|
||||||
github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
|
github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
|
||||||
github.com/wiggin77/cfg v1.0.2 h1:NBUX+iJRr+RTncTqTNvajHwzduqbhCQjEqxLHr6Fk7A=
|
github.com/wiggin77/cfg v1.0.2 h1:NBUX+iJRr+RTncTqTNvajHwzduqbhCQjEqxLHr6Fk7A=
|
||||||
@@ -962,8 +983,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
|||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.opentelemetry.io/otel v0.11.0 h1:IN2tzQa9Gc4ZVKnTaMbPVcHjvzOdg5n9QfnmlqiET7E=
|
go.opentelemetry.io/otel v0.11.0 h1:IN2tzQa9Gc4ZVKnTaMbPVcHjvzOdg5n9QfnmlqiET7E=
|
||||||
go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0=
|
go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0=
|
||||||
go.opentelemetry.io/otel v0.15.0 h1:CZFy2lPhxd4HlhZnYK8gRyDotksO3Ip9rBweY1vVYJw=
|
go.opentelemetry.io/otel v0.16.0 h1:uIWEbdeb4vpKPGITLsRVUS44L5oDbDUCZxn8lkxhmgw=
|
||||||
go.opentelemetry.io/otel v0.15.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
|
go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
|
||||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
@@ -990,6 +1011,7 @@ golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnf
|
|||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
|
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
|
||||||
@@ -1032,8 +1054,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
|
|||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
|
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
|
||||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8=
|
golang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY=
|
||||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -1074,6 +1096,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
|
|||||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
|
||||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
|
||||||
|
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
@@ -1138,8 +1162,8 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201223074533-0d417f636930 h1:vRgIt+nup/B/BwIS0g2oC0haq0iqbV3ZA+u6+0TlNCo=
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
||||||
golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@@ -1147,8 +1171,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
|
|||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
|
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@@ -1188,8 +1212,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
|
|||||||
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
|
golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
|
||||||
golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e h1:4nW4NLDYnU28ojHaHO8OVxFHk/aQ33U01a9cjED+pzE=
|
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@@ -1230,8 +1254,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
|
|||||||
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
||||||
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes=
|
google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc h1:tsmkSntchraIEmbGgYaZGZ8LVIidKCWEmPwEnSQSalA=
|
||||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
||||||
@@ -1249,8 +1273,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
|
|||||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=
|
google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=
|
||||||
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
|
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
@@ -1305,8 +1329,8 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
|||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
|
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|||||||
27
vendor/github.com/PuerkitoBio/goquery/.travis.yml
сгенерированный
поставляемый
27
vendor/github.com/PuerkitoBio/goquery/.travis.yml
сгенерированный
поставляемый
@@ -1,3 +1,6 @@
|
|||||||
|
arch:
|
||||||
|
- amd64
|
||||||
|
- ppc64le
|
||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
@@ -15,3 +18,27 @@ go:
|
|||||||
- 1.13.x
|
- 1.13.x
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
exclude:
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.2.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.3.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.4.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.5.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.6.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.7.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.8.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.9.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.10.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.11.x
|
||||||
|
- arch: ppc64le
|
||||||
|
go: 1.12.x
|
||||||
|
|||||||
2
vendor/github.com/PuerkitoBio/goquery/README.md
сгенерированный
поставляемый
2
vendor/github.com/PuerkitoBio/goquery/README.md
сгенерированный
поставляемый
@@ -37,6 +37,7 @@ Please note that because of the net/html dependency, goquery requires Go1.1+.
|
|||||||
|
|
||||||
**Note that goquery's API is now stable, and will not break.**
|
**Note that goquery's API is now stable, and will not break.**
|
||||||
|
|
||||||
|
* **2021-01-11 (v1.6.1)** : Fix panic when calling `{Prepend,Append,Set}Html` on a `Selection` that contains non-Element nodes.
|
||||||
* **2020-10-08 (v1.6.0)** : Parse html in context of the container node for all functions that deal with html strings (`AfterHtml`, `AppendHtml`, etc.). Thanks to [@thiemok][thiemok] and [@davidjwilkins][djw] for their work on this.
|
* **2020-10-08 (v1.6.0)** : Parse html in context of the container node for all functions that deal with html strings (`AfterHtml`, `AppendHtml`, etc.). Thanks to [@thiemok][thiemok] and [@davidjwilkins][djw] for their work on this.
|
||||||
* **2020-02-04 (v1.5.1)** : Update module dependencies.
|
* **2020-02-04 (v1.5.1)** : Update module dependencies.
|
||||||
* **2018-11-15 (v1.5.0)** : Go module support (thanks @Zaba505).
|
* **2018-11-15 (v1.5.0)** : Go module support (thanks @Zaba505).
|
||||||
@@ -147,6 +148,7 @@ func main() {
|
|||||||
- [Dataflow kit](https://github.com/slotix/dataflowkit), Web Scraping framework for Gophers.
|
- [Dataflow kit](https://github.com/slotix/dataflowkit), Web Scraping framework for Gophers.
|
||||||
- [Geziyor](https://github.com/geziyor/geziyor), a fast web crawling & scraping framework for Go. Supports JS rendering.
|
- [Geziyor](https://github.com/geziyor/geziyor), a fast web crawling & scraping framework for Go. Supports JS rendering.
|
||||||
- [Pagser](https://github.com/foolin/pagser), a simple, easy, extensible, configurable HTML parser to struct based on goquery and struct tags.
|
- [Pagser](https://github.com/foolin/pagser), a simple, easy, extensible, configurable HTML parser to struct based on goquery and struct tags.
|
||||||
|
- [stitcherd](https://github.com/vhodges/stitcherd), A server for doing server side includes using css selectors and DOM updates.
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
|
|||||||
3
vendor/github.com/PuerkitoBio/goquery/manipulation.go
сгенерированный
поставляемый
3
vendor/github.com/PuerkitoBio/goquery/manipulation.go
сгенерированный
поставляемый
@@ -661,6 +661,9 @@ func (s *Selection) eachNodeHtml(htmlStr string, isParent bool, mergeFn func(n *
|
|||||||
if isParent {
|
if isParent {
|
||||||
context = n.Parent
|
context = n.Parent
|
||||||
} else {
|
} else {
|
||||||
|
if n.Type != html.ElementNode {
|
||||||
|
continue
|
||||||
|
}
|
||||||
context = n
|
context = n
|
||||||
}
|
}
|
||||||
if context != nil {
|
if context != nil {
|
||||||
|
|||||||
32
vendor/github.com/aws/aws-sdk-go/aws/config.go
сгенерированный
поставляемый
32
vendor/github.com/aws/aws-sdk-go/aws/config.go
сгенерированный
поставляемый
@@ -438,13 +438,6 @@ func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
// MergeIn merges the passed in configs into the existing config object.
|
|
||||||
func (c *Config) MergeIn(cfgs ...*Config) {
|
|
||||||
for _, other := range cfgs {
|
|
||||||
mergeInConfig(c, other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithSTSRegionalEndpoint will set whether or not to use regional endpoint flag
|
// WithSTSRegionalEndpoint will set whether or not to use regional endpoint flag
|
||||||
// when resolving the endpoint for a service
|
// when resolving the endpoint for a service
|
||||||
func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndpoint) *Config {
|
func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndpoint) *Config {
|
||||||
@@ -459,6 +452,27 @@ func (c *Config) WithS3UsEast1RegionalEndpoint(sre endpoints.S3UsEast1RegionalEn
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithLowerCaseHeaderMaps sets a config LowerCaseHeaderMaps value
|
||||||
|
// returning a Config pointer for chaining.
|
||||||
|
func (c *Config) WithLowerCaseHeaderMaps(t bool) *Config {
|
||||||
|
c.LowerCaseHeaderMaps = &t
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDisableRestProtocolURICleaning sets a config DisableRestProtocolURICleaning value
|
||||||
|
// returning a Config pointer for chaining.
|
||||||
|
func (c *Config) WithDisableRestProtocolURICleaning(t bool) *Config {
|
||||||
|
c.DisableRestProtocolURICleaning = &t
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
// MergeIn merges the passed in configs into the existing config object.
|
||||||
|
func (c *Config) MergeIn(cfgs ...*Config) {
|
||||||
|
for _, other := range cfgs {
|
||||||
|
mergeInConfig(c, other)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func mergeInConfig(dst *Config, other *Config) {
|
func mergeInConfig(dst *Config, other *Config) {
|
||||||
if other == nil {
|
if other == nil {
|
||||||
return
|
return
|
||||||
@@ -571,6 +585,10 @@ func mergeInConfig(dst *Config, other *Config) {
|
|||||||
if other.S3UsEast1RegionalEndpoint != endpoints.UnsetS3UsEast1Endpoint {
|
if other.S3UsEast1RegionalEndpoint != endpoints.UnsetS3UsEast1Endpoint {
|
||||||
dst.S3UsEast1RegionalEndpoint = other.S3UsEast1RegionalEndpoint
|
dst.S3UsEast1RegionalEndpoint = other.S3UsEast1RegionalEndpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if other.LowerCaseHeaderMaps != nil {
|
||||||
|
dst.LowerCaseHeaderMaps = other.LowerCaseHeaderMaps
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy will return a shallow copy of the Config object. If any additional
|
// Copy will return a shallow copy of the Config object. If any additional
|
||||||
|
|||||||
12
vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
сгенерированный
поставляемый
12
vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
сгенерированный
поставляемый
@@ -244,9 +244,11 @@ type AssumeRoleProvider struct {
|
|||||||
MaxJitterFrac float64
|
MaxJitterFrac float64
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCredentials returns a pointer to a new Credentials object wrapping the
|
// NewCredentials returns a pointer to a new Credentials value wrapping the
|
||||||
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
|
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
|
||||||
// role will be named after a nanosecond timestamp of this operation.
|
// role will be named after a nanosecond timestamp of this operation. The
|
||||||
|
// Credentials value will attempt to refresh the credentials using the provider
|
||||||
|
// when Credentials.Get is called, if the cached credentials are expiring.
|
||||||
//
|
//
|
||||||
// Takes a Config provider to create the STS client. The ConfigProvider is
|
// Takes a Config provider to create the STS client. The ConfigProvider is
|
||||||
// satisfied by the session.Session type.
|
// satisfied by the session.Session type.
|
||||||
@@ -268,9 +270,11 @@ func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*As
|
|||||||
return credentials.NewCredentials(p)
|
return credentials.NewCredentials(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping the
|
// NewCredentialsWithClient returns a pointer to a new Credentials value wrapping the
|
||||||
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
|
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
|
||||||
// role will be named after a nanosecond timestamp of this operation.
|
// role will be named after a nanosecond timestamp of this operation. The
|
||||||
|
// Credentials value will attempt to refresh the credentials using the provider
|
||||||
|
// when Credentials.Get is called, if the cached credentials are expiring.
|
||||||
//
|
//
|
||||||
// Takes an AssumeRoler which can be satisfied by the STS client.
|
// Takes an AssumeRoler which can be satisfied by the STS client.
|
||||||
//
|
//
|
||||||
|
|||||||
76
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
сгенерированный
поставляемый
76
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
сгенерированный
поставляемый
@@ -380,9 +380,33 @@ var awsPartition = partition{
|
|||||||
"me-south-1": endpoint{},
|
"me-south-1": endpoint{},
|
||||||
"sa-east-1": endpoint{},
|
"sa-east-1": endpoint{},
|
||||||
"us-east-1": endpoint{},
|
"us-east-1": endpoint{},
|
||||||
"us-east-2": endpoint{},
|
"us-east-1-fips": endpoint{
|
||||||
"us-west-1": endpoint{},
|
Hostname: "api.detective-fips.us-east-1.amazonaws.com",
|
||||||
"us-west-2": endpoint{},
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-east-1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"us-east-2": endpoint{},
|
||||||
|
"us-east-2-fips": endpoint{
|
||||||
|
Hostname: "api.detective-fips.us-east-2.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-east-2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"us-west-1": endpoint{},
|
||||||
|
"us-west-1-fips": endpoint{
|
||||||
|
Hostname: "api.detective-fips.us-west-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-west-1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"us-west-2": endpoint{},
|
||||||
|
"us-west-2-fips": endpoint{
|
||||||
|
Hostname: "api.detective-fips.us-west-2.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-west-2",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"api.ecr": service{
|
"api.ecr": service{
|
||||||
@@ -581,6 +605,12 @@ var awsPartition = partition{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"api.fleethub.iot": service{
|
||||||
|
|
||||||
|
Endpoints: endpoints{
|
||||||
|
"us-east-1": endpoint{},
|
||||||
|
},
|
||||||
|
},
|
||||||
"api.mediatailor": service{
|
"api.mediatailor": service{
|
||||||
|
|
||||||
Endpoints: endpoints{
|
Endpoints: endpoints{
|
||||||
@@ -3059,11 +3089,41 @@ var awsPartition = partition{
|
|||||||
"eu-west-1": endpoint{},
|
"eu-west-1": endpoint{},
|
||||||
"eu-west-2": endpoint{},
|
"eu-west-2": endpoint{},
|
||||||
"eu-west-3": endpoint{},
|
"eu-west-3": endpoint{},
|
||||||
"sa-east-1": endpoint{},
|
"fips-prod-ca-central-1": endpoint{
|
||||||
"us-east-1": endpoint{},
|
Hostname: "fsx-fips.ca-central-1.amazonaws.com",
|
||||||
"us-east-2": endpoint{},
|
CredentialScope: credentialScope{
|
||||||
"us-west-1": endpoint{},
|
Region: "ca-central-1",
|
||||||
"us-west-2": endpoint{},
|
},
|
||||||
|
},
|
||||||
|
"fips-prod-us-east-1": endpoint{
|
||||||
|
Hostname: "fsx-fips.us-east-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-east-1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"fips-prod-us-east-2": endpoint{
|
||||||
|
Hostname: "fsx-fips.us-east-2.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-east-2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"fips-prod-us-west-1": endpoint{
|
||||||
|
Hostname: "fsx-fips.us-west-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-west-1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"fips-prod-us-west-2": endpoint{
|
||||||
|
Hostname: "fsx-fips.us-west-2.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-west-2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"sa-east-1": endpoint{},
|
||||||
|
"us-east-1": endpoint{},
|
||||||
|
"us-east-2": endpoint{},
|
||||||
|
"us-west-1": endpoint{},
|
||||||
|
"us-west-2": endpoint{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"gamelift": service{
|
"gamelift": service{
|
||||||
|
|||||||
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
сгенерированный
поставляемый
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
сгенерированный
поставляемый
@@ -5,4 +5,4 @@ package aws
|
|||||||
const SDKName = "aws-sdk-go"
|
const SDKName = "aws-sdk-go"
|
||||||
|
|
||||||
// SDKVersion is the version of this SDK
|
// SDKVersion is the version of this SDK
|
||||||
const SDKVersion = "1.36.15"
|
const SDKVersion = "1.36.29"
|
||||||
|
|||||||
44
vendor/github.com/aws/aws-sdk-go/private/protocol/host.go
сгенерированный
поставляемый
44
vendor/github.com/aws/aws-sdk-go/private/protocol/host.go
сгенерированный
поставляемый
@@ -1,9 +1,10 @@
|
|||||||
package protocol
|
package protocol
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"net"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ValidateEndpointHostHandler is a request handler that will validate the
|
// ValidateEndpointHostHandler is a request handler that will validate the
|
||||||
@@ -22,8 +23,26 @@ var ValidateEndpointHostHandler = request.NamedHandler{
|
|||||||
// 3986 host. Returns error if the host is not valid.
|
// 3986 host. Returns error if the host is not valid.
|
||||||
func ValidateEndpointHost(opName, host string) error {
|
func ValidateEndpointHost(opName, host string) error {
|
||||||
paramErrs := request.ErrInvalidParams{Context: opName}
|
paramErrs := request.ErrInvalidParams{Context: opName}
|
||||||
labels := strings.Split(host, ".")
|
|
||||||
|
|
||||||
|
var hostname string
|
||||||
|
var port string
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if strings.Contains(host, ":") {
|
||||||
|
hostname, port, err = net.SplitHostPort(host)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
paramErrs.Add(request.NewErrParamFormat("endpoint", err.Error(), host))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !ValidPortNumber(port) {
|
||||||
|
paramErrs.Add(request.NewErrParamFormat("endpoint port number", "[0-65535]", port))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hostname = host
|
||||||
|
}
|
||||||
|
|
||||||
|
labels := strings.Split(hostname, ".")
|
||||||
for i, label := range labels {
|
for i, label := range labels {
|
||||||
if i == len(labels)-1 && len(label) == 0 {
|
if i == len(labels)-1 && len(label) == 0 {
|
||||||
// Allow trailing dot for FQDN hosts.
|
// Allow trailing dot for FQDN hosts.
|
||||||
@@ -36,7 +55,11 @@ func ValidateEndpointHost(opName, host string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(host) > 255 {
|
if len(hostname) == 0 {
|
||||||
|
paramErrs.Add(request.NewErrParamMinLen("endpoint host", 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(hostname) > 255 {
|
||||||
paramErrs.Add(request.NewErrParamMaxLen(
|
paramErrs.Add(request.NewErrParamMaxLen(
|
||||||
"endpoint host", 255, host,
|
"endpoint host", 255, host,
|
||||||
))
|
))
|
||||||
@@ -66,3 +89,16 @@ func ValidHostLabel(label string) bool {
|
|||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ValidPortNumber return if the port is valid RFC 3986 port
|
||||||
|
func ValidPortNumber(port string) bool {
|
||||||
|
i, err := strconv.Atoi(port)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if i < 0 || i > 65535 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|||||||
21
vendor/github.com/go-redis/redis/v8/README.md
сгенерированный
поставляемый
21
vendor/github.com/go-redis/redis/v8/README.md
сгенерированный
поставляемый
@@ -129,6 +129,27 @@ vals, err := rdb.Eval(ctx, "return {KEYS[1],ARGV[1]}", []string{"key"}, "hello")
|
|||||||
// custom command
|
// custom command
|
||||||
res, err := rdb.Do(ctx, "set", "key", "value").Result()
|
res, err := rdb.Do(ctx, "set", "key", "value").Result()
|
||||||
```
|
```
|
||||||
|
## Run the test
|
||||||
|
go-redis will start a redis-server and run the test cases.
|
||||||
|
|
||||||
|
The paths of redis-server bin file and redis config file are definded in `main_test.go`:
|
||||||
|
```
|
||||||
|
var (
|
||||||
|
redisServerBin, _ = filepath.Abs(filepath.Join("testdata", "redis", "src", "redis-server"))
|
||||||
|
redisServerConf, _ = filepath.Abs(filepath.Join("testdata", "redis", "redis.conf"))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
For local testing, you can change the variables to refer to your local files, or create a soft link to the corresponding folder for redis-server and copy the config file to `testdata/redis/`:
|
||||||
|
```
|
||||||
|
ln -s /usr/bin/redis-server ./go-redis/testdata/redis/src
|
||||||
|
cp ./go-redis/testdata/redis.conf ./go-redis/testdata/redis/
|
||||||
|
```
|
||||||
|
|
||||||
|
Lastly, run:
|
||||||
|
```
|
||||||
|
go test
|
||||||
|
```
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
|
|||||||
16
vendor/github.com/go-redis/redis/v8/cluster.go
сгенерированный
поставляемый
16
vendor/github.com/go-redis/redis/v8/cluster.go
сгенерированный
поставляемый
@@ -86,7 +86,7 @@ func (opt *ClusterOptions) init() {
|
|||||||
opt.MaxRedirects = 3
|
opt.MaxRedirects = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.RouteByLatency || opt.RouteRandomly) && opt.ClusterSlots == nil {
|
if opt.RouteByLatency || opt.RouteRandomly {
|
||||||
opt.ReadOnly = true
|
opt.ReadOnly = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,9 +153,13 @@ func (opt *ClusterOptions) clientOptions() *Options {
|
|||||||
IdleTimeout: opt.IdleTimeout,
|
IdleTimeout: opt.IdleTimeout,
|
||||||
IdleCheckFrequency: disableIdleCheck,
|
IdleCheckFrequency: disableIdleCheck,
|
||||||
|
|
||||||
readOnly: opt.ReadOnly,
|
|
||||||
|
|
||||||
TLSConfig: opt.TLSConfig,
|
TLSConfig: opt.TLSConfig,
|
||||||
|
// If ClusterSlots is populated, then we probably have an artificial
|
||||||
|
// cluster whose nodes are not in clustering mode (otherwise there isn't
|
||||||
|
// much use for ClusterSlots config). This means we cannot execute the
|
||||||
|
// READONLY command against that node -- setting readOnly to false in such
|
||||||
|
// situations in the options below will prevent that from happening.
|
||||||
|
readOnly: opt.ReadOnly && opt.ClusterSlots == nil,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1252,10 +1256,13 @@ func (c *ClusterClient) TxPipelined(ctx context.Context, fn func(Pipeliner) erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *ClusterClient) processTxPipeline(ctx context.Context, cmds []Cmder) error {
|
func (c *ClusterClient) processTxPipeline(ctx context.Context, cmds []Cmder) error {
|
||||||
return c.hooks.processPipeline(ctx, cmds, c._processTxPipeline)
|
return c.hooks.processTxPipeline(ctx, cmds, c._processTxPipeline)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ClusterClient) _processTxPipeline(ctx context.Context, cmds []Cmder) error {
|
func (c *ClusterClient) _processTxPipeline(ctx context.Context, cmds []Cmder) error {
|
||||||
|
// Trim multi .. exec.
|
||||||
|
cmds = cmds[1 : len(cmds)-1]
|
||||||
|
|
||||||
state, err := c.state.Get(ctx)
|
state, err := c.state.Get(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setCmdsErr(cmds, err)
|
setCmdsErr(cmds, err)
|
||||||
@@ -1291,6 +1298,7 @@ func (c *ClusterClient) _processTxPipeline(ctx context.Context, cmds []Cmder) er
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if attempt < c.opt.MaxRedirects {
|
if attempt < c.opt.MaxRedirects {
|
||||||
if err := c.mapCmdsByNode(ctx, failedCmds, cmds); err != nil {
|
if err := c.mapCmdsByNode(ctx, failedCmds, cmds); err != nil {
|
||||||
setCmdsErr(cmds, err)
|
setCmdsErr(cmds, err)
|
||||||
|
|||||||
17
vendor/github.com/go-redis/redis/v8/commands.go
сгенерированный
поставляемый
17
vendor/github.com/go-redis/redis/v8/commands.go
сгенерированный
поставляемый
@@ -141,6 +141,7 @@ type Cmdable interface {
|
|||||||
BitField(ctx context.Context, key string, args ...interface{}) *IntSliceCmd
|
BitField(ctx context.Context, key string, args ...interface{}) *IntSliceCmd
|
||||||
|
|
||||||
Scan(ctx context.Context, cursor uint64, match string, count int64) *ScanCmd
|
Scan(ctx context.Context, cursor uint64, match string, count int64) *ScanCmd
|
||||||
|
ScanType(ctx context.Context, cursor uint64, match string, count int64, keyType string) *ScanCmd
|
||||||
SScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
SScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
||||||
HScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
HScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
||||||
ZScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
ZScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
||||||
@@ -965,6 +966,22 @@ func (c cmdable) Scan(ctx context.Context, cursor uint64, match string, count in
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c cmdable) ScanType(ctx context.Context, cursor uint64, match string, count int64, keyType string) *ScanCmd {
|
||||||
|
args := []interface{}{"scan", cursor}
|
||||||
|
if match != "" {
|
||||||
|
args = append(args, "match", match)
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
args = append(args, "count", count)
|
||||||
|
}
|
||||||
|
if keyType != "" {
|
||||||
|
args = append(args, "type", keyType)
|
||||||
|
}
|
||||||
|
cmd := NewScanCmd(ctx, c, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
func (c cmdable) SScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd {
|
func (c cmdable) SScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd {
|
||||||
args := []interface{}{"sscan", key, cursor}
|
args := []interface{}{"sscan", key, cursor}
|
||||||
if match != "" {
|
if match != "" {
|
||||||
|
|||||||
4
vendor/github.com/go-redis/redis/v8/go.mod
сгенерированный
поставляемый
4
vendor/github.com/go-redis/redis/v8/go.mod
сгенерированный
поставляемый
@@ -1,11 +1,11 @@
|
|||||||
module github.com/go-redis/redis/v8
|
module github.com/go-redis/redis/v8
|
||||||
|
|
||||||
go 1.11
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cespare/xxhash/v2 v2.1.1
|
github.com/cespare/xxhash/v2 v2.1.1
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
|
||||||
github.com/onsi/ginkgo v1.14.2
|
github.com/onsi/ginkgo v1.14.2
|
||||||
github.com/onsi/gomega v1.10.4
|
github.com/onsi/gomega v1.10.4
|
||||||
go.opentelemetry.io/otel v0.15.0
|
go.opentelemetry.io/otel v0.16.0
|
||||||
)
|
)
|
||||||
|
|||||||
4
vendor/github.com/go-redis/redis/v8/go.sum
сгенерированный
поставляемый
4
vendor/github.com/go-redis/redis/v8/go.sum
сгенерированный
поставляемый
@@ -36,8 +36,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
go.opentelemetry.io/otel v0.15.0 h1:CZFy2lPhxd4HlhZnYK8gRyDotksO3Ip9rBweY1vVYJw=
|
go.opentelemetry.io/otel v0.16.0 h1:uIWEbdeb4vpKPGITLsRVUS44L5oDbDUCZxn8lkxhmgw=
|
||||||
go.opentelemetry.io/otel v0.15.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
|
go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
|||||||
1
vendor/github.com/go-redis/redis/v8/internal/pool/pool.go
сгенерированный
поставляемый
1
vendor/github.com/go-redis/redis/v8/internal/pool/pool.go
сгенерированный
поставляемый
@@ -477,6 +477,7 @@ func (p *ConnPool) ReapStaleConns() (int, error) {
|
|||||||
p.connsMu.Lock()
|
p.connsMu.Lock()
|
||||||
cn := p.reapStaleConn()
|
cn := p.reapStaleConn()
|
||||||
p.connsMu.Unlock()
|
p.connsMu.Unlock()
|
||||||
|
|
||||||
p.freeTurn()
|
p.freeTurn()
|
||||||
|
|
||||||
if cn != nil {
|
if cn != nil {
|
||||||
|
|||||||
2
vendor/github.com/go-redis/redis/v8/options.go
сгенерированный
поставляемый
2
vendor/github.com/go-redis/redis/v8/options.go
сгенерированный
поставляемый
@@ -58,7 +58,7 @@ type Options struct {
|
|||||||
DB int
|
DB int
|
||||||
|
|
||||||
// Maximum number of retries before giving up.
|
// Maximum number of retries before giving up.
|
||||||
// Default is 3 retries.
|
// Default is 3 retries; -1 (not 0) disables retries.
|
||||||
MaxRetries int
|
MaxRetries int
|
||||||
// Minimum backoff between each retry.
|
// Minimum backoff between each retry.
|
||||||
// Default is 8 milliseconds; -1 disables backoff.
|
// Default is 8 milliseconds; -1 disables backoff.
|
||||||
|
|||||||
1
vendor/github.com/go-resty/resty/v2/.gitignore
сгенерированный
поставляемый
1
vendor/github.com/go-resty/resty/v2/.gitignore
сгенерированный
поставляемый
@@ -25,7 +25,6 @@ _testmain.go
|
|||||||
|
|
||||||
coverage.out
|
coverage.out
|
||||||
coverage.txt
|
coverage.txt
|
||||||
go.sum
|
|
||||||
|
|
||||||
# Exclude intellij IDE folders
|
# Exclude intellij IDE folders
|
||||||
.idea/*
|
.idea/*
|
||||||
6
vendor/github.com/go-resty/resty/v2/.travis.yml
сгенерированный
поставляемый
6
vendor/github.com/go-resty/resty/v2/.travis.yml
сгенерированный
поставляемый
@@ -1,10 +1,10 @@
|
|||||||
language: go
|
language: go
|
||||||
|
|
||||||
sudo: false
|
os: linux
|
||||||
|
|
||||||
go: # use travis ci resource effectively, keep always latest 2 versions and tip :)
|
go: # use travis ci resource effectively, keep always latest 2 versions and tip :)
|
||||||
|
- 1.15.x
|
||||||
- 1.14.x
|
- 1.14.x
|
||||||
- 1.13.x
|
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
install:
|
install:
|
||||||
@@ -16,6 +16,6 @@ script:
|
|||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
|
|
||||||
matrix:
|
jobs:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- go: tip
|
- go: tip
|
||||||
|
|||||||
141
vendor/github.com/go-resty/resty/v2/README.md
сгенерированный
поставляемый
141
vendor/github.com/go-resty/resty/v2/README.md
сгенерированный
поставляемый
@@ -4,7 +4,7 @@
|
|||||||
<p align="center"><a href="#features">Features</a> section describes in detail about Resty capabilities</p>
|
<p align="center"><a href="#features">Features</a> section describes in detail about Resty capabilities</p>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<p align="center"><a href="https://travis-ci.org/go-resty/resty"><img src="https://travis-ci.org/go-resty/resty.svg?branch=master" alt="Build Status"></a> <a href="https://codecov.io/gh/go-resty/resty/branch/master"><img src="https://codecov.io/gh/go-resty/resty/branch/master/graph/badge.svg" alt="Code Coverage"></a> <a href="https://goreportcard.com/report/go-resty/resty"><img src="https://goreportcard.com/badge/go-resty/resty" alt="Go Report Card"></a> <a href="https://github.com/go-resty/resty/releases/latest"><img src="https://img.shields.io/badge/version-2.3.0-blue.svg" alt="Release Version"></a> <a href="https://pkg.go.dev/github.com/go-resty/resty/v2"><img src="https://godoc.org/github.com/go-resty/resty?status.svg" alt="GoDoc"></a> <a href="LICENSE"><img src="https://img.shields.io/github/license/go-resty/resty.svg" alt="License"></a> <a href="https://github.com/avelino/awesome-go"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Go"></a></p>
|
<p align="center"><a href="https://travis-ci.org/go-resty/resty"><img src="https://travis-ci.org/go-resty/resty.svg?branch=master" alt="Build Status"></a> <a href="https://codecov.io/gh/go-resty/resty/branch/master"><img src="https://codecov.io/gh/go-resty/resty/branch/master/graph/badge.svg" alt="Code Coverage"></a> <a href="https://goreportcard.com/report/go-resty/resty"><img src="https://goreportcard.com/badge/go-resty/resty" alt="Go Report Card"></a> <a href="https://github.com/go-resty/resty/releases/latest"><img src="https://img.shields.io/badge/version-2.4.0-blue.svg" alt="Release Version"></a> <a href="https://pkg.go.dev/github.com/go-resty/resty/v2"><img src="https://godoc.org/github.com/go-resty/resty?status.svg" alt="GoDoc"></a> <a href="LICENSE"><img src="https://img.shields.io/github/license/go-resty/resty.svg" alt="License"></a> <a href="https://github.com/avelino/awesome-go"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Go"></a></p>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<h4 align="center">Resty Communication Channels</h4>
|
<h4 align="center">Resty Communication Channels</h4>
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
## News
|
## News
|
||||||
|
|
||||||
|
* v2.4.0 [released](https://github.com/go-resty/resty/releases/tag/v2.4.0) and tagged on Jan 11, 2021.
|
||||||
* v2.3.0 [released](https://github.com/go-resty/resty/releases/tag/v2.3.0) and tagged on May 20, 2020.
|
* v2.3.0 [released](https://github.com/go-resty/resty/releases/tag/v2.3.0) and tagged on May 20, 2020.
|
||||||
* v2.0.0 [released](https://github.com/go-resty/resty/releases/tag/v2.0.0) and tagged on Jul 16, 2019.
|
* v2.0.0 [released](https://github.com/go-resty/resty/releases/tag/v2.0.0) and tagged on Jul 16, 2019.
|
||||||
* v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019.
|
* v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019.
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
* [Request](https://godoc.org/github.com/go-resty/resty#Request) Body can be `string`, `[]byte`, `struct`, `map`, `slice` and `io.Reader` too
|
* [Request](https://godoc.org/github.com/go-resty/resty#Request) Body can be `string`, `[]byte`, `struct`, `map`, `slice` and `io.Reader` too
|
||||||
* Auto detects `Content-Type`
|
* Auto detects `Content-Type`
|
||||||
* Buffer less processing for `io.Reader`
|
* Buffer less processing for `io.Reader`
|
||||||
|
* Native `*http.Request` instance may be accessed during middleware and request execution via `Request.RawRequest`
|
||||||
* Request Body can be read multiple times via `Request.RawRequest.GetBody()`
|
* Request Body can be read multiple times via `Request.RawRequest.GetBody()`
|
||||||
* [Response](https://godoc.org/github.com/go-resty/resty#Response) object gives you more possibility
|
* [Response](https://godoc.org/github.com/go-resty/resty#Response) object gives you more possibility
|
||||||
* Access as `[]byte` array - `response.Body()` OR Access as `string` - `response.String()`
|
* Access as `[]byte` array - `response.Body()` OR Access as `string` - `response.String()`
|
||||||
@@ -54,11 +56,12 @@
|
|||||||
* Option to specify expected `Content-Type` when response `Content-Type` header missing. Refer to [#92](https://github.com/go-resty/resty/issues/92)
|
* Option to specify expected `Content-Type` when response `Content-Type` header missing. Refer to [#92](https://github.com/go-resty/resty/issues/92)
|
||||||
* Resty design
|
* Resty design
|
||||||
* Have client level settings & options and also override at Request level if you want to
|
* Have client level settings & options and also override at Request level if you want to
|
||||||
* Request and Response middlewares
|
* Request and Response middleware
|
||||||
* Create Multiple clients if you want to `resty.New()`
|
* Create Multiple clients if you want to `resty.New()`
|
||||||
* Supports `http.RoundTripper` implementation, see [SetTransport](https://godoc.org/github.com/go-resty/resty#Client.SetTransport)
|
* Supports `http.RoundTripper` implementation, see [SetTransport](https://godoc.org/github.com/go-resty/resty#Client.SetTransport)
|
||||||
* goroutine concurrent safe
|
* goroutine concurrent safe
|
||||||
* Resty Client trace, see [Client.EnableTrace](https://godoc.org/github.com/go-resty/resty#Client.EnableTrace) and [Request.EnableTrace](https://godoc.org/github.com/go-resty/resty#Request.EnableTrace)
|
* Resty Client trace, see [Client.EnableTrace](https://godoc.org/github.com/go-resty/resty#Client.EnableTrace) and [Request.EnableTrace](https://godoc.org/github.com/go-resty/resty#Request.EnableTrace)
|
||||||
|
* Since v2.4.0, trace info contains a `RequestAttempt` value, and the `Request` object contains an `Attempt` attribute
|
||||||
* Debug mode - clean and informative logging presentation
|
* Debug mode - clean and informative logging presentation
|
||||||
* Gzip - Go does it automatically also resty has fallback handling too
|
* Gzip - Go does it automatically also resty has fallback handling too
|
||||||
* Works fine with `HTTP/2` and `HTTP/1.1`
|
* Works fine with `HTTP/2` and `HTTP/1.1`
|
||||||
@@ -104,7 +107,7 @@ Resty author also published following projects for Go Community.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Go Modules
|
# Go Modules
|
||||||
require github.com/go-resty/resty/v2 v2.3.0
|
require github.com/go-resty/resty/v2 v2.4.0
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -123,65 +126,70 @@ import "github.com/go-resty/resty/v2"
|
|||||||
client := resty.New()
|
client := resty.New()
|
||||||
|
|
||||||
resp, err := client.R().
|
resp, err := client.R().
|
||||||
EnableTrace().
|
EnableTrace().
|
||||||
Get("https://httpbin.org/get")
|
Get("https://httpbin.org/get")
|
||||||
|
|
||||||
// Explore response object
|
// Explore response object
|
||||||
fmt.Println("Response Info:")
|
fmt.Println("Response Info:")
|
||||||
fmt.Println("Error :", err)
|
fmt.Println(" Error :", err)
|
||||||
fmt.Println("Status Code:", resp.StatusCode())
|
fmt.Println(" Status Code:", resp.StatusCode())
|
||||||
fmt.Println("Status :", resp.Status())
|
fmt.Println(" Status :", resp.Status())
|
||||||
fmt.Println("Proto :", resp.Proto())
|
fmt.Println(" Proto :", resp.Proto())
|
||||||
fmt.Println("Time :", resp.Time())
|
fmt.Println(" Time :", resp.Time())
|
||||||
fmt.Println("Received At:", resp.ReceivedAt())
|
fmt.Println(" Received At:", resp.ReceivedAt())
|
||||||
fmt.Println("Body :\n", resp)
|
fmt.Println(" Body :\n", resp)
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
|
|
||||||
// Explore trace info
|
// Explore trace info
|
||||||
fmt.Println("Request Trace Info:")
|
fmt.Println("Request Trace Info:")
|
||||||
ti := resp.Request.TraceInfo()
|
ti := resp.Request.TraceInfo()
|
||||||
fmt.Println("DNSLookup :", ti.DNSLookup)
|
fmt.Println(" DNSLookup :", ti.DNSLookup)
|
||||||
fmt.Println("ConnTime :", ti.ConnTime)
|
fmt.Println(" ConnTime :", ti.ConnTime)
|
||||||
fmt.Println("TCPConnTime :", ti.TCPConnTime)
|
fmt.Println(" TCPConnTime :", ti.TCPConnTime)
|
||||||
fmt.Println("TLSHandshake :", ti.TLSHandshake)
|
fmt.Println(" TLSHandshake :", ti.TLSHandshake)
|
||||||
fmt.Println("ServerTime :", ti.ServerTime)
|
fmt.Println(" ServerTime :", ti.ServerTime)
|
||||||
fmt.Println("ResponseTime :", ti.ResponseTime)
|
fmt.Println(" ResponseTime :", ti.ResponseTime)
|
||||||
fmt.Println("TotalTime :", ti.TotalTime)
|
fmt.Println(" TotalTime :", ti.TotalTime)
|
||||||
fmt.Println("IsConnReused :", ti.IsConnReused)
|
fmt.Println(" IsConnReused :", ti.IsConnReused)
|
||||||
fmt.Println("IsConnWasIdle:", ti.IsConnWasIdle)
|
fmt.Println(" IsConnWasIdle :", ti.IsConnWasIdle)
|
||||||
fmt.Println("ConnIdleTime :", ti.ConnIdleTime)
|
fmt.Println(" ConnIdleTime :", ti.ConnIdleTime)
|
||||||
|
fmt.Println(" RequestAttempt:", ti.RequestAttempt)
|
||||||
|
fmt.Println(" RemoteAddr :", ti.RemoteAddr.String())
|
||||||
|
|
||||||
/* Output
|
/* Output
|
||||||
Response Info:
|
Response Info:
|
||||||
Error : <nil>
|
Error : <nil>
|
||||||
Status Code: 200
|
Status Code: 200
|
||||||
Status : 200 OK
|
Status : 200 OK
|
||||||
Proto : HTTP/2.0
|
Proto : HTTP/2.0
|
||||||
Time : 475.611189ms
|
Time : 457.034718ms
|
||||||
Received At: 2020-05-19 00:11:06.828188 -0700 PDT m=+0.476510773
|
Received At: 2020-09-14 15:35:29.784681 -0700 PDT m=+0.458137045
|
||||||
Body :
|
Body :
|
||||||
{
|
{
|
||||||
"args": {},
|
"args": {},
|
||||||
"headers": {
|
"headers": {
|
||||||
"Accept-Encoding": "gzip",
|
"Accept-Encoding": "gzip",
|
||||||
"Host": "httpbin.org",
|
"Host": "httpbin.org",
|
||||||
"User-Agent": "go-resty/2.3.0 (https://github.com/go-resty/resty)"
|
"User-Agent": "go-resty/2.4.0 (https://github.com/go-resty/resty)",
|
||||||
},
|
"X-Amzn-Trace-Id": "Root=1-5f5ff031-000ff6292204aa6898e4de49"
|
||||||
"origin": "0.0.0.0",
|
},
|
||||||
"url": "https://httpbin.org/get"
|
"origin": "0.0.0.0",
|
||||||
}
|
"url": "https://httpbin.org/get"
|
||||||
|
}
|
||||||
|
|
||||||
Request Trace Info:
|
Request Trace Info:
|
||||||
DNSLookup : 4.870246ms
|
DNSLookup : 4.074657ms
|
||||||
ConnTime : 393.95373ms
|
ConnTime : 381.709936ms
|
||||||
TCPConnTime : 78.360432ms
|
TCPConnTime : 77.428048ms
|
||||||
TLSHandshake : 310.032859ms
|
TLSHandshake : 299.623597ms
|
||||||
ServerTime : 81.648284ms
|
ServerTime : 75.414703ms
|
||||||
ResponseTime : 124.266µs
|
ResponseTime : 79.337µs
|
||||||
TotalTime : 475.611189ms
|
TotalTime : 457.034718ms
|
||||||
IsConnReused : false
|
IsConnReused : false
|
||||||
IsConnWasIdle: false
|
IsConnWasIdle : false
|
||||||
ConnIdleTime : 0s
|
ConnIdleTime : 0s
|
||||||
|
RequestAttempt: 1
|
||||||
|
RemoteAddr : 3.221.81.55:443
|
||||||
*/
|
*/
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -210,6 +218,13 @@ resp, err := client.R().
|
|||||||
SetHeader("Accept", "application/json").
|
SetHeader("Accept", "application/json").
|
||||||
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
|
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
|
||||||
Get("/show_product")
|
Get("/show_product")
|
||||||
|
|
||||||
|
|
||||||
|
// If necessary, you can force response content type to tell Resty to parse a JSON response into your struct
|
||||||
|
resp, err := client.R().
|
||||||
|
SetResult(result).
|
||||||
|
ForceContentType("application/json").
|
||||||
|
Get("v2/alpine/manifests/latest")
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Various POST method combinations
|
#### Various POST method combinations
|
||||||
@@ -500,6 +515,28 @@ client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### OnError Hooks
|
||||||
|
|
||||||
|
Resty provides OnError hooks that may be called because:
|
||||||
|
|
||||||
|
- The client failed to send the request due to connection timeout, TLS handshake failure, etc...
|
||||||
|
- The request was retried the maximum amount of times, and still failed.
|
||||||
|
|
||||||
|
If there was a response from the server, the original error will be wrapped in `*resty.ResponseError` which contains the last response received.
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Create a Resty Client
|
||||||
|
client := resty.New()
|
||||||
|
|
||||||
|
client.OnError(func(req *resty.Request, err error) {
|
||||||
|
if v, ok := err.(*resty.ResponseError); ok {
|
||||||
|
// v.Response contains the last response from the server
|
||||||
|
// v.Err contains the original error
|
||||||
|
}
|
||||||
|
// Log the error, increment a metric, etc...
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
#### Redirect Policy
|
#### Redirect Policy
|
||||||
|
|
||||||
Resty provides few ready to use redirect policy(s) also it supports multiple policies together.
|
Resty provides few ready to use redirect policy(s) also it supports multiple policies together.
|
||||||
@@ -639,7 +676,7 @@ client.
|
|||||||
SetRetryMaxWaitTime(20 * time.Second).
|
SetRetryMaxWaitTime(20 * time.Second).
|
||||||
// SetRetryAfter sets callback to calculate wait time between retries.
|
// SetRetryAfter sets callback to calculate wait time between retries.
|
||||||
// Default (nil) implies exponential backoff with jitter
|
// Default (nil) implies exponential backoff with jitter
|
||||||
SetRetryAfter(func(client *Client, resp *Response) (time.Duration, error) {
|
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
|
||||||
return 0, errors.New("quota exceeded")
|
return 0, errors.New("quota exceeded")
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@@ -647,7 +684,7 @@ client.
|
|||||||
Above setup will result in resty retrying requests returned non nil error up to
|
Above setup will result in resty retrying requests returned non nil error up to
|
||||||
3 times with delay increased after each attempt.
|
3 times with delay increased after each attempt.
|
||||||
|
|
||||||
You can optionally provide client with custom retry conditions:
|
You can optionally provide client with [custom retry conditions](https://pkg.go.dev/github.com/go-resty/resty/v2#RetryConditionFunc):
|
||||||
|
|
||||||
```go
|
```go
|
||||||
// Create a Resty Client
|
// Create a Resty Client
|
||||||
@@ -655,7 +692,7 @@ client := resty.New()
|
|||||||
|
|
||||||
client.AddRetryCondition(
|
client.AddRetryCondition(
|
||||||
// RetryConditionFunc type is for retry condition function
|
// RetryConditionFunc type is for retry condition function
|
||||||
// input: non-nil Response OR request execution error
|
// input: non-nil Response OR request execution error
|
||||||
func(r *resty.Response, err error) bool {
|
func(r *resty.Response, err error) bool {
|
||||||
return r.StatusCode() == http.StatusTooManyRequests
|
return r.StatusCode() == http.StatusTooManyRequests
|
||||||
},
|
},
|
||||||
|
|||||||
117
vendor/github.com/go-resty/resty/v2/client.go
сгенерированный
поставляемый
117
vendor/github.com/go-resty/resty/v2/client.go
сгенерированный
поставляемый
@@ -53,7 +53,7 @@ var (
|
|||||||
hdrContentTypeKey = http.CanonicalHeaderKey("Content-Type")
|
hdrContentTypeKey = http.CanonicalHeaderKey("Content-Type")
|
||||||
hdrContentLengthKey = http.CanonicalHeaderKey("Content-Length")
|
hdrContentLengthKey = http.CanonicalHeaderKey("Content-Length")
|
||||||
hdrContentEncodingKey = http.CanonicalHeaderKey("Content-Encoding")
|
hdrContentEncodingKey = http.CanonicalHeaderKey("Content-Encoding")
|
||||||
hdrAuthorizationKey = http.CanonicalHeaderKey("Authorization")
|
hdrLocationKey = http.CanonicalHeaderKey("Location")
|
||||||
|
|
||||||
plainTextType = "text/plain; charset=utf-8"
|
plainTextType = "text/plain; charset=utf-8"
|
||||||
jsonContentType = "application/json"
|
jsonContentType = "application/json"
|
||||||
@@ -81,6 +81,9 @@ type (
|
|||||||
|
|
||||||
// ResponseLogCallback type is for response logs, called before the response is logged
|
// ResponseLogCallback type is for response logs, called before the response is logged
|
||||||
ResponseLogCallback func(*ResponseLog) error
|
ResponseLogCallback func(*ResponseLog) error
|
||||||
|
|
||||||
|
// ErrorHook type is for reacting to request errors, called after all retries were attempted
|
||||||
|
ErrorHook func(*Request, error)
|
||||||
)
|
)
|
||||||
|
|
||||||
// Client struct is used to create Resty client with client level settings,
|
// Client struct is used to create Resty client with client level settings,
|
||||||
@@ -109,6 +112,10 @@ type Client struct {
|
|||||||
JSONMarshal func(v interface{}) ([]byte, error)
|
JSONMarshal func(v interface{}) ([]byte, error)
|
||||||
JSONUnmarshal func(data []byte, v interface{}) error
|
JSONUnmarshal func(data []byte, v interface{}) error
|
||||||
|
|
||||||
|
// HeaderAuthorizationKey is used to set/access Request Authorization header
|
||||||
|
// value when `SetAuthToken` option is used.
|
||||||
|
HeaderAuthorizationKey string
|
||||||
|
|
||||||
jsonEscapeHTML bool
|
jsonEscapeHTML bool
|
||||||
setContentLength bool
|
setContentLength bool
|
||||||
closeConnection bool
|
closeConnection bool
|
||||||
@@ -127,6 +134,7 @@ type Client struct {
|
|||||||
afterResponse []ResponseMiddleware
|
afterResponse []ResponseMiddleware
|
||||||
requestLog RequestLogCallback
|
requestLog RequestLogCallback
|
||||||
responseLog ResponseLogCallback
|
responseLog ResponseLogCallback
|
||||||
|
errorHooks []ErrorHook
|
||||||
}
|
}
|
||||||
|
|
||||||
// User type is to hold an username and password information
|
// User type is to hold an username and password information
|
||||||
@@ -383,6 +391,22 @@ func (c *Client) OnAfterResponse(m ResponseMiddleware) *Client {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OnError method adds a callback that will be run whenever a request execution fails.
|
||||||
|
// This is called after all retries have been attempted (if any).
|
||||||
|
// If there was a response from the server, the error will be wrapped in *ResponseError
|
||||||
|
// which has the last response received from the server.
|
||||||
|
//
|
||||||
|
// client.OnError(func(req *resty.Request, err error) {
|
||||||
|
// if v, ok := err.(*resty.ResponseError); ok {
|
||||||
|
// // Do something with v.Response
|
||||||
|
// }
|
||||||
|
// // Log the error, increment a metric, etc...
|
||||||
|
// })
|
||||||
|
func (c *Client) OnError(h ErrorHook) *Client {
|
||||||
|
c.errorHooks = append(c.errorHooks, h)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// SetPreRequestHook method sets the given pre-request function into resty client.
|
// SetPreRequestHook method sets the given pre-request function into resty client.
|
||||||
// It is called right before the request is fired.
|
// It is called right before the request is fired.
|
||||||
//
|
//
|
||||||
@@ -721,6 +745,22 @@ func (c *Client) SetDoNotParseResponse(parse bool) *Client {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetPathParam method sets single URL path key-value pair in the
|
||||||
|
// Resty client instance.
|
||||||
|
// client.SetPathParam("userId", "sample@sample.com")
|
||||||
|
//
|
||||||
|
// Result:
|
||||||
|
// URL - /v1/users/{userId}/details
|
||||||
|
// Composed URL - /v1/users/sample@sample.com/details
|
||||||
|
// It replaces the value of the key while composing the request URL.
|
||||||
|
//
|
||||||
|
// Also it can be overridden at request level Path Params options,
|
||||||
|
// see `Request.SetPathParam` or `Request.SetPathParams`.
|
||||||
|
func (c *Client) SetPathParam(param, value string) *Client {
|
||||||
|
c.pathParams[param] = value
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// SetPathParams method sets multiple URL path key-value pairs at one go in the
|
// SetPathParams method sets multiple URL path key-value pairs at one go in the
|
||||||
// Resty client instance.
|
// Resty client instance.
|
||||||
// client.SetPathParams(map[string]string{
|
// client.SetPathParams(map[string]string{
|
||||||
@@ -731,11 +771,13 @@ func (c *Client) SetDoNotParseResponse(parse bool) *Client {
|
|||||||
// Result:
|
// Result:
|
||||||
// URL - /v1/users/{userId}/{subAccountId}/details
|
// URL - /v1/users/{userId}/{subAccountId}/details
|
||||||
// Composed URL - /v1/users/sample@sample.com/100002/details
|
// Composed URL - /v1/users/sample@sample.com/100002/details
|
||||||
// It replace the value of the key while composing request URL. Also it can be
|
// It replaces the value of the key while composing the request URL.
|
||||||
// overridden at request level Path Params options, see `Request.SetPathParams`.
|
//
|
||||||
|
// Also it can be overridden at request level Path Params options,
|
||||||
|
// see `Request.SetPathParam` or `Request.SetPathParams`.
|
||||||
func (c *Client) SetPathParams(params map[string]string) *Client {
|
func (c *Client) SetPathParams(params map[string]string) *Client {
|
||||||
for p, v := range params {
|
for p, v := range params {
|
||||||
c.pathParams[p] = v
|
c.SetPathParam(p, v)
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
@@ -795,16 +837,16 @@ func (c *Client) execute(req *Request) (*Response, error) {
|
|||||||
// Apply Request middleware
|
// Apply Request middleware
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// user defined on before request methods
|
// resty middlewares
|
||||||
// to modify the *resty.Request object
|
for _, f := range c.beforeRequest {
|
||||||
for _, f := range c.udBeforeRequest {
|
|
||||||
if err = f(c, req); err != nil {
|
if err = f(c, req); err != nil {
|
||||||
return nil, wrapNoRetryErr(err)
|
return nil, wrapNoRetryErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// resty middlewares
|
// user defined on before request methods
|
||||||
for _, f := range c.beforeRequest {
|
// to modify the *resty.Request object
|
||||||
|
for _, f := range c.udBeforeRequest {
|
||||||
if err = f(c, req); err != nil {
|
if err = f(c, req); err != nil {
|
||||||
return nil, wrapNoRetryErr(err)
|
return nil, wrapNoRetryErr(err)
|
||||||
}
|
}
|
||||||
@@ -859,10 +901,11 @@ func (c *Client) execute(req *Request) (*Response, error) {
|
|||||||
return response, err
|
return response, err
|
||||||
}
|
}
|
||||||
|
|
||||||
response.setReceivedAt() // after we read the body
|
|
||||||
response.size = int64(len(response.body))
|
response.size = int64(len(response.body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.setReceivedAt() // after we read the body
|
||||||
|
|
||||||
// Apply Response middleware
|
// Apply Response middleware
|
||||||
for _, f := range c.afterResponse {
|
for _, f := range c.afterResponse {
|
||||||
if err = f(c, response); err != nil {
|
if err = f(c, response); err != nil {
|
||||||
@@ -900,6 +943,35 @@ func (c *Client) outputLogTo(w io.Writer) *Client {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResponseError is a wrapper for including the server response with an error.
|
||||||
|
// Neither the err nor the response should be nil.
|
||||||
|
type ResponseError struct {
|
||||||
|
Response *Response
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ResponseError) Error() string {
|
||||||
|
return e.Err.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ResponseError) Unwrap() error {
|
||||||
|
return e.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper to run onErrorHooks hooks.
|
||||||
|
// It wraps the error in a ResponseError if the resp is not nil
|
||||||
|
// so hooks can access it.
|
||||||
|
func (c *Client) onErrorHooks(req *Request, resp *Response, err error) {
|
||||||
|
if err != nil {
|
||||||
|
if resp != nil { // wrap with ResponseError
|
||||||
|
err = &ResponseError{Response: resp, Err: err}
|
||||||
|
}
|
||||||
|
for _, h := range c.errorHooks {
|
||||||
|
h(req, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
||||||
// File struct and its methods
|
// File struct and its methods
|
||||||
//_______________________________________________________________________
|
//_______________________________________________________________________
|
||||||
@@ -938,18 +1010,19 @@ func createClient(hc *http.Client) *Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c := &Client{ // not setting lang default values
|
c := &Client{ // not setting lang default values
|
||||||
QueryParam: url.Values{},
|
QueryParam: url.Values{},
|
||||||
FormData: url.Values{},
|
FormData: url.Values{},
|
||||||
Header: http.Header{},
|
Header: http.Header{},
|
||||||
Cookies: make([]*http.Cookie, 0),
|
Cookies: make([]*http.Cookie, 0),
|
||||||
RetryWaitTime: defaultWaitTime,
|
RetryWaitTime: defaultWaitTime,
|
||||||
RetryMaxWaitTime: defaultMaxWaitTime,
|
RetryMaxWaitTime: defaultMaxWaitTime,
|
||||||
JSONMarshal: json.Marshal,
|
JSONMarshal: json.Marshal,
|
||||||
JSONUnmarshal: json.Unmarshal,
|
JSONUnmarshal: json.Unmarshal,
|
||||||
jsonEscapeHTML: true,
|
HeaderAuthorizationKey: http.CanonicalHeaderKey("Authorization"),
|
||||||
httpClient: hc,
|
jsonEscapeHTML: true,
|
||||||
debugBodySizeLimit: math.MaxInt32,
|
httpClient: hc,
|
||||||
pathParams: make(map[string]string),
|
debugBodySizeLimit: math.MaxInt32,
|
||||||
|
pathParams: make(map[string]string),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger
|
// Logger
|
||||||
|
|||||||
2
vendor/github.com/go-resty/resty/v2/go.mod
сгенерированный
поставляемый
2
vendor/github.com/go-resty/resty/v2/go.mod
сгенерированный
поставляемый
@@ -1,5 +1,5 @@
|
|||||||
module github.com/go-resty/resty/v2
|
module github.com/go-resty/resty/v2
|
||||||
|
|
||||||
require golang.org/x/net v0.0.0-20200513185701-a91f0712d120
|
require golang.org/x/net v0.0.0-20201224014010-6772e930b67b
|
||||||
|
|
||||||
go 1.11
|
go 1.11
|
||||||
|
|||||||
6
vendor/github.com/go-resty/resty/v2/go.sum
сгенерированный
поставляемый
Обычный файл
6
vendor/github.com/go-resty/resty/v2/go.sum
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,6 @@
|
|||||||
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
|
||||||
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
65
vendor/github.com/go-resty/resty/v2/middleware.go
сгенерированный
поставляемый
65
vendor/github.com/go-resty/resty/v2/middleware.go
сгенерированный
поставляемый
@@ -162,6 +162,8 @@ func createHTTPRequest(c *Client, r *Request) (err error) {
|
|||||||
if r.bodyBuf == nil {
|
if r.bodyBuf == nil {
|
||||||
if reader, ok := r.Body.(io.Reader); ok {
|
if reader, ok := r.Body.(io.Reader); ok {
|
||||||
r.RawRequest, err = http.NewRequest(r.Method, r.URL, reader)
|
r.RawRequest, err = http.NewRequest(r.Method, r.URL, reader)
|
||||||
|
} else if c.setContentLength || r.setContentLength {
|
||||||
|
r.RawRequest, err = http.NewRequest(r.Method, r.URL, http.NoBody)
|
||||||
} else {
|
} else {
|
||||||
r.RawRequest, err = http.NewRequest(r.Method, r.URL, nil)
|
r.RawRequest, err = http.NewRequest(r.Method, r.URL, nil)
|
||||||
}
|
}
|
||||||
@@ -206,29 +208,16 @@ func createHTTPRequest(c *Client, r *Request) (err error) {
|
|||||||
r.RawRequest = r.RawRequest.WithContext(r.ctx)
|
r.RawRequest = r.RawRequest.WithContext(r.ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bodyCopy, err := getBodyCopy(r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// assign get body func for the underlying raw request instance
|
// assign get body func for the underlying raw request instance
|
||||||
r.RawRequest.GetBody = func() (io.ReadCloser, error) {
|
r.RawRequest.GetBody = func() (io.ReadCloser, error) {
|
||||||
// If r.bodyBuf present, return the copy
|
if bodyCopy != nil {
|
||||||
if r.bodyBuf != nil {
|
return ioutil.NopCloser(bytes.NewReader(bodyCopy.Bytes())), nil
|
||||||
return ioutil.NopCloser(bytes.NewReader(r.bodyBuf.Bytes())), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Maybe body is `io.Reader`.
|
|
||||||
// Note: Resty user have to watchout for large body size of `io.Reader`
|
|
||||||
if r.RawRequest.Body != nil {
|
|
||||||
b, err := ioutil.ReadAll(r.RawRequest.Body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restore the Body
|
|
||||||
closeq(r.RawRequest.Body)
|
|
||||||
r.RawRequest.Body = ioutil.NopCloser(bytes.NewBuffer(b))
|
|
||||||
|
|
||||||
// Return the Body bytes
|
|
||||||
return ioutil.NopCloser(bytes.NewBuffer(b)), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,9 +253,9 @@ func addCredentials(c *Client, r *Request) error {
|
|||||||
|
|
||||||
// Build the Token Auth header
|
// Build the Token Auth header
|
||||||
if !IsStringEmpty(r.Token) { // takes precedence
|
if !IsStringEmpty(r.Token) { // takes precedence
|
||||||
r.RawRequest.Header.Set(hdrAuthorizationKey, authScheme+" "+r.Token)
|
r.RawRequest.Header.Set(c.HeaderAuthorizationKey, authScheme+" "+r.Token)
|
||||||
} else if !IsStringEmpty(c.Token) {
|
} else if !IsStringEmpty(c.Token) {
|
||||||
r.RawRequest.Header.Set(hdrAuthorizationKey, authScheme+" "+c.Token)
|
r.RawRequest.Header.Set(c.HeaderAuthorizationKey, authScheme+" "+c.Token)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -320,7 +309,7 @@ func responseLogger(c *Client, res *Response) error {
|
|||||||
"HEADERS :\n" +
|
"HEADERS :\n" +
|
||||||
composeHeaders(c, res.Request, rl.Header) + "\n"
|
composeHeaders(c, res.Request, rl.Header) + "\n"
|
||||||
if res.Request.isSaveResponse {
|
if res.Request.isSaveResponse {
|
||||||
debugLog += fmt.Sprintf("BODY :\n***** RESPONSE WRITTEN INTO FILE *****\n")
|
debugLog += "BODY :\n***** RESPONSE WRITTEN INTO FILE *****\n"
|
||||||
} else {
|
} else {
|
||||||
debugLog += fmt.Sprintf("BODY :\n%v\n", rl.Body)
|
debugLog += fmt.Sprintf("BODY :\n%v\n", rl.Body)
|
||||||
}
|
}
|
||||||
@@ -470,8 +459,14 @@ func handleRequestBody(c *Client, r *Request) (err error) {
|
|||||||
} else if IsJSONType(contentType) &&
|
} else if IsJSONType(contentType) &&
|
||||||
(kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice) {
|
(kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice) {
|
||||||
bodyBytes, err = jsonMarshal(c, r, r.Body)
|
bodyBytes, err = jsonMarshal(c, r, r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
} else if IsXMLType(contentType) && (kind == reflect.Struct) {
|
} else if IsXMLType(contentType) && (kind == reflect.Struct) {
|
||||||
bodyBytes, err = xml.Marshal(r.Body)
|
bodyBytes, err = xml.Marshal(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if bodyBytes == nil && r.bodyBuf == nil {
|
if bodyBytes == nil && r.bodyBuf == nil {
|
||||||
@@ -524,3 +519,27 @@ func saveResponseIntoFile(c *Client, res *Response) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getBodyCopy(r *Request) (*bytes.Buffer, error) {
|
||||||
|
// If r.bodyBuf present, return the copy
|
||||||
|
if r.bodyBuf != nil {
|
||||||
|
return bytes.NewBuffer(r.bodyBuf.Bytes()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Maybe body is `io.Reader`.
|
||||||
|
// Note: Resty user have to watchout for large body size of `io.Reader`
|
||||||
|
if r.RawRequest.Body != nil {
|
||||||
|
b, err := ioutil.ReadAll(r.RawRequest.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore the Body
|
||||||
|
closeq(r.RawRequest.Body)
|
||||||
|
r.RawRequest.Body = ioutil.NopCloser(bytes.NewBuffer(b))
|
||||||
|
|
||||||
|
// Return the Body bytes
|
||||||
|
return bytes.NewBuffer(b), nil
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|||||||
75
vendor/github.com/go-resty/resty/v2/request.go
сгенерированный
поставляемый
75
vendor/github.com/go-resty/resty/v2/request.go
сгенерированный
поставляемый
@@ -43,6 +43,12 @@ type Request struct {
|
|||||||
UserInfo *User
|
UserInfo *User
|
||||||
Cookies []*http.Cookie
|
Cookies []*http.Cookie
|
||||||
|
|
||||||
|
// Attempt is to represent the request attempt made during a Resty
|
||||||
|
// request execution flow, including retry count.
|
||||||
|
//
|
||||||
|
// Since v2.4.0
|
||||||
|
Attempt int
|
||||||
|
|
||||||
isMultiPart bool
|
isMultiPart bool
|
||||||
isFormData bool
|
isFormData bool
|
||||||
setContentLength bool
|
setContentLength bool
|
||||||
@@ -375,7 +381,7 @@ func (r *Request) SetMultipartFields(fields ...*MultipartField) *Request {
|
|||||||
// See `Client.SetContentLength`
|
// See `Client.SetContentLength`
|
||||||
// client.R().SetContentLength(true)
|
// client.R().SetContentLength(true)
|
||||||
func (r *Request) SetContentLength(l bool) *Request {
|
func (r *Request) SetContentLength(l bool) *Request {
|
||||||
r.setContentLength = true
|
r.setContentLength = l
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,6 +469,20 @@ func (r *Request) SetDoNotParseResponse(parse bool) *Request {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetPathParam method sets single URL path key-value pair in the
|
||||||
|
// Resty current request instance.
|
||||||
|
// client.R().SetPathParam("userId", "sample@sample.com")
|
||||||
|
//
|
||||||
|
// Result:
|
||||||
|
// URL - /v1/users/{userId}/details
|
||||||
|
// Composed URL - /v1/users/sample@sample.com/details
|
||||||
|
// It replaces the value of the key while composing the request URL. Also you can
|
||||||
|
// override Path Params value, which was set at client instance level.
|
||||||
|
func (r *Request) SetPathParam(param, value string) *Request {
|
||||||
|
r.pathParams[param] = value
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
// SetPathParams method sets multiple URL path key-value pairs at one go in the
|
// SetPathParams method sets multiple URL path key-value pairs at one go in the
|
||||||
// Resty current request instance.
|
// Resty current request instance.
|
||||||
// client.R().SetPathParams(map[string]string{
|
// client.R().SetPathParams(map[string]string{
|
||||||
@@ -473,11 +493,11 @@ func (r *Request) SetDoNotParseResponse(parse bool) *Request {
|
|||||||
// Result:
|
// Result:
|
||||||
// URL - /v1/users/{userId}/{subAccountId}/details
|
// URL - /v1/users/{userId}/{subAccountId}/details
|
||||||
// Composed URL - /v1/users/sample@sample.com/100002/details
|
// Composed URL - /v1/users/sample@sample.com/100002/details
|
||||||
// It replace the value of the key while composing request URL. Also you can
|
// It replaces the value of the key while composing request URL. Also you can
|
||||||
// override Path Params value, which was set at client instance level.
|
// override Path Params value, which was set at client instance level.
|
||||||
func (r *Request) SetPathParams(params map[string]string) *Request {
|
func (r *Request) SetPathParams(params map[string]string) *Request {
|
||||||
for p, v := range params {
|
for p, v := range params {
|
||||||
r.pathParams[p] = v
|
r.SetPathParam(p, v)
|
||||||
}
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
@@ -490,7 +510,8 @@ func (r *Request) ExpectContentType(contentType string) *Request {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ForceContentType method provides a strong sense of response `Content-Type` for automatic unmarshalling.
|
// ForceContentType method provides a strong sense of response `Content-Type` for automatic unmarshalling.
|
||||||
// Resty will respect it with higher priority; even response `Content-Type` response header value is available.
|
// Resty gives this a higher priority than the `Content-Type` response header. This means that if both
|
||||||
|
// `Request.ForceContentType` is set and the response `Content-Type` is available, `ForceContentType` will win.
|
||||||
func (r *Request) ForceContentType(contentType string) *Request {
|
func (r *Request) ForceContentType(contentType string) *Request {
|
||||||
r.forceContentType = contentType
|
r.forceContentType = contentType
|
||||||
return r
|
return r
|
||||||
@@ -575,30 +596,43 @@ func (r *Request) TraceInfo() TraceInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ti := TraceInfo{
|
ti := TraceInfo{
|
||||||
DNSLookup: ct.dnsDone.Sub(ct.dnsStart),
|
DNSLookup: ct.dnsDone.Sub(ct.dnsStart),
|
||||||
TLSHandshake: ct.tlsHandshakeDone.Sub(ct.tlsHandshakeStart),
|
TLSHandshake: ct.tlsHandshakeDone.Sub(ct.tlsHandshakeStart),
|
||||||
ServerTime: ct.gotFirstResponseByte.Sub(ct.gotConn),
|
ServerTime: ct.gotFirstResponseByte.Sub(ct.gotConn),
|
||||||
TotalTime: ct.endTime.Sub(ct.dnsStart),
|
IsConnReused: ct.gotConnInfo.Reused,
|
||||||
IsConnReused: ct.gotConnInfo.Reused,
|
IsConnWasIdle: ct.gotConnInfo.WasIdle,
|
||||||
IsConnWasIdle: ct.gotConnInfo.WasIdle,
|
ConnIdleTime: ct.gotConnInfo.IdleTime,
|
||||||
ConnIdleTime: ct.gotConnInfo.IdleTime,
|
RequestAttempt: r.Attempt,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only calcuate on successful connections
|
// Calculate the total time accordingly,
|
||||||
|
// when connection is reused
|
||||||
|
if ct.gotConnInfo.Reused {
|
||||||
|
ti.TotalTime = ct.endTime.Sub(ct.getConn)
|
||||||
|
} else {
|
||||||
|
ti.TotalTime = ct.endTime.Sub(ct.dnsStart)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only calculate on successful connections
|
||||||
if !ct.connectDone.IsZero() {
|
if !ct.connectDone.IsZero() {
|
||||||
ti.TCPConnTime = ct.connectDone.Sub(ct.dnsDone)
|
ti.TCPConnTime = ct.connectDone.Sub(ct.dnsDone)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only calcuate on successful connections
|
// Only calculate on successful connections
|
||||||
if !ct.gotConn.IsZero() {
|
if !ct.gotConn.IsZero() {
|
||||||
ti.ConnTime = ct.gotConn.Sub(ct.getConn)
|
ti.ConnTime = ct.gotConn.Sub(ct.getConn)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only calcuate on successful connections
|
// Only calculate on successful connections
|
||||||
if !ct.gotFirstResponseByte.IsZero() {
|
if !ct.gotFirstResponseByte.IsZero() {
|
||||||
ti.ResponseTime = ct.endTime.Sub(ct.gotFirstResponseByte)
|
ti.ResponseTime = ct.endTime.Sub(ct.gotFirstResponseByte)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Capture remote address info when connection is non-nil
|
||||||
|
if ct.gotConnInfo.Conn != nil {
|
||||||
|
ti.RemoteAddr = ct.gotConnInfo.Conn.RemoteAddr()
|
||||||
|
}
|
||||||
|
|
||||||
return ti
|
return ti
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -660,12 +694,14 @@ func (r *Request) Execute(method, url string) (*Response, error) {
|
|||||||
var err error
|
var err error
|
||||||
|
|
||||||
if r.isMultiPart && !(method == MethodPost || method == MethodPut || method == MethodPatch) {
|
if r.isMultiPart && !(method == MethodPost || method == MethodPut || method == MethodPatch) {
|
||||||
|
// No OnError hook here since this is a request validation error
|
||||||
return nil, fmt.Errorf("multipart content is not allowed in HTTP verb [%v]", method)
|
return nil, fmt.Errorf("multipart content is not allowed in HTTP verb [%v]", method)
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.SRV != nil {
|
if r.SRV != nil {
|
||||||
_, addrs, err = net.LookupSRV(r.SRV.Service, "tcp", r.SRV.Domain)
|
_, addrs, err = net.LookupSRV(r.SRV.Service, "tcp", r.SRV.Domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
r.client.onErrorHooks(r, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -674,20 +710,21 @@ func (r *Request) Execute(method, url string) (*Response, error) {
|
|||||||
r.URL = r.selectAddr(addrs, url, 0)
|
r.URL = r.selectAddr(addrs, url, 0)
|
||||||
|
|
||||||
if r.client.RetryCount == 0 {
|
if r.client.RetryCount == 0 {
|
||||||
|
r.Attempt = 1
|
||||||
resp, err = r.client.execute(r)
|
resp, err = r.client.execute(r)
|
||||||
|
r.client.onErrorHooks(r, resp, unwrapNoRetryErr(err))
|
||||||
return resp, unwrapNoRetryErr(err)
|
return resp, unwrapNoRetryErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
attempt := 0
|
|
||||||
err = Backoff(
|
err = Backoff(
|
||||||
func() (*Response, error) {
|
func() (*Response, error) {
|
||||||
attempt++
|
r.Attempt++
|
||||||
|
|
||||||
r.URL = r.selectAddr(addrs, url, attempt)
|
r.URL = r.selectAddr(addrs, url, r.Attempt)
|
||||||
|
|
||||||
resp, err = r.client.execute(r)
|
resp, err = r.client.execute(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.client.log.Errorf("%v, Attempt %v", err, attempt)
|
r.client.log.Errorf("%v, Attempt %v", err, r.Attempt)
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, err
|
return resp, err
|
||||||
@@ -698,6 +735,8 @@ func (r *Request) Execute(method, url string) (*Response, error) {
|
|||||||
RetryConditions(r.client.RetryConditions),
|
RetryConditions(r.client.RetryConditions),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
r.client.onErrorHooks(r, resp, unwrapNoRetryErr(err))
|
||||||
|
|
||||||
return resp, unwrapNoRetryErr(err)
|
return resp, unwrapNoRetryErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
vendor/github.com/go-resty/resty/v2/response.go
сгенерированный
поставляемый
4
vendor/github.com/go-resty/resty/v2/response.go
сгенерированный
поставляемый
@@ -99,7 +99,7 @@ func (r *Response) String() string {
|
|||||||
|
|
||||||
// Time method returns the time of HTTP response time that from request we sent and received a request.
|
// Time method returns the time of HTTP response time that from request we sent and received a request.
|
||||||
//
|
//
|
||||||
// See `Response.ReceivedAt` to know when client recevied response and see `Response.Request.Time` to know
|
// See `Response.ReceivedAt` to know when client received response and see `Response.Request.Time` to know
|
||||||
// when client sent a request.
|
// when client sent a request.
|
||||||
func (r *Response) Time() time.Duration {
|
func (r *Response) Time() time.Duration {
|
||||||
if r.Request.clientTrace != nil {
|
if r.Request.clientTrace != nil {
|
||||||
@@ -108,7 +108,7 @@ func (r *Response) Time() time.Duration {
|
|||||||
return r.receivedAt.Sub(r.Request.Time)
|
return r.receivedAt.Sub(r.Request.Time)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReceivedAt method returns when response got recevied from server for the request.
|
// ReceivedAt method returns when response got received from server for the request.
|
||||||
func (r *Response) ReceivedAt() time.Time {
|
func (r *Response) ReceivedAt() time.Time {
|
||||||
return r.receivedAt
|
return r.receivedAt
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/github.com/go-resty/resty/v2/resty.go
сгенерированный
поставляемый
2
vendor/github.com/go-resty/resty/v2/resty.go
сгенерированный
поставляемый
@@ -14,7 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Version # of resty
|
// Version # of resty
|
||||||
const Version = "2.3.0"
|
const Version = "2.4.0"
|
||||||
|
|
||||||
// New method creates a new Resty client.
|
// New method creates a new Resty client.
|
||||||
func New() *Client {
|
func New() *Client {
|
||||||
|
|||||||
7
vendor/github.com/go-resty/resty/v2/retry.go
сгенерированный
поставляемый
7
vendor/github.com/go-resty/resty/v2/retry.go
сгенерированный
поставляемый
@@ -167,11 +167,8 @@ defaultCase:
|
|||||||
capLevel := float64(max)
|
capLevel := float64(max)
|
||||||
|
|
||||||
temp := math.Min(capLevel, base*math.Exp2(float64(attempt)))
|
temp := math.Min(capLevel, base*math.Exp2(float64(attempt)))
|
||||||
ri := int(temp / 2)
|
ri := int64(temp / 2)
|
||||||
if ri <= 0 {
|
result := time.Duration(math.Abs(float64(ri + rand.Int63n(ri))))
|
||||||
ri = maxInt // max int for arch 386
|
|
||||||
}
|
|
||||||
result := time.Duration(math.Abs(float64(ri + rand.Intn(ri))))
|
|
||||||
|
|
||||||
if result < min {
|
if result < min {
|
||||||
result = min
|
result = min
|
||||||
|
|||||||
10
vendor/github.com/go-resty/resty/v2/trace.go
сгенерированный
поставляемый
10
vendor/github.com/go-resty/resty/v2/trace.go
сгенерированный
поставляемый
@@ -7,6 +7,7 @@ package resty
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"net"
|
||||||
"net/http/httptrace"
|
"net/http/httptrace"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -54,10 +55,17 @@ type TraceInfo struct {
|
|||||||
// ConnIdleTime is a duration how long the connection was previously
|
// ConnIdleTime is a duration how long the connection was previously
|
||||||
// idle, if IsConnWasIdle is true.
|
// idle, if IsConnWasIdle is true.
|
||||||
ConnIdleTime time.Duration
|
ConnIdleTime time.Duration
|
||||||
|
|
||||||
|
// RequestAttempt is to represent the request attempt made during a Resty
|
||||||
|
// request execution flow, including retry count.
|
||||||
|
RequestAttempt int
|
||||||
|
|
||||||
|
// RemoteAddr returns the remote network address.
|
||||||
|
RemoteAddr net.Addr
|
||||||
}
|
}
|
||||||
|
|
||||||
//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
||||||
// CientTrace struct and its methods
|
// ClientTrace struct and its methods
|
||||||
//_______________________________________________________________________
|
//_______________________________________________________________________
|
||||||
|
|
||||||
// tracer struct maps the `httptrace.ClientTrace` hooks into Fields
|
// tracer struct maps the `httptrace.ClientTrace` hooks into Fields
|
||||||
|
|||||||
4
vendor/github.com/google/uuid/hash.go
сгенерированный
поставляемый
4
vendor/github.com/google/uuid/hash.go
сгенерированный
поставляемый
@@ -26,8 +26,8 @@ var (
|
|||||||
// NewMD5 and NewSHA1.
|
// NewMD5 and NewSHA1.
|
||||||
func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID {
|
func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID {
|
||||||
h.Reset()
|
h.Reset()
|
||||||
h.Write(space[:])
|
h.Write(space[:]) //nolint:errcheck
|
||||||
h.Write(data)
|
h.Write(data) //nolint:errcheck
|
||||||
s := h.Sum(nil)
|
s := h.Sum(nil)
|
||||||
var uuid UUID
|
var uuid UUID
|
||||||
copy(uuid[:], s)
|
copy(uuid[:], s)
|
||||||
|
|||||||
2
vendor/github.com/google/uuid/sql.go
сгенерированный
поставляемый
2
vendor/github.com/google/uuid/sql.go
сгенерированный
поставляемый
@@ -9,7 +9,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Scan implements sql.Scanner so UUIDs can be read from databases transparently
|
// Scan implements sql.Scanner so UUIDs can be read from databases transparently.
|
||||||
// Currently, database types that map to string and []byte are supported. Please
|
// Currently, database types that map to string and []byte are supported. Please
|
||||||
// consult database-specific driver documentation for matching types.
|
// consult database-specific driver documentation for matching types.
|
||||||
func (uuid *UUID) Scan(src interface{}) error {
|
func (uuid *UUID) Scan(src interface{}) error {
|
||||||
|
|||||||
10
vendor/github.com/google/uuid/uuid.go
сгенерированный
поставляемый
10
vendor/github.com/google/uuid/uuid.go
сгенерированный
поставляемый
@@ -35,6 +35,12 @@ const (
|
|||||||
|
|
||||||
var rander = rand.Reader // random function
|
var rander = rand.Reader // random function
|
||||||
|
|
||||||
|
type invalidLengthError struct{ len int }
|
||||||
|
|
||||||
|
func (err invalidLengthError) Error() string {
|
||||||
|
return fmt.Sprintf("invalid UUID length: %d", err.len)
|
||||||
|
}
|
||||||
|
|
||||||
// Parse decodes s into a UUID or returns an error. Both the standard UUID
|
// Parse decodes s into a UUID or returns an error. Both the standard UUID
|
||||||
// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and
|
// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and
|
||||||
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the
|
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the
|
||||||
@@ -68,7 +74,7 @@ func Parse(s string) (UUID, error) {
|
|||||||
}
|
}
|
||||||
return uuid, nil
|
return uuid, nil
|
||||||
default:
|
default:
|
||||||
return uuid, fmt.Errorf("invalid UUID length: %d", len(s))
|
return uuid, invalidLengthError{len(s)}
|
||||||
}
|
}
|
||||||
// s is now at least 36 bytes long
|
// s is now at least 36 bytes long
|
||||||
// it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
// it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||||
@@ -112,7 +118,7 @@ func ParseBytes(b []byte) (UUID, error) {
|
|||||||
}
|
}
|
||||||
return uuid, nil
|
return uuid, nil
|
||||||
default:
|
default:
|
||||||
return uuid, fmt.Errorf("invalid UUID length: %d", len(b))
|
return uuid, invalidLengthError{len(b)}
|
||||||
}
|
}
|
||||||
// s is now at least 36 bytes long
|
// s is now at least 36 bytes long
|
||||||
// it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
// it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||||
|
|||||||
294
vendor/github.com/klauspost/compress/flate/gen_inflate.go
сгенерированный
поставляемый
294
vendor/github.com/klauspost/compress/flate/gen_inflate.go
сгенерированный
поставляемый
@@ -1,294 +0,0 @@
|
|||||||
// +build generate
|
|
||||||
|
|
||||||
//go:generate go run $GOFILE && gofmt -w inflate_gen.go
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
f, err := os.Create("inflate_gen.go")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
types := []string{"*bytes.Buffer", "*bytes.Reader", "*bufio.Reader", "*strings.Reader"}
|
|
||||||
names := []string{"BytesBuffer", "BytesReader", "BufioReader", "StringsReader"}
|
|
||||||
imports := []string{"bytes", "bufio", "io", "strings", "math/bits"}
|
|
||||||
f.WriteString(`// Code generated by go generate gen_inflate.go. DO NOT EDIT.
|
|
||||||
|
|
||||||
package flate
|
|
||||||
|
|
||||||
import (
|
|
||||||
`)
|
|
||||||
|
|
||||||
for _, imp := range imports {
|
|
||||||
f.WriteString("\t\"" + imp + "\"\n")
|
|
||||||
}
|
|
||||||
f.WriteString(")\n\n")
|
|
||||||
|
|
||||||
template := `
|
|
||||||
|
|
||||||
// Decode a single Huffman block from f.
|
|
||||||
// hl and hd are the Huffman states for the lit/length values
|
|
||||||
// and the distance values, respectively. If hd == nil, using the
|
|
||||||
// fixed distance encoding associated with fixed Huffman blocks.
|
|
||||||
func (f *decompressor) $FUNCNAME$() {
|
|
||||||
const (
|
|
||||||
stateInit = iota // Zero value must be stateInit
|
|
||||||
stateDict
|
|
||||||
)
|
|
||||||
fr := f.r.($TYPE$)
|
|
||||||
|
|
||||||
switch f.stepState {
|
|
||||||
case stateInit:
|
|
||||||
goto readLiteral
|
|
||||||
case stateDict:
|
|
||||||
goto copyHistory
|
|
||||||
}
|
|
||||||
|
|
||||||
readLiteral:
|
|
||||||
// Read literal and/or (length, distance) according to RFC section 3.2.3.
|
|
||||||
{
|
|
||||||
var v int
|
|
||||||
{
|
|
||||||
// Inlined v, err := f.huffSym(f.hl)
|
|
||||||
// Since a huffmanDecoder can be empty or be composed of a degenerate tree
|
|
||||||
// with single element, huffSym must error on these two edge cases. In both
|
|
||||||
// cases, the chunks slice will be 0 for the invalid sequence, leading it
|
|
||||||
// satisfy the n == 0 check below.
|
|
||||||
n := uint(f.hl.maxRead)
|
|
||||||
// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,
|
|
||||||
// but is smart enough to keep local variables in registers, so use nb and b,
|
|
||||||
// inline call to moreBits and reassign b,nb back to f on return.
|
|
||||||
nb, b := f.nb, f.b
|
|
||||||
for {
|
|
||||||
for nb < n {
|
|
||||||
c, err := fr.ReadByte()
|
|
||||||
if err != nil {
|
|
||||||
f.b = b
|
|
||||||
f.nb = nb
|
|
||||||
f.err = noEOF(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.roffset++
|
|
||||||
b |= uint32(c) << (nb & regSizeMaskUint32)
|
|
||||||
nb += 8
|
|
||||||
}
|
|
||||||
chunk := f.hl.chunks[b&(huffmanNumChunks-1)]
|
|
||||||
n = uint(chunk & huffmanCountMask)
|
|
||||||
if n > huffmanChunkBits {
|
|
||||||
chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask]
|
|
||||||
n = uint(chunk & huffmanCountMask)
|
|
||||||
}
|
|
||||||
if n <= nb {
|
|
||||||
if n == 0 {
|
|
||||||
f.b = b
|
|
||||||
f.nb = nb
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("huffsym: n==0")
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.b = b >> (n & regSizeMaskUint32)
|
|
||||||
f.nb = nb - n
|
|
||||||
v = int(chunk >> huffmanValueShift)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var length int
|
|
||||||
switch {
|
|
||||||
case v < 256:
|
|
||||||
f.dict.writeByte(byte(v))
|
|
||||||
if f.dict.availWrite() == 0 {
|
|
||||||
f.toRead = f.dict.readFlush()
|
|
||||||
f.step = (*decompressor).$FUNCNAME$
|
|
||||||
f.stepState = stateInit
|
|
||||||
return
|
|
||||||
}
|
|
||||||
goto readLiteral
|
|
||||||
case v == 256:
|
|
||||||
f.finishBlock()
|
|
||||||
return
|
|
||||||
// otherwise, reference to older data
|
|
||||||
case v < 265:
|
|
||||||
length = v - (257 - 3)
|
|
||||||
case v < maxNumLit:
|
|
||||||
val := decCodeToLen[(v - 257)]
|
|
||||||
length = int(val.length) + 3
|
|
||||||
n := uint(val.extra)
|
|
||||||
for f.nb < n {
|
|
||||||
c, err := fr.ReadByte()
|
|
||||||
if err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("morebits n>0:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.roffset++
|
|
||||||
f.b |= uint32(c) << f.nb
|
|
||||||
f.nb += 8
|
|
||||||
}
|
|
||||||
length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1))
|
|
||||||
f.b >>= n & regSizeMaskUint32
|
|
||||||
f.nb -= n
|
|
||||||
default:
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println(v, ">= maxNumLit")
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var dist uint32
|
|
||||||
if f.hd == nil {
|
|
||||||
for f.nb < 5 {
|
|
||||||
c, err := fr.ReadByte()
|
|
||||||
if err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("morebits f.nb<5:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.roffset++
|
|
||||||
f.b |= uint32(c) << f.nb
|
|
||||||
f.nb += 8
|
|
||||||
}
|
|
||||||
dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3)))
|
|
||||||
f.b >>= 5
|
|
||||||
f.nb -= 5
|
|
||||||
} else {
|
|
||||||
// Since a huffmanDecoder can be empty or be composed of a degenerate tree
|
|
||||||
// with single element, huffSym must error on these two edge cases. In both
|
|
||||||
// cases, the chunks slice will be 0 for the invalid sequence, leading it
|
|
||||||
// satisfy the n == 0 check below.
|
|
||||||
n := uint(f.hd.maxRead)
|
|
||||||
// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,
|
|
||||||
// but is smart enough to keep local variables in registers, so use nb and b,
|
|
||||||
// inline call to moreBits and reassign b,nb back to f on return.
|
|
||||||
nb, b := f.nb, f.b
|
|
||||||
for {
|
|
||||||
for nb < n {
|
|
||||||
c, err := fr.ReadByte()
|
|
||||||
if err != nil {
|
|
||||||
f.b = b
|
|
||||||
f.nb = nb
|
|
||||||
f.err = noEOF(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.roffset++
|
|
||||||
b |= uint32(c) << (nb & regSizeMaskUint32)
|
|
||||||
nb += 8
|
|
||||||
}
|
|
||||||
chunk := f.hd.chunks[b&(huffmanNumChunks-1)]
|
|
||||||
n = uint(chunk & huffmanCountMask)
|
|
||||||
if n > huffmanChunkBits {
|
|
||||||
chunk = f.hd.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hd.linkMask]
|
|
||||||
n = uint(chunk & huffmanCountMask)
|
|
||||||
}
|
|
||||||
if n <= nb {
|
|
||||||
if n == 0 {
|
|
||||||
f.b = b
|
|
||||||
f.nb = nb
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("huffsym: n==0")
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.b = b >> (n & regSizeMaskUint32)
|
|
||||||
f.nb = nb - n
|
|
||||||
dist = uint32(chunk >> huffmanValueShift)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case dist < 4:
|
|
||||||
dist++
|
|
||||||
case dist < maxNumDist:
|
|
||||||
nb := uint(dist-2) >> 1
|
|
||||||
// have 1 bit in bottom of dist, need nb more.
|
|
||||||
extra := (dist & 1) << (nb & regSizeMaskUint32)
|
|
||||||
for f.nb < nb {
|
|
||||||
c, err := fr.ReadByte()
|
|
||||||
if err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("morebits f.nb<nb:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.roffset++
|
|
||||||
f.b |= uint32(c) << f.nb
|
|
||||||
f.nb += 8
|
|
||||||
}
|
|
||||||
extra |= f.b & uint32(1<<(nb®SizeMaskUint32)-1)
|
|
||||||
f.b >>= nb & regSizeMaskUint32
|
|
||||||
f.nb -= nb
|
|
||||||
dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra
|
|
||||||
default:
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("dist too big:", dist, maxNumDist)
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// No check on length; encoding can be prescient.
|
|
||||||
if dist > uint32(f.dict.histSize()) {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize())
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
f.copyLen, f.copyDist = length, int(dist)
|
|
||||||
goto copyHistory
|
|
||||||
}
|
|
||||||
|
|
||||||
copyHistory:
|
|
||||||
// Perform a backwards copy according to RFC section 3.2.3.
|
|
||||||
{
|
|
||||||
cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen)
|
|
||||||
if cnt == 0 {
|
|
||||||
cnt = f.dict.writeCopy(f.copyDist, f.copyLen)
|
|
||||||
}
|
|
||||||
f.copyLen -= cnt
|
|
||||||
|
|
||||||
if f.dict.availWrite() == 0 || f.copyLen > 0 {
|
|
||||||
f.toRead = f.dict.readFlush()
|
|
||||||
f.step = (*decompressor).$FUNCNAME$ // We need to continue this work
|
|
||||||
f.stepState = stateDict
|
|
||||||
return
|
|
||||||
}
|
|
||||||
goto readLiteral
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
`
|
|
||||||
for i, t := range types {
|
|
||||||
s := strings.Replace(template, "$FUNCNAME$", "huffman"+names[i], -1)
|
|
||||||
s = strings.Replace(s, "$TYPE$", t, -1)
|
|
||||||
f.WriteString(s)
|
|
||||||
}
|
|
||||||
f.WriteString("func (f *decompressor) huffmanBlockDecoder() func() {\n")
|
|
||||||
f.WriteString("\tswitch f.r.(type) {\n")
|
|
||||||
for i, t := range types {
|
|
||||||
f.WriteString("\t\tcase " + t + ":\n")
|
|
||||||
f.WriteString("\t\t\treturn f.huffman" + names[i] + "\n")
|
|
||||||
}
|
|
||||||
f.WriteString("\t\tdefault:\n")
|
|
||||||
f.WriteString("\t\t\treturn f.huffmanBlockGeneric")
|
|
||||||
f.WriteString("\t}\n}\n")
|
|
||||||
}
|
|
||||||
4
vendor/github.com/klauspost/compress/huff0/README.md
сгенерированный
поставляемый
4
vendor/github.com/klauspost/compress/huff0/README.md
сгенерированный
поставляемый
@@ -14,7 +14,9 @@ but it can be used as a secondary step to compressors (like Snappy) that does no
|
|||||||
|
|
||||||
## News
|
## News
|
||||||
|
|
||||||
* Mar 2018: First implementation released. Consider this beta software for now.
|
This is used as part of the [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and decompression package.
|
||||||
|
|
||||||
|
This ensures that most functionality is well tested.
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
|
|||||||
27
vendor/github.com/klauspost/compress/zstd/decoder.go
сгенерированный
поставляемый
27
vendor/github.com/klauspost/compress/zstd/decoder.go
сгенерированный
поставляемый
@@ -5,7 +5,6 @@
|
|||||||
package zstd
|
package zstd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -85,6 +84,10 @@ func NewReader(r io.Reader, opts ...DOption) (*Decoder, error) {
|
|||||||
d.current.output = make(chan decodeOutput, d.o.concurrent)
|
d.current.output = make(chan decodeOutput, d.o.concurrent)
|
||||||
d.current.flushed = true
|
d.current.flushed = true
|
||||||
|
|
||||||
|
if r == nil {
|
||||||
|
d.current.err = ErrDecoderNilInput
|
||||||
|
}
|
||||||
|
|
||||||
// Transfer option dicts.
|
// Transfer option dicts.
|
||||||
d.dicts = make(map[uint32]dict, len(d.o.dicts))
|
d.dicts = make(map[uint32]dict, len(d.o.dicts))
|
||||||
for _, dc := range d.o.dicts {
|
for _, dc := range d.o.dicts {
|
||||||
@@ -111,7 +114,7 @@ func NewReader(r io.Reader, opts ...DOption) (*Decoder, error) {
|
|||||||
// When the stream is done, io.EOF will be returned.
|
// When the stream is done, io.EOF will be returned.
|
||||||
func (d *Decoder) Read(p []byte) (int, error) {
|
func (d *Decoder) Read(p []byte) (int, error) {
|
||||||
if d.stream == nil {
|
if d.stream == nil {
|
||||||
return 0, errors.New("no input has been initialized")
|
return 0, ErrDecoderNilInput
|
||||||
}
|
}
|
||||||
var n int
|
var n int
|
||||||
for {
|
for {
|
||||||
@@ -152,12 +155,20 @@ func (d *Decoder) Read(p []byte) (int, error) {
|
|||||||
|
|
||||||
// Reset will reset the decoder the supplied stream after the current has finished processing.
|
// Reset will reset the decoder the supplied stream after the current has finished processing.
|
||||||
// Note that this functionality cannot be used after Close has been called.
|
// Note that this functionality cannot be used after Close has been called.
|
||||||
|
// Reset can be called with a nil reader to release references to the previous reader.
|
||||||
|
// After being called with a nil reader, no other operations than Reset or DecodeAll or Close
|
||||||
|
// should be used.
|
||||||
func (d *Decoder) Reset(r io.Reader) error {
|
func (d *Decoder) Reset(r io.Reader) error {
|
||||||
if d.current.err == ErrDecoderClosed {
|
if d.current.err == ErrDecoderClosed {
|
||||||
return d.current.err
|
return d.current.err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d.drainOutput()
|
||||||
|
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return errors.New("nil Reader sent as input")
|
d.current.err = ErrDecoderNilInput
|
||||||
|
d.current.flushed = true
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.stream == nil {
|
if d.stream == nil {
|
||||||
@@ -166,14 +177,14 @@ func (d *Decoder) Reset(r io.Reader) error {
|
|||||||
go d.startStreamDecoder(d.stream)
|
go d.startStreamDecoder(d.stream)
|
||||||
}
|
}
|
||||||
|
|
||||||
d.drainOutput()
|
|
||||||
|
|
||||||
// If bytes buffer and < 1MB, do sync decoding anyway.
|
// If bytes buffer and < 1MB, do sync decoding anyway.
|
||||||
if bb, ok := r.(*bytes.Buffer); ok && bb.Len() < 1<<20 {
|
if bb, ok := r.(byter); ok && bb.Len() < 1<<20 {
|
||||||
|
var bb2 byter
|
||||||
|
bb2 = bb
|
||||||
if debug {
|
if debug {
|
||||||
println("*bytes.Buffer detected, doing sync decode, len:", bb.Len())
|
println("*bytes.Buffer detected, doing sync decode, len:", bb.Len())
|
||||||
}
|
}
|
||||||
b := bb.Bytes()
|
b := bb2.Bytes()
|
||||||
var dst []byte
|
var dst []byte
|
||||||
if cap(d.current.b) > 0 {
|
if cap(d.current.b) > 0 {
|
||||||
dst = d.current.b
|
dst = d.current.b
|
||||||
@@ -249,7 +260,7 @@ func (d *Decoder) drainOutput() {
|
|||||||
// Any error encountered during the write is also returned.
|
// Any error encountered during the write is also returned.
|
||||||
func (d *Decoder) WriteTo(w io.Writer) (int64, error) {
|
func (d *Decoder) WriteTo(w io.Writer) (int64, error) {
|
||||||
if d.stream == nil {
|
if d.stream == nil {
|
||||||
return 0, errors.New("no input has been initialized")
|
return 0, ErrDecoderNilInput
|
||||||
}
|
}
|
||||||
var n int64
|
var n int64
|
||||||
for {
|
for {
|
||||||
|
|||||||
15
vendor/github.com/klauspost/compress/zstd/seqdec.go
сгенерированный
поставляемый
15
vendor/github.com/klauspost/compress/zstd/seqdec.go
сгенерированный
поставляемый
@@ -181,11 +181,18 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error {
|
|||||||
return fmt.Errorf("output (%d) bigger than max block size", size)
|
return fmt.Errorf("output (%d) bigger than max block size", size)
|
||||||
}
|
}
|
||||||
if size > cap(s.out) {
|
if size > cap(s.out) {
|
||||||
// Not enough size, will be extremely rarely triggered,
|
// Not enough size, which can happen under high volume block streaming conditions
|
||||||
// but could be if destination slice is too small for sync operations.
|
// but could be if destination slice is too small for sync operations.
|
||||||
// We add maxBlockSize to the capacity.
|
// over-allocating here can create a large amount of GC pressure so we try to keep
|
||||||
s.out = append(s.out, make([]byte, maxBlockSize)...)
|
// it as contained as possible
|
||||||
s.out = s.out[:len(s.out)-maxBlockSize]
|
used := len(s.out) - startSize
|
||||||
|
addBytes := 256 + ll + ml + used>>2
|
||||||
|
// Clamp to max block size.
|
||||||
|
if used+addBytes > maxBlockSize {
|
||||||
|
addBytes = maxBlockSize - used
|
||||||
|
}
|
||||||
|
s.out = append(s.out, make([]byte, addBytes)...)
|
||||||
|
s.out = s.out[:len(s.out)-addBytes]
|
||||||
}
|
}
|
||||||
if ml > maxMatchLen {
|
if ml > maxMatchLen {
|
||||||
return fmt.Errorf("match len (%d) bigger than max allowed length", ml)
|
return fmt.Errorf("match len (%d) bigger than max allowed length", ml)
|
||||||
|
|||||||
12
vendor/github.com/klauspost/compress/zstd/zstd.go
сгенерированный
поставляемый
12
vendor/github.com/klauspost/compress/zstd/zstd.go
сгенерированный
поставляемый
@@ -4,6 +4,7 @@
|
|||||||
package zstd
|
package zstd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
@@ -73,6 +74,10 @@ var (
|
|||||||
// ErrDecoderClosed will be returned if the Decoder was used after
|
// ErrDecoderClosed will be returned if the Decoder was used after
|
||||||
// Close has been called.
|
// Close has been called.
|
||||||
ErrDecoderClosed = errors.New("decoder used after Close")
|
ErrDecoderClosed = errors.New("decoder used after Close")
|
||||||
|
|
||||||
|
// ErrDecoderNilInput is returned when a nil Reader was provided
|
||||||
|
// and an operation other than Reset/DecodeAll/Close was attempted.
|
||||||
|
ErrDecoderNilInput = errors.New("nil input provided as reader")
|
||||||
)
|
)
|
||||||
|
|
||||||
func println(a ...interface{}) {
|
func println(a ...interface{}) {
|
||||||
@@ -142,3 +147,10 @@ func load64(b []byte, i int) uint64 {
|
|||||||
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
|
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
|
||||||
uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
|
uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type byter interface {
|
||||||
|
Bytes() []byte
|
||||||
|
Len() int
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ byter = &bytes.Buffer{}
|
||||||
|
|||||||
2
vendor/github.com/mattn/go-runewidth/go.mod
сгенерированный
поставляемый
2
vendor/github.com/mattn/go-runewidth/go.mod
сгенерированный
поставляемый
@@ -1,3 +1,5 @@
|
|||||||
module github.com/mattn/go-runewidth
|
module github.com/mattn/go-runewidth
|
||||||
|
|
||||||
go 1.9
|
go 1.9
|
||||||
|
|
||||||
|
require github.com/rivo/uniseg v0.1.0
|
||||||
|
|||||||
2
vendor/github.com/mattn/go-runewidth/go.sum
сгенерированный
поставляемый
Обычный файл
2
vendor/github.com/mattn/go-runewidth/go.sum
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,2 @@
|
|||||||
|
github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY=
|
||||||
|
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
80
vendor/github.com/mattn/go-runewidth/runewidth.go
сгенерированный
поставляемый
80
vendor/github.com/mattn/go-runewidth/runewidth.go
сгенерированный
поставляемый
@@ -2,6 +2,8 @@ package runewidth
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/rivo/uniseg"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate go run script/generate.go
|
//go:generate go run script/generate.go
|
||||||
@@ -10,9 +12,6 @@ var (
|
|||||||
// EastAsianWidth will be set true if the current locale is CJK
|
// EastAsianWidth will be set true if the current locale is CJK
|
||||||
EastAsianWidth bool
|
EastAsianWidth bool
|
||||||
|
|
||||||
// ZeroWidthJoiner is flag to set to use UTR#51 ZWJ
|
|
||||||
ZeroWidthJoiner bool
|
|
||||||
|
|
||||||
// DefaultCondition is a condition in current locale
|
// DefaultCondition is a condition in current locale
|
||||||
DefaultCondition = &Condition{}
|
DefaultCondition = &Condition{}
|
||||||
)
|
)
|
||||||
@@ -30,7 +29,6 @@ func handleEnv() {
|
|||||||
}
|
}
|
||||||
// update DefaultCondition
|
// update DefaultCondition
|
||||||
DefaultCondition.EastAsianWidth = EastAsianWidth
|
DefaultCondition.EastAsianWidth = EastAsianWidth
|
||||||
DefaultCondition.ZeroWidthJoiner = ZeroWidthJoiner
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type interval struct {
|
type interval struct {
|
||||||
@@ -85,15 +83,13 @@ var nonprint = table{
|
|||||||
|
|
||||||
// Condition have flag EastAsianWidth whether the current locale is CJK or not.
|
// Condition have flag EastAsianWidth whether the current locale is CJK or not.
|
||||||
type Condition struct {
|
type Condition struct {
|
||||||
EastAsianWidth bool
|
EastAsianWidth bool
|
||||||
ZeroWidthJoiner bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCondition return new instance of Condition which is current locale.
|
// NewCondition return new instance of Condition which is current locale.
|
||||||
func NewCondition() *Condition {
|
func NewCondition() *Condition {
|
||||||
return &Condition{
|
return &Condition{
|
||||||
EastAsianWidth: EastAsianWidth,
|
EastAsianWidth: EastAsianWidth,
|
||||||
ZeroWidthJoiner: ZeroWidthJoiner,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,38 +106,20 @@ func (c *Condition) RuneWidth(r rune) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Condition) stringWidth(s string) (width int) {
|
|
||||||
for _, r := range []rune(s) {
|
|
||||||
width += c.RuneWidth(r)
|
|
||||||
}
|
|
||||||
return width
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Condition) stringWidthZeroJoiner(s string) (width int) {
|
|
||||||
r1, r2 := rune(0), rune(0)
|
|
||||||
for _, r := range []rune(s) {
|
|
||||||
if r == 0xFE0E || r == 0xFE0F {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
w := c.RuneWidth(r)
|
|
||||||
if r2 == 0x200D && inTables(r, emoji) && inTables(r1, emoji) {
|
|
||||||
if width < w {
|
|
||||||
width = w
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
width += w
|
|
||||||
}
|
|
||||||
r1, r2 = r2, r
|
|
||||||
}
|
|
||||||
return width
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringWidth return width as you can see
|
// StringWidth return width as you can see
|
||||||
func (c *Condition) StringWidth(s string) (width int) {
|
func (c *Condition) StringWidth(s string) (width int) {
|
||||||
if c.ZeroWidthJoiner {
|
g := uniseg.NewGraphemes(s)
|
||||||
return c.stringWidthZeroJoiner(s)
|
for g.Next() {
|
||||||
|
var chWidth int
|
||||||
|
for _, r := range g.Runes() {
|
||||||
|
chWidth = c.RuneWidth(r)
|
||||||
|
if chWidth > 0 {
|
||||||
|
break // Our best guess at this point is to use the width of the first non-zero-width rune.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
width += chWidth
|
||||||
}
|
}
|
||||||
return c.stringWidth(s)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Truncate return string truncated with w cells
|
// Truncate return string truncated with w cells
|
||||||
@@ -149,19 +127,25 @@ func (c *Condition) Truncate(s string, w int, tail string) string {
|
|||||||
if c.StringWidth(s) <= w {
|
if c.StringWidth(s) <= w {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
r := []rune(s)
|
w -= c.StringWidth(tail)
|
||||||
tw := c.StringWidth(tail)
|
var width int
|
||||||
w -= tw
|
pos := len(s)
|
||||||
width := 0
|
g := uniseg.NewGraphemes(s)
|
||||||
i := 0
|
for g.Next() {
|
||||||
for ; i < len(r); i++ {
|
var chWidth int
|
||||||
cw := c.RuneWidth(r[i])
|
for _, r := range g.Runes() {
|
||||||
if width+cw > w {
|
chWidth = c.RuneWidth(r)
|
||||||
|
if chWidth > 0 {
|
||||||
|
break // See StringWidth() for details.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if width+chWidth > w {
|
||||||
|
pos, _ = g.Positions()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
width += cw
|
width += chWidth
|
||||||
}
|
}
|
||||||
return string(r[0:i]) + tail
|
return s[:pos] + tail
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrap return string wrapped with w cells
|
// Wrap return string wrapped with w cells
|
||||||
@@ -169,7 +153,7 @@ func (c *Condition) Wrap(s string, w int) string {
|
|||||||
width := 0
|
width := 0
|
||||||
out := ""
|
out := ""
|
||||||
for _, r := range []rune(s) {
|
for _, r := range []rune(s) {
|
||||||
cw := RuneWidth(r)
|
cw := c.RuneWidth(r)
|
||||||
if r == '\n' {
|
if r == '\n' {
|
||||||
out += string(r)
|
out += string(r)
|
||||||
width = 0
|
width = 0
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/README.md
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/README.md
сгенерированный
поставляемый
@@ -248,4 +248,4 @@ The full API Reference is available here.
|
|||||||
[Contributors Guide](https://github.com/minio/minio-go/blob/master/CONTRIBUTING.md)
|
[Contributors Guide](https://github.com/minio/minio-go/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
This SDK is distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0), see [LICENSE](./LICENSE) and [NOTICE](./NOTICE) for more information.
|
This SDK is distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0), see [LICENSE](https://github.com/minio/minio-go/blob/master/LICENSE) and [NOTICE](https://github.com/minio/minio-go/blob/master/NOTICE) for more information.
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api-compose-object.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api-compose-object.go
сгенерированный
поставляемый
@@ -215,7 +215,7 @@ func (c Client) copyObjectDo(ctx context.Context, srcBucket, srcObject, destBuck
|
|||||||
headers.Set(amzBucketReplicationStatus, string(dstOpts.Internal.ReplicationStatus))
|
headers.Set(amzBucketReplicationStatus, string(dstOpts.Internal.ReplicationStatus))
|
||||||
}
|
}
|
||||||
if !dstOpts.Internal.SourceMTime.IsZero() {
|
if !dstOpts.Internal.SourceMTime.IsZero() {
|
||||||
headers.Set(minIOBucketSourceMTime, dstOpts.Internal.SourceMTime.Format(time.RFC3339))
|
headers.Set(minIOBucketSourceMTime, dstOpts.Internal.SourceMTime.Format(time.RFC3339Nano))
|
||||||
}
|
}
|
||||||
if dstOpts.Internal.SourceETag != "" {
|
if dstOpts.Internal.SourceETag != "" {
|
||||||
headers.Set(minIOBucketSourceETag, dstOpts.Internal.SourceETag)
|
headers.Set(minIOBucketSourceETag, dstOpts.Internal.SourceETag)
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api-error-response.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api-error-response.go
сгенерированный
поставляемый
@@ -102,7 +102,7 @@ const (
|
|||||||
// structure as error.
|
// structure as error.
|
||||||
func httpRespToErrorResponse(resp *http.Response, bucketName, objectName string) error {
|
func httpRespToErrorResponse(resp *http.Response, bucketName, objectName string) error {
|
||||||
if resp == nil {
|
if resp == nil {
|
||||||
msg := "Response is empty. " + reportIssue
|
msg := "Empty http response. " + reportIssue
|
||||||
return errInvalidArgument(msg)
|
return errInvalidArgument(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
vendor/github.com/minio/minio-go/v7/api-get-options.go
сгенерированный
поставляемый
6
vendor/github.com/minio/minio-go/v7/api-get-options.go
сгенерированный
поставляемый
@@ -28,6 +28,7 @@ import (
|
|||||||
//AdvancedGetOptions for internal use by MinIO server - not intended for client use.
|
//AdvancedGetOptions for internal use by MinIO server - not intended for client use.
|
||||||
type AdvancedGetOptions struct {
|
type AdvancedGetOptions struct {
|
||||||
ReplicationDeleteMarker bool
|
ReplicationDeleteMarker bool
|
||||||
|
ReplicationProxyRequest bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetObjectOptions are used to specify additional headers or options
|
// GetObjectOptions are used to specify additional headers or options
|
||||||
@@ -53,6 +54,11 @@ func (o GetObjectOptions) Header() http.Header {
|
|||||||
if o.ServerSideEncryption != nil && o.ServerSideEncryption.Type() == encrypt.SSEC {
|
if o.ServerSideEncryption != nil && o.ServerSideEncryption.Type() == encrypt.SSEC {
|
||||||
o.ServerSideEncryption.Marshal(headers)
|
o.ServerSideEncryption.Marshal(headers)
|
||||||
}
|
}
|
||||||
|
// this header is set for active-active replication scenario where GET/HEAD
|
||||||
|
// to site A is proxy'd to site B if object/version missing on site A.
|
||||||
|
if o.Internal.ReplicationProxyRequest {
|
||||||
|
headers.Set(minIOBucketReplicationProxyRequest, "true")
|
||||||
|
}
|
||||||
return headers
|
return headers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api-put-object.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api-put-object.go
сгенерированный
поставляемый
@@ -147,7 +147,7 @@ func (opts PutObjectOptions) Header() (header http.Header) {
|
|||||||
header.Set(amzBucketReplicationStatus, string(opts.Internal.ReplicationStatus))
|
header.Set(amzBucketReplicationStatus, string(opts.Internal.ReplicationStatus))
|
||||||
}
|
}
|
||||||
if !opts.Internal.SourceMTime.IsZero() {
|
if !opts.Internal.SourceMTime.IsZero() {
|
||||||
header.Set(minIOBucketSourceMTime, opts.Internal.SourceMTime.Format(time.RFC3339))
|
header.Set(minIOBucketSourceMTime, opts.Internal.SourceMTime.Format(time.RFC3339Nano))
|
||||||
}
|
}
|
||||||
if opts.Internal.SourceETag != "" {
|
if opts.Internal.SourceETag != "" {
|
||||||
header.Set(minIOBucketSourceETag, opts.Internal.SourceETag)
|
header.Set(minIOBucketSourceETag, opts.Internal.SourceETag)
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api-remove.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api-remove.go
сгенерированный
поставляемый
@@ -107,7 +107,7 @@ func (c Client) removeObject(ctx context.Context, bucketName, objectName string,
|
|||||||
headers.Set(minIOBucketReplicationDeleteMarker, "true")
|
headers.Set(minIOBucketReplicationDeleteMarker, "true")
|
||||||
}
|
}
|
||||||
if !opts.Internal.ReplicationMTime.IsZero() {
|
if !opts.Internal.ReplicationMTime.IsZero() {
|
||||||
headers.Set(minIOBucketSourceMTime, opts.Internal.ReplicationMTime.Format(time.RFC3339))
|
headers.Set(minIOBucketSourceMTime, opts.Internal.ReplicationMTime.Format(time.RFC3339Nano))
|
||||||
}
|
}
|
||||||
if !opts.Internal.ReplicationStatus.Empty() {
|
if !opts.Internal.ReplicationStatus.Empty() {
|
||||||
headers.Set(amzBucketReplicationStatus, string(opts.Internal.ReplicationStatus))
|
headers.Set(amzBucketReplicationStatus, string(opts.Internal.ReplicationStatus))
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api.go
сгенерированный
поставляемый
@@ -108,7 +108,7 @@ type Options struct {
|
|||||||
// Global constants.
|
// Global constants.
|
||||||
const (
|
const (
|
||||||
libraryName = "minio-go"
|
libraryName = "minio-go"
|
||||||
libraryVersion = "v7.0.6"
|
libraryVersion = "v7.0.7"
|
||||||
)
|
)
|
||||||
|
|
||||||
// User Agent should always following the below style.
|
// User Agent should always following the below style.
|
||||||
|
|||||||
1
vendor/github.com/minio/minio-go/v7/constants.go
сгенерированный
поставляемый
1
vendor/github.com/minio/minio-go/v7/constants.go
сгенерированный
поставляемый
@@ -87,4 +87,5 @@ const (
|
|||||||
|
|
||||||
minIOBucketSourceETag = "X-Minio-Source-Etag"
|
minIOBucketSourceETag = "X-Minio-Source-Etag"
|
||||||
minIOBucketReplicationDeleteMarker = "X-Minio-Source-DeleteMarker"
|
minIOBucketReplicationDeleteMarker = "X-Minio-Source-DeleteMarker"
|
||||||
|
minIOBucketReplicationProxyRequest = "X-Minio-Source-Proxy-Request"
|
||||||
)
|
)
|
||||||
|
|||||||
1
vendor/github.com/minio/minio-go/v7/go.mod
сгенерированный
поставляемый
1
vendor/github.com/minio/minio-go/v7/go.mod
сгенерированный
поставляемый
@@ -11,6 +11,7 @@ require (
|
|||||||
github.com/kr/pretty v0.1.0 // indirect
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
github.com/minio/md5-simd v1.1.0
|
github.com/minio/md5-simd v1.1.0
|
||||||
github.com/minio/sha256-simd v0.1.1
|
github.com/minio/sha256-simd v0.1.1
|
||||||
|
github.com/minio/sio v0.2.1 // indirect
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.1 // indirect
|
github.com/modern-go/reflect2 v1.0.1 // indirect
|
||||||
|
|||||||
3
vendor/github.com/minio/minio-go/v7/go.sum
сгенерированный
поставляемый
3
vendor/github.com/minio/minio-go/v7/go.sum
сгенерированный
поставляемый
@@ -36,6 +36,8 @@ github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
|
|||||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
||||||
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
|
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
|
||||||
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
||||||
|
github.com/minio/sio v0.2.1 h1:NjzKiIMSMcHediVQR0AFVx2tp7Wxh9tKPfDI3kH7aHQ=
|
||||||
|
github.com/minio/sio v0.2.1/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw=
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
||||||
@@ -63,6 +65,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
|
|||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg=
|
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg=
|
||||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/pkg/encrypt/server-side.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/pkg/encrypt/server-side.go
сгенерированный
поставляемый
@@ -34,7 +34,7 @@ const (
|
|||||||
// sseKmsKeyID is the AWS SSE-KMS key id.
|
// sseKmsKeyID is the AWS SSE-KMS key id.
|
||||||
sseKmsKeyID = sseGenericHeader + "-Aws-Kms-Key-Id"
|
sseKmsKeyID = sseGenericHeader + "-Aws-Kms-Key-Id"
|
||||||
// sseEncryptionContext is the AWS SSE-KMS Encryption Context data.
|
// sseEncryptionContext is the AWS SSE-KMS Encryption Context data.
|
||||||
sseEncryptionContext = sseGenericHeader + "-Encryption-Context"
|
sseEncryptionContext = sseGenericHeader + "-Context"
|
||||||
|
|
||||||
// sseCustomerAlgorithm is the AWS SSE-C algorithm HTTP header key.
|
// sseCustomerAlgorithm is the AWS SSE-C algorithm HTTP header key.
|
||||||
sseCustomerAlgorithm = sseGenericHeader + "-Customer-Algorithm"
|
sseCustomerAlgorithm = sseGenericHeader + "-Customer-Algorithm"
|
||||||
|
|||||||
28
vendor/github.com/minio/minio-go/v7/pkg/lifecycle/lifecycle.go
сгенерированный
поставляемый
28
vendor/github.com/minio/minio-go/v7/pkg/lifecycle/lifecycle.go
сгенерированный
поставляемый
@@ -53,15 +53,6 @@ type NoncurrentVersionExpiration struct {
|
|||||||
NoncurrentDays ExpirationDays `xml:"NoncurrentDays,omitempty"`
|
NoncurrentDays ExpirationDays `xml:"NoncurrentDays,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NoncurrentVersionTransition structure, set this action to request server to
|
|
||||||
// transition noncurrent object versions to different set storage classes
|
|
||||||
// at a specific period in the object's lifetime.
|
|
||||||
type NoncurrentVersionTransition struct {
|
|
||||||
XMLName xml.Name `xml:"NoncurrentVersionTransition,omitempty" json:"-"`
|
|
||||||
StorageClass string `xml:"StorageClass,omitempty" json:"StorageClass,omitempty"`
|
|
||||||
NoncurrentDays ExpirationDays `xml:"NoncurrentDays,omitempty" json:"NoncurrentDays,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarshalXML if non-current days not set to non zero value
|
// MarshalXML if non-current days not set to non zero value
|
||||||
func (n NoncurrentVersionExpiration) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
func (n NoncurrentVersionExpiration) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
||||||
if n.IsDaysNull() {
|
if n.IsDaysNull() {
|
||||||
@@ -76,13 +67,28 @@ func (n NoncurrentVersionExpiration) IsDaysNull() bool {
|
|||||||
return n.NoncurrentDays == ExpirationDays(0)
|
return n.NoncurrentDays == ExpirationDays(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NoncurrentVersionTransition structure, set this action to request server to
|
||||||
|
// transition noncurrent object versions to different set storage classes
|
||||||
|
// at a specific period in the object's lifetime.
|
||||||
|
type NoncurrentVersionTransition struct {
|
||||||
|
XMLName xml.Name `xml:"NoncurrentVersionTransition,omitempty" json:"-"`
|
||||||
|
StorageClass string `xml:"StorageClass,omitempty" json:"StorageClass,omitempty"`
|
||||||
|
NoncurrentDays ExpirationDays `xml:"NoncurrentDays,omitempty" json:"NoncurrentDays,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDaysNull returns true if days field is null
|
||||||
|
func (n NoncurrentVersionTransition) IsDaysNull() bool {
|
||||||
|
return n.NoncurrentDays == ExpirationDays(0)
|
||||||
|
}
|
||||||
|
|
||||||
// MarshalXML is extended to leave out
|
// MarshalXML is extended to leave out
|
||||||
// <NoncurrentVersionTransition></NoncurrentVersionTransition> tags
|
// <NoncurrentVersionTransition></NoncurrentVersionTransition> tags
|
||||||
func (n NoncurrentVersionTransition) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
func (n NoncurrentVersionTransition) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
||||||
if n.NoncurrentDays == ExpirationDays(0) {
|
if n.IsDaysNull() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return e.EncodeElement(&n, start)
|
type noncurrentVersionTransitionWrapper NoncurrentVersionTransition
|
||||||
|
return e.EncodeElement(noncurrentVersionTransitionWrapper(n), start)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tag structure key/value pair representing an object tag to apply lifecycle configuration
|
// Tag structure key/value pair representing an object tag to apply lifecycle configuration
|
||||||
|
|||||||
22
vendor/github.com/minio/minio-go/v7/pkg/notification/notification.go
сгенерированный
поставляемый
22
vendor/github.com/minio/minio-go/v7/pkg/notification/notification.go
сгенерированный
поставляемый
@@ -180,20 +180,28 @@ func EqualFilterRuleList(a, b []FilterRule) bool {
|
|||||||
|
|
||||||
// Equal returns whether this `Config` is equal to another defined by the passed parameters
|
// Equal returns whether this `Config` is equal to another defined by the passed parameters
|
||||||
func (t *Config) Equal(events []EventType, prefix, suffix string) bool {
|
func (t *Config) Equal(events []EventType, prefix, suffix string) bool {
|
||||||
//Compare events
|
if t == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compare events
|
||||||
passEvents := EqualEventTypeList(t.Events, events)
|
passEvents := EqualEventTypeList(t.Events, events)
|
||||||
|
|
||||||
//Compare filters
|
// Compare filters
|
||||||
var newFilter []FilterRule
|
var newFilterRules []FilterRule
|
||||||
if prefix != "" {
|
if prefix != "" {
|
||||||
newFilter = append(newFilter, FilterRule{Name: "prefix", Value: prefix})
|
newFilterRules = append(newFilterRules, FilterRule{Name: "prefix", Value: prefix})
|
||||||
}
|
}
|
||||||
if suffix != "" {
|
if suffix != "" {
|
||||||
newFilter = append(newFilter, FilterRule{Name: "suffix", Value: suffix})
|
newFilterRules = append(newFilterRules, FilterRule{Name: "suffix", Value: suffix})
|
||||||
}
|
}
|
||||||
|
|
||||||
passFilters := EqualFilterRuleList(t.Filter.S3Key.FilterRules, newFilter)
|
var currentFilterRules []FilterRule
|
||||||
// if it matches events and filters, mark the index for deletion
|
if t.Filter != nil {
|
||||||
|
currentFilterRules = t.Filter.S3Key.FilterRules
|
||||||
|
}
|
||||||
|
|
||||||
|
passFilters := EqualFilterRuleList(currentFilterRules, newFilterRules)
|
||||||
return passEvents && passFilters
|
return passEvents && passFilters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
39
vendor/github.com/minio/minio-go/v7/pkg/replication/replication.go
сгенерированный
поставляемый
39
vendor/github.com/minio/minio-go/v7/pkg/replication/replication.go
сгенерированный
поставляемый
@@ -195,6 +195,14 @@ func (c *Config) AddRule(opts Options) error {
|
|||||||
},
|
},
|
||||||
DeleteMarkerReplication: DeleteMarkerReplication{Status: dmStatus},
|
DeleteMarkerReplication: DeleteMarkerReplication{Status: dmStatus},
|
||||||
DeleteReplication: DeleteReplication{Status: vDeleteStatus},
|
DeleteReplication: DeleteReplication{Status: vDeleteStatus},
|
||||||
|
// MinIO enables replica metadata syncing by default in the case of bi-directional replication to allow
|
||||||
|
// automatic failover as the expectation in this case is that replica and source should be identical.
|
||||||
|
// However AWS leaves this configurable https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-for-metadata-changes.html
|
||||||
|
SourceSelectionCriteria: SourceSelectionCriteria{
|
||||||
|
ReplicaModifications: ReplicaModifications{
|
||||||
|
Status: Enabled,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate rule after overlaying priority for pre-existing rule being disabled.
|
// validate rule after overlaying priority for pre-existing rule being disabled.
|
||||||
@@ -378,6 +386,7 @@ type Rule struct {
|
|||||||
DeleteReplication DeleteReplication `xml:"DeleteReplication"`
|
DeleteReplication DeleteReplication `xml:"DeleteReplication"`
|
||||||
Destination Destination `xml:"Destination"`
|
Destination Destination `xml:"Destination"`
|
||||||
Filter Filter `xml:"Filter" json:"Filter"`
|
Filter Filter `xml:"Filter" json:"Filter"`
|
||||||
|
SourceSelectionCriteria SourceSelectionCriteria `xml:"SourceSelectionCriteria" json:"SourceSelectionCriteria"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate validates the rule for correctness
|
// Validate validates the rule for correctness
|
||||||
@@ -396,6 +405,10 @@ func (r Rule) Validate() error {
|
|||||||
return fmt.Errorf("Priority must be set for the rule")
|
return fmt.Errorf("Priority must be set for the rule")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := r.validateStatus(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -569,3 +582,29 @@ type DeleteReplication struct {
|
|||||||
func (d DeleteReplication) IsEmpty() bool {
|
func (d DeleteReplication) IsEmpty() bool {
|
||||||
return len(d.Status) == 0
|
return len(d.Status) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReplicaModifications specifies if replica modification sync is enabled
|
||||||
|
type ReplicaModifications struct {
|
||||||
|
Status Status `xml:"Status" json:"Status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SourceSelectionCriteria - specifies additional source selection criteria in ReplicationConfiguration.
|
||||||
|
type SourceSelectionCriteria struct {
|
||||||
|
ReplicaModifications ReplicaModifications `xml:"ReplicaModifications" json:"ReplicaModifications"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValid - checks whether SourceSelectionCriteria is valid or not.
|
||||||
|
func (s SourceSelectionCriteria) IsValid() bool {
|
||||||
|
return s.ReplicaModifications.Status == Enabled || s.ReplicaModifications.Status == Disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate source selection criteria
|
||||||
|
func (s SourceSelectionCriteria) Validate() error {
|
||||||
|
if (s == SourceSelectionCriteria{}) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if !s.IsValid() {
|
||||||
|
return fmt.Errorf("Invalid ReplicaModification status")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
18
vendor/github.com/minio/minio-go/v7/post-policy.go
сгенерированный
поставляемый
18
vendor/github.com/minio/minio-go/v7/post-policy.go
сгенерированный
поставляемый
@@ -170,6 +170,24 @@ func (p *PostPolicy) SetContentType(contentType string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetContentTypeStartsWith - Sets what content-type of the object for this policy
|
||||||
|
// based upload can start with.
|
||||||
|
func (p *PostPolicy) SetContentTypeStartsWith(contentTypeStartsWith string) error {
|
||||||
|
if strings.TrimSpace(contentTypeStartsWith) == "" || contentTypeStartsWith == "" {
|
||||||
|
return errInvalidArgument("No content type specified.")
|
||||||
|
}
|
||||||
|
policyCond := policyCondition{
|
||||||
|
matchType: "starts-with",
|
||||||
|
condition: "$Content-Type",
|
||||||
|
value: contentTypeStartsWith,
|
||||||
|
}
|
||||||
|
if err := p.addNewPolicy(policyCond); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.formData["Content-Type"] = contentTypeStartsWith
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetContentLengthRange - Set new min and max content length
|
// SetContentLengthRange - Set new min and max content length
|
||||||
// condition for all incoming uploads.
|
// condition for all incoming uploads.
|
||||||
func (p *PostPolicy) SetContentLengthRange(min, max int64) error {
|
func (p *PostPolicy) SetContentLengthRange(min, max int64) error {
|
||||||
|
|||||||
1
vendor/github.com/otiai10/gosseract/v2/.gitignore
сгенерированный
поставляемый
1
vendor/github.com/otiai10/gosseract/v2/.gitignore
сгенерированный
поставляемый
@@ -35,6 +35,7 @@ gosseract.iml
|
|||||||
.vagrant
|
.vagrant
|
||||||
coverage.txt
|
coverage.txt
|
||||||
vendor
|
vendor
|
||||||
|
test/runtimes/TESTRESULT.*.txt
|
||||||
|
|
||||||
# Editors
|
# Editors
|
||||||
.vscode
|
.vscode
|
||||||
23
vendor/github.com/otiai10/gosseract/v2/.travis.yml
сгенерированный
поставляемый
23
vendor/github.com/otiai10/gosseract/v2/.travis.yml
сгенерированный
поставляемый
@@ -1,23 +0,0 @@
|
|||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.11.x
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
compiler:
|
|
||||||
- g++
|
|
||||||
before_install:
|
|
||||||
# - TESSERACT=4.00.00dev LEPTONICA=1.74.2 sudo ./test/script/setup.sh
|
|
||||||
- sudo apt-get update -qq
|
|
||||||
- sudo apt-get install -y -qq libtesseract-dev libleptonica-dev tesseract-ocr-eng
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
|
|
||||||
- GO111MODULE=on
|
|
||||||
before_script:
|
|
||||||
- go mod vendor -v
|
|
||||||
script:
|
|
||||||
- go test -v -bench .
|
|
||||||
- go test -race -coverprofile=coverage.txt -covermode=atomic
|
|
||||||
- ./test/runtime --driver docker
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
||||||
8
vendor/github.com/otiai10/gosseract/v2/README.md
сгенерированный
поставляемый
8
vendor/github.com/otiai10/gosseract/v2/README.md
сгенерированный
поставляемый
@@ -1,8 +1,10 @@
|
|||||||
# gosseract OCR
|
# gosseract OCR
|
||||||
[](https://travis-ci.org/otiai10/gosseract)
|
<!-- [](https://travis-ci.org/otiai10/gosseract) -->
|
||||||
|
[](https://github.com/otiai10/gosseract/actions?query=workflow%3A%22Runtime+Test%22)
|
||||||
[](https://codecov.io/gh/otiai10/gosseract)
|
[](https://codecov.io/gh/otiai10/gosseract)
|
||||||
[](https://goreportcard.com/report/github.com/otiai10/gosseract)
|
[](https://goreportcard.com/report/github.com/otiai10/gosseract)
|
||||||
[](https://godoc.org/github.com/otiai10/gosseract)
|
[](https://github.com/otiai10/gosseract/blob/master/LICENSE)
|
||||||
|
[](https://pkg.go.dev/github.com/otiai10/gosseract/v2)
|
||||||
|
|
||||||
Golang OCR package, by using Tesseract C++ library.
|
Golang OCR package, by using Tesseract C++ library.
|
||||||
|
|
||||||
@@ -19,7 +21,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/otiai10/gosseract"
|
"github.com/otiai10/gosseract/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
35
vendor/github.com/otiai10/gosseract/v2/client.go
сгенерированный
поставляемый
35
vendor/github.com/otiai10/gosseract/v2/client.go
сгенерированный
поставляемый
@@ -51,7 +51,7 @@ type Client struct {
|
|||||||
// TessdataPrefix can indicate directory path to `tessdata`.
|
// TessdataPrefix can indicate directory path to `tessdata`.
|
||||||
// It is set `/usr/local/share/tessdata/` or something like that, as default.
|
// It is set `/usr/local/share/tessdata/` or something like that, as default.
|
||||||
// TODO: Implement and test
|
// TODO: Implement and test
|
||||||
TessdataPrefix *string
|
TessdataPrefix string
|
||||||
|
|
||||||
// Languages are languages to be detected. If not specified, it's gonna be "eng".
|
// Languages are languages to be detected. If not specified, it's gonna be "eng".
|
||||||
Languages []string
|
Languages []string
|
||||||
@@ -229,8 +229,18 @@ func (client *Client) SetConfigFile(fpath string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetTessdataPrefix sets path to the models directory.
|
||||||
|
// Environment variable TESSDATA_PREFIX is used as default.
|
||||||
|
func (client *Client) SetTessdataPrefix(prefix string) error {
|
||||||
|
if prefix == "" {
|
||||||
|
return fmt.Errorf("tessdata prefix could not be empty")
|
||||||
|
}
|
||||||
|
client.TessdataPrefix = prefix
|
||||||
|
client.flagForInit()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize tesseract::TessBaseAPI
|
// Initialize tesseract::TessBaseAPI
|
||||||
// TODO: add tessdata prefix
|
|
||||||
func (client *Client) init() error {
|
func (client *Client) init() error {
|
||||||
|
|
||||||
if !client.shouldInit {
|
if !client.shouldInit {
|
||||||
@@ -250,8 +260,14 @@ func (client *Client) init() error {
|
|||||||
}
|
}
|
||||||
defer C.free(unsafe.Pointer(configfile))
|
defer C.free(unsafe.Pointer(configfile))
|
||||||
|
|
||||||
|
var tessdataPrefix *C.char
|
||||||
|
if client.TessdataPrefix != "" {
|
||||||
|
tessdataPrefix = C.CString(client.TessdataPrefix)
|
||||||
|
}
|
||||||
|
defer C.free(unsafe.Pointer(tessdataPrefix))
|
||||||
|
|
||||||
errbuf := [512]C.char{}
|
errbuf := [512]C.char{}
|
||||||
res := C.Init(client.api, nil, languages, configfile, &errbuf[0])
|
res := C.Init(client.api, tessdataPrefix, languages, configfile, &errbuf[0])
|
||||||
msg := C.GoString(&errbuf[0])
|
msg := C.GoString(&errbuf[0])
|
||||||
|
|
||||||
if res != 0 {
|
if res != 0 {
|
||||||
@@ -351,7 +367,7 @@ func (client *Client) GetBoundingBoxes(level PageIteratorLevel) (out []BoundingB
|
|||||||
length := int(boxArray.length)
|
length := int(boxArray.length)
|
||||||
defer C.free(unsafe.Pointer(boxArray.boxes))
|
defer C.free(unsafe.Pointer(boxArray.boxes))
|
||||||
defer C.free(unsafe.Pointer(boxArray))
|
defer C.free(unsafe.Pointer(boxArray))
|
||||||
|
out = make([]BoundingBox, 0, length)
|
||||||
for i := 0; i < length; i++ {
|
for i := 0; i < length; i++ {
|
||||||
// cast to bounding_box: boxes + i*sizeof(box)
|
// cast to bounding_box: boxes + i*sizeof(box)
|
||||||
box := (*C.struct_bounding_box)(unsafe.Pointer(uintptr(unsafe.Pointer(boxArray.boxes)) + uintptr(i)*unsafe.Sizeof(C.struct_bounding_box{})))
|
box := (*C.struct_bounding_box)(unsafe.Pointer(uintptr(unsafe.Pointer(boxArray.boxes)) + uintptr(i)*unsafe.Sizeof(C.struct_bounding_box{})))
|
||||||
@@ -367,8 +383,7 @@ func (client *Client) GetBoundingBoxes(level PageIteratorLevel) (out []BoundingB
|
|||||||
|
|
||||||
// GetAvailableLanguages returns a list of available languages in the default tesspath
|
// GetAvailableLanguages returns a list of available languages in the default tesspath
|
||||||
func GetAvailableLanguages() ([]string, error) {
|
func GetAvailableLanguages() ([]string, error) {
|
||||||
path := C.GoString(C.GetDataPath())
|
languages, err := filepath.Glob(filepath.Join(getDataPath(), "*.traineddata"))
|
||||||
languages, err := filepath.Glob(filepath.Join(path, "*.traineddata"))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return languages, err
|
return languages, err
|
||||||
}
|
}
|
||||||
@@ -393,7 +408,7 @@ func (client *Client) GetBoundingBoxesVerbose() (out []BoundingBox, err error) {
|
|||||||
length := int(boxArray.length)
|
length := int(boxArray.length)
|
||||||
defer C.free(unsafe.Pointer(boxArray.boxes))
|
defer C.free(unsafe.Pointer(boxArray.boxes))
|
||||||
defer C.free(unsafe.Pointer(boxArray))
|
defer C.free(unsafe.Pointer(boxArray))
|
||||||
|
out = make([]BoundingBox, 0, length)
|
||||||
for i := 0; i < length; i++ {
|
for i := 0; i < length; i++ {
|
||||||
// cast to bounding_box: boxes + i*sizeof(box)
|
// cast to bounding_box: boxes + i*sizeof(box)
|
||||||
box := (*C.struct_bounding_box)(unsafe.Pointer(uintptr(unsafe.Pointer(boxArray.boxes)) + uintptr(i)*unsafe.Sizeof(C.struct_bounding_box{})))
|
box := (*C.struct_bounding_box)(unsafe.Pointer(uintptr(unsafe.Pointer(boxArray.boxes)) + uintptr(i)*unsafe.Sizeof(C.struct_bounding_box{})))
|
||||||
@@ -409,3 +424,9 @@ func (client *Client) GetBoundingBoxesVerbose() (out []BoundingBox, err error) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getDataPath is useful hepler to determine where current tesseract
|
||||||
|
// installation stores trained models
|
||||||
|
func getDataPath() string {
|
||||||
|
return C.GoString(C.GetDataPath())
|
||||||
|
}
|
||||||
|
|||||||
2
vendor/github.com/otiai10/gosseract/v2/constant.go
сгенерированный
поставляемый
2
vendor/github.com/otiai10/gosseract/v2/constant.go
сгенерированный
поставляемый
@@ -59,7 +59,7 @@ const (
|
|||||||
|
|
||||||
// SettableVariable represents available strings for TessBaseAPI::SetVariable.
|
// SettableVariable represents available strings for TessBaseAPI::SetVariable.
|
||||||
// See https://groups.google.com/forum/#!topic/tesseract-ocr/eHTBzrBiwvQ
|
// See https://groups.google.com/forum/#!topic/tesseract-ocr/eHTBzrBiwvQ
|
||||||
// and https://github.com/tesseract-ocr/tesseract/blob/master/ccmain/tesseractclass.h
|
// and https://github.com/tesseract-ocr/tesseract/blob/master/src/ccmain/tesseractclass.h
|
||||||
type SettableVariable string
|
type SettableVariable string
|
||||||
|
|
||||||
// Followings are variables which can be used for TessBaseAPI::SetVariable.
|
// Followings are variables which can be used for TessBaseAPI::SetVariable.
|
||||||
|
|||||||
4
vendor/github.com/otiai10/gosseract/v2/go.mod
сгенерированный
поставляемый
4
vendor/github.com/otiai10/gosseract/v2/go.mod
сгенерированный
поставляемый
@@ -1,3 +1,5 @@
|
|||||||
module github.com/otiai10/gosseract/v2
|
module github.com/otiai10/gosseract/v2
|
||||||
|
|
||||||
require github.com/otiai10/mint v1.3.0
|
go 1.14
|
||||||
|
|
||||||
|
require github.com/otiai10/mint v1.3.2
|
||||||
|
|||||||
5
vendor/github.com/otiai10/gosseract/v2/go.sum
сгенерированный
поставляемый
5
vendor/github.com/otiai10/gosseract/v2/go.sum
сгенерированный
поставляемый
@@ -1,3 +1,4 @@
|
|||||||
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
||||||
github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc=
|
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
|
||||||
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
|
github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E=
|
||||||
|
github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
|
||||||
|
|||||||
10
vendor/github.com/otiai10/gosseract/v2/tessbridge.cpp
сгенерированный
поставляемый
10
vendor/github.com/otiai10/gosseract/v2/tessbridge.cpp
сгенерированный
поставляемый
@@ -17,13 +17,17 @@ TessBaseAPI Create() {
|
|||||||
|
|
||||||
void Free(TessBaseAPI a) {
|
void Free(TessBaseAPI a) {
|
||||||
tesseract::TessBaseAPI* api = (tesseract::TessBaseAPI*)a;
|
tesseract::TessBaseAPI* api = (tesseract::TessBaseAPI*)a;
|
||||||
api->End();
|
if (api != nullptr) {
|
||||||
delete api;
|
api->End();
|
||||||
|
delete api;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear(TessBaseAPI a) {
|
void Clear(TessBaseAPI a) {
|
||||||
tesseract::TessBaseAPI* api = (tesseract::TessBaseAPI*)a;
|
tesseract::TessBaseAPI* api = (tesseract::TessBaseAPI*)a;
|
||||||
api->Clear();
|
if (api != nullptr) {
|
||||||
|
api->Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearPersistentCache(TessBaseAPI a) {
|
void ClearPersistentCache(TessBaseAPI a) {
|
||||||
|
|||||||
3
vendor/github.com/pierrec/lz4/v4/internal/lz4stream/block.go
сгенерированный
поставляемый
3
vendor/github.com/pierrec/lz4/v4/internal/lz4stream/block.go
сгенерированный
поставляемый
@@ -115,15 +115,18 @@ func (b *Blocks) initR(f *Frame, num int, src io.Reader) (chan []byte, error) {
|
|||||||
block := NewFrameDataBlock(f)
|
block := NewFrameDataBlock(f)
|
||||||
cumx, err = block.Read(f, src, 0)
|
cumx, err = block.Read(f, src, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
block.Close(f)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
// Recheck for an error as reading may be slow and uncompressing is expensive.
|
// Recheck for an error as reading may be slow and uncompressing is expensive.
|
||||||
if b.ErrorR() != nil {
|
if b.ErrorR() != nil {
|
||||||
|
block.Close(f)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
c := make(chan []byte)
|
c := make(chan []byte)
|
||||||
blocks <- c
|
blocks <- c
|
||||||
go func() {
|
go func() {
|
||||||
|
defer block.Close(f)
|
||||||
data, err := block.Uncompress(f, size.Get(), false)
|
data, err := block.Uncompress(f, size.Get(), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.closeR(err)
|
b.closeR(err)
|
||||||
|
|||||||
2
vendor/github.com/prometheus/procfs/Makefile.common
сгенерированный
поставляемый
2
vendor/github.com/prometheus/procfs/Makefile.common
сгенерированный
поставляемый
@@ -78,7 +78,7 @@ ifneq ($(shell which gotestsum),)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
PROMU_VERSION ?= 0.5.0
|
PROMU_VERSION ?= 0.6.0
|
||||||
PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz
|
PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz
|
||||||
|
|
||||||
GOLANGCI_LINT :=
|
GOLANGCI_LINT :=
|
||||||
|
|||||||
16
vendor/github.com/prometheus/procfs/cpuinfo.go
сгенерированный
поставляемый
16
vendor/github.com/prometheus/procfs/cpuinfo.go
сгенерированный
поставляемый
@@ -313,6 +313,22 @@ func parseCPUInfoS390X(info []byte) ([]CPUInfo, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
cpuinfo[i].CPUMHz = v
|
cpuinfo[i].CPUMHz = v
|
||||||
|
case "physical id":
|
||||||
|
cpuinfo[i].PhysicalID = field[1]
|
||||||
|
case "core id":
|
||||||
|
cpuinfo[i].CoreID = field[1]
|
||||||
|
case "cpu cores":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].CPUCores = uint(v)
|
||||||
|
case "siblings":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].Siblings = uint(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go
сгенерированный
поставляемый
Обычный файл
19
vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2020 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build linux
|
||||||
|
// +build riscv riscv64
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
var parseCPUInfo = parseCPUInfoRISCV
|
||||||
49
vendor/github.com/prometheus/procfs/fixtures.ttar
сгенерированный
поставляемый
49
vendor/github.com/prometheus/procfs/fixtures.ttar
сгенерированный
поставляемый
@@ -111,7 +111,7 @@ Max core file size 0 unlimited bytes
|
|||||||
Max resident set unlimited unlimited bytes
|
Max resident set unlimited unlimited bytes
|
||||||
Max processes 62898 62898 processes
|
Max processes 62898 62898 processes
|
||||||
Max open files 2048 4096 files
|
Max open files 2048 4096 files
|
||||||
Max locked memory 65536 65536 bytes
|
Max locked memory 18446744073708503040 18446744073708503040 bytes
|
||||||
Max address space 8589934592 unlimited bytes
|
Max address space 8589934592 unlimited bytes
|
||||||
Max file locks unlimited unlimited locks
|
Max file locks unlimited unlimited locks
|
||||||
Max pending signals 62898 62898 signals
|
Max pending signals 62898 62898 signals
|
||||||
@@ -2129,6 +2129,24 @@ Lines: 6
|
|||||||
4 1FB3C 0 1282A8F 0
|
4 1FB3C 0 1282A8F 0
|
||||||
Mode: 644
|
Mode: 644
|
||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Path: fixtures/proc/net/protocols
|
||||||
|
Lines: 14
|
||||||
|
protocol size sockets memory press maxhdr slab module cl co di ac io in de sh ss gs se re sp bi br ha uh gp em
|
||||||
|
PACKET 1344 2 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
|
||||||
|
PINGv6 1112 0 -1 NI 0 yes kernel y y y n n y n n y y y y n y y y y y n
|
||||||
|
RAWv6 1112 1 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n
|
||||||
|
UDPLITEv6 1216 0 57 NI 0 yes kernel y y y n y y y n y y y y n n n y y y n
|
||||||
|
UDPv6 1216 10 57 NI 0 yes kernel y y y n y y y n y y y y n n n y y y n
|
||||||
|
TCPv6 2144 1937 1225378 no 320 yes kernel y y y y y y y y y y y y y n y y y y y
|
||||||
|
UNIX 1024 120 -1 NI 0 yes kernel n n n n n n n n n n n n n n n n n n n
|
||||||
|
UDP-Lite 1024 0 57 NI 0 yes kernel y y y n y y y n y y y y y n n y y y n
|
||||||
|
PING 904 0 -1 NI 0 yes kernel y y y n n y n n y y y y n y y y y y n
|
||||||
|
RAW 912 0 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n
|
||||||
|
UDP 1024 73 57 NI 0 yes kernel y y y n y y y n y y y y y n n y y y n
|
||||||
|
TCP 1984 93064 1225378 yes 320 yes kernel y y y y y y y y y y y y y n y y y y y
|
||||||
|
NETLINK 1040 16 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
|
||||||
|
Mode: 444
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Directory: fixtures/proc/net/rpc
|
Directory: fixtures/proc/net/rpc
|
||||||
Mode: 755
|
Mode: 755
|
||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@@ -4639,6 +4657,35 @@ Mode: 644
|
|||||||
Directory: fixtures/sys/devices/system
|
Directory: fixtures/sys/devices/system
|
||||||
Mode: 775
|
Mode: 775
|
||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Directory: fixtures/sys/devices/system/node
|
||||||
|
Mode: 775
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Directory: fixtures/sys/devices/system/node/node1
|
||||||
|
Mode: 755
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Path: fixtures/sys/devices/system/node/node1/vmstat
|
||||||
|
Lines: 6
|
||||||
|
nr_free_pages 1
|
||||||
|
nr_zone_inactive_anon 2
|
||||||
|
nr_zone_active_anon 3
|
||||||
|
nr_zone_inactive_file 4
|
||||||
|
nr_zone_active_file 5
|
||||||
|
nr_zone_unevictable 6
|
||||||
|
Mode: 644
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Directory: fixtures/sys/devices/system/node/node2
|
||||||
|
Mode: 755
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Path: fixtures/sys/devices/system/node/node2/vmstat
|
||||||
|
Lines: 6
|
||||||
|
nr_free_pages 7
|
||||||
|
nr_zone_inactive_anon 8
|
||||||
|
nr_zone_active_anon 9
|
||||||
|
nr_zone_inactive_file 10
|
||||||
|
nr_zone_active_file 11
|
||||||
|
nr_zone_unevictable 12
|
||||||
|
Mode: 644
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Directory: fixtures/sys/devices/system/clocksource
|
Directory: fixtures/sys/devices/system/clocksource
|
||||||
Mode: 775
|
Mode: 775
|
||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|||||||
23
vendor/github.com/prometheus/procfs/mdstat.go
сгенерированный
поставляемый
23
vendor/github.com/prometheus/procfs/mdstat.go
сгенерированный
поставляемый
@@ -22,8 +22,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
statusLineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`)
|
statusLineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`)
|
||||||
recoveryLineRE = regexp.MustCompile(`\((\d+)/\d+\)`)
|
recoveryLineRE = regexp.MustCompile(`\((\d+)/\d+\)`)
|
||||||
|
componentDeviceRE = regexp.MustCompile(`(.*)\[\d+\]`)
|
||||||
)
|
)
|
||||||
|
|
||||||
// MDStat holds info parsed from /proc/mdstat.
|
// MDStat holds info parsed from /proc/mdstat.
|
||||||
@@ -44,6 +45,8 @@ type MDStat struct {
|
|||||||
BlocksTotal int64
|
BlocksTotal int64
|
||||||
// Number of blocks on the device that are in sync.
|
// Number of blocks on the device that are in sync.
|
||||||
BlocksSynced int64
|
BlocksSynced int64
|
||||||
|
// Name of md component devices
|
||||||
|
Devices []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// MDStat parses an mdstat-file (/proc/mdstat) and returns a slice of
|
// MDStat parses an mdstat-file (/proc/mdstat) and returns a slice of
|
||||||
@@ -140,6 +143,7 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) {
|
|||||||
DisksTotal: total,
|
DisksTotal: total,
|
||||||
BlocksTotal: size,
|
BlocksTotal: size,
|
||||||
BlocksSynced: syncedBlocks,
|
BlocksSynced: syncedBlocks,
|
||||||
|
Devices: evalComponentDevices(deviceFields),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,3 +199,18 @@ func evalRecoveryLine(recoveryLine string) (syncedBlocks int64, err error) {
|
|||||||
|
|
||||||
return syncedBlocks, nil
|
return syncedBlocks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func evalComponentDevices(deviceFields []string) []string {
|
||||||
|
mdComponentDevices := make([]string, 0)
|
||||||
|
if len(deviceFields) > 3 {
|
||||||
|
for _, field := range deviceFields[4:] {
|
||||||
|
match := componentDeviceRE.FindStringSubmatch(field)
|
||||||
|
if match == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
mdComponentDevices = append(mdComponentDevices, match[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mdComponentDevices
|
||||||
|
}
|
||||||
|
|||||||
192
vendor/github.com/prometheus/procfs/meminfo.go
сгенерированный
поставляемый
192
vendor/github.com/prometheus/procfs/meminfo.go
сгенерированный
поставляемый
@@ -28,9 +28,9 @@ import (
|
|||||||
type Meminfo struct {
|
type Meminfo struct {
|
||||||
// Total usable ram (i.e. physical ram minus a few reserved
|
// Total usable ram (i.e. physical ram minus a few reserved
|
||||||
// bits and the kernel binary code)
|
// bits and the kernel binary code)
|
||||||
MemTotal uint64
|
MemTotal *uint64
|
||||||
// The sum of LowFree+HighFree
|
// The sum of LowFree+HighFree
|
||||||
MemFree uint64
|
MemFree *uint64
|
||||||
// An estimate of how much memory is available for starting
|
// An estimate of how much memory is available for starting
|
||||||
// new applications, without swapping. Calculated from
|
// new applications, without swapping. Calculated from
|
||||||
// MemFree, SReclaimable, the size of the file LRU lists, and
|
// MemFree, SReclaimable, the size of the file LRU lists, and
|
||||||
@@ -39,59 +39,59 @@ type Meminfo struct {
|
|||||||
// well, and that not all reclaimable slab will be
|
// well, and that not all reclaimable slab will be
|
||||||
// reclaimable, due to items being in use. The impact of those
|
// reclaimable, due to items being in use. The impact of those
|
||||||
// factors will vary from system to system.
|
// factors will vary from system to system.
|
||||||
MemAvailable uint64
|
MemAvailable *uint64
|
||||||
// Relatively temporary storage for raw disk blocks shouldn't
|
// Relatively temporary storage for raw disk blocks shouldn't
|
||||||
// get tremendously large (20MB or so)
|
// get tremendously large (20MB or so)
|
||||||
Buffers uint64
|
Buffers *uint64
|
||||||
Cached uint64
|
Cached *uint64
|
||||||
// Memory that once was swapped out, is swapped back in but
|
// Memory that once was swapped out, is swapped back in but
|
||||||
// still also is in the swapfile (if memory is needed it
|
// still also is in the swapfile (if memory is needed it
|
||||||
// doesn't need to be swapped out AGAIN because it is already
|
// doesn't need to be swapped out AGAIN because it is already
|
||||||
// in the swapfile. This saves I/O)
|
// in the swapfile. This saves I/O)
|
||||||
SwapCached uint64
|
SwapCached *uint64
|
||||||
// Memory that has been used more recently and usually not
|
// Memory that has been used more recently and usually not
|
||||||
// reclaimed unless absolutely necessary.
|
// reclaimed unless absolutely necessary.
|
||||||
Active uint64
|
Active *uint64
|
||||||
// Memory which has been less recently used. It is more
|
// Memory which has been less recently used. It is more
|
||||||
// eligible to be reclaimed for other purposes
|
// eligible to be reclaimed for other purposes
|
||||||
Inactive uint64
|
Inactive *uint64
|
||||||
ActiveAnon uint64
|
ActiveAnon *uint64
|
||||||
InactiveAnon uint64
|
InactiveAnon *uint64
|
||||||
ActiveFile uint64
|
ActiveFile *uint64
|
||||||
InactiveFile uint64
|
InactiveFile *uint64
|
||||||
Unevictable uint64
|
Unevictable *uint64
|
||||||
Mlocked uint64
|
Mlocked *uint64
|
||||||
// total amount of swap space available
|
// total amount of swap space available
|
||||||
SwapTotal uint64
|
SwapTotal *uint64
|
||||||
// Memory which has been evicted from RAM, and is temporarily
|
// Memory which has been evicted from RAM, and is temporarily
|
||||||
// on the disk
|
// on the disk
|
||||||
SwapFree uint64
|
SwapFree *uint64
|
||||||
// Memory which is waiting to get written back to the disk
|
// Memory which is waiting to get written back to the disk
|
||||||
Dirty uint64
|
Dirty *uint64
|
||||||
// Memory which is actively being written back to the disk
|
// Memory which is actively being written back to the disk
|
||||||
Writeback uint64
|
Writeback *uint64
|
||||||
// Non-file backed pages mapped into userspace page tables
|
// Non-file backed pages mapped into userspace page tables
|
||||||
AnonPages uint64
|
AnonPages *uint64
|
||||||
// files which have been mapped, such as libraries
|
// files which have been mapped, such as libraries
|
||||||
Mapped uint64
|
Mapped *uint64
|
||||||
Shmem uint64
|
Shmem *uint64
|
||||||
// in-kernel data structures cache
|
// in-kernel data structures cache
|
||||||
Slab uint64
|
Slab *uint64
|
||||||
// Part of Slab, that might be reclaimed, such as caches
|
// Part of Slab, that might be reclaimed, such as caches
|
||||||
SReclaimable uint64
|
SReclaimable *uint64
|
||||||
// Part of Slab, that cannot be reclaimed on memory pressure
|
// Part of Slab, that cannot be reclaimed on memory pressure
|
||||||
SUnreclaim uint64
|
SUnreclaim *uint64
|
||||||
KernelStack uint64
|
KernelStack *uint64
|
||||||
// amount of memory dedicated to the lowest level of page
|
// amount of memory dedicated to the lowest level of page
|
||||||
// tables.
|
// tables.
|
||||||
PageTables uint64
|
PageTables *uint64
|
||||||
// NFS pages sent to the server, but not yet committed to
|
// NFS pages sent to the server, but not yet committed to
|
||||||
// stable storage
|
// stable storage
|
||||||
NFSUnstable uint64
|
NFSUnstable *uint64
|
||||||
// Memory used for block device "bounce buffers"
|
// Memory used for block device "bounce buffers"
|
||||||
Bounce uint64
|
Bounce *uint64
|
||||||
// Memory used by FUSE for temporary writeback buffers
|
// Memory used by FUSE for temporary writeback buffers
|
||||||
WritebackTmp uint64
|
WritebackTmp *uint64
|
||||||
// Based on the overcommit ratio ('vm.overcommit_ratio'),
|
// Based on the overcommit ratio ('vm.overcommit_ratio'),
|
||||||
// this is the total amount of memory currently available to
|
// this is the total amount of memory currently available to
|
||||||
// be allocated on the system. This limit is only adhered to
|
// be allocated on the system. This limit is only adhered to
|
||||||
@@ -105,7 +105,7 @@ type Meminfo struct {
|
|||||||
// yield a CommitLimit of 7.3G.
|
// yield a CommitLimit of 7.3G.
|
||||||
// For more details, see the memory overcommit documentation
|
// For more details, see the memory overcommit documentation
|
||||||
// in vm/overcommit-accounting.
|
// in vm/overcommit-accounting.
|
||||||
CommitLimit uint64
|
CommitLimit *uint64
|
||||||
// The amount of memory presently allocated on the system.
|
// The amount of memory presently allocated on the system.
|
||||||
// The committed memory is a sum of all of the memory which
|
// The committed memory is a sum of all of the memory which
|
||||||
// has been allocated by processes, even if it has not been
|
// has been allocated by processes, even if it has not been
|
||||||
@@ -119,27 +119,27 @@ type Meminfo struct {
|
|||||||
// This is useful if one needs to guarantee that processes will
|
// This is useful if one needs to guarantee that processes will
|
||||||
// not fail due to lack of memory once that memory has been
|
// not fail due to lack of memory once that memory has been
|
||||||
// successfully allocated.
|
// successfully allocated.
|
||||||
CommittedAS uint64
|
CommittedAS *uint64
|
||||||
// total size of vmalloc memory area
|
// total size of vmalloc memory area
|
||||||
VmallocTotal uint64
|
VmallocTotal *uint64
|
||||||
// amount of vmalloc area which is used
|
// amount of vmalloc area which is used
|
||||||
VmallocUsed uint64
|
VmallocUsed *uint64
|
||||||
// largest contiguous block of vmalloc area which is free
|
// largest contiguous block of vmalloc area which is free
|
||||||
VmallocChunk uint64
|
VmallocChunk *uint64
|
||||||
HardwareCorrupted uint64
|
HardwareCorrupted *uint64
|
||||||
AnonHugePages uint64
|
AnonHugePages *uint64
|
||||||
ShmemHugePages uint64
|
ShmemHugePages *uint64
|
||||||
ShmemPmdMapped uint64
|
ShmemPmdMapped *uint64
|
||||||
CmaTotal uint64
|
CmaTotal *uint64
|
||||||
CmaFree uint64
|
CmaFree *uint64
|
||||||
HugePagesTotal uint64
|
HugePagesTotal *uint64
|
||||||
HugePagesFree uint64
|
HugePagesFree *uint64
|
||||||
HugePagesRsvd uint64
|
HugePagesRsvd *uint64
|
||||||
HugePagesSurp uint64
|
HugePagesSurp *uint64
|
||||||
Hugepagesize uint64
|
Hugepagesize *uint64
|
||||||
DirectMap4k uint64
|
DirectMap4k *uint64
|
||||||
DirectMap2M uint64
|
DirectMap2M *uint64
|
||||||
DirectMap1G uint64
|
DirectMap1G *uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// Meminfo returns an information about current kernel/system memory statistics.
|
// Meminfo returns an information about current kernel/system memory statistics.
|
||||||
@@ -175,101 +175,101 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) {
|
|||||||
|
|
||||||
switch fields[0] {
|
switch fields[0] {
|
||||||
case "MemTotal:":
|
case "MemTotal:":
|
||||||
m.MemTotal = v
|
m.MemTotal = &v
|
||||||
case "MemFree:":
|
case "MemFree:":
|
||||||
m.MemFree = v
|
m.MemFree = &v
|
||||||
case "MemAvailable:":
|
case "MemAvailable:":
|
||||||
m.MemAvailable = v
|
m.MemAvailable = &v
|
||||||
case "Buffers:":
|
case "Buffers:":
|
||||||
m.Buffers = v
|
m.Buffers = &v
|
||||||
case "Cached:":
|
case "Cached:":
|
||||||
m.Cached = v
|
m.Cached = &v
|
||||||
case "SwapCached:":
|
case "SwapCached:":
|
||||||
m.SwapCached = v
|
m.SwapCached = &v
|
||||||
case "Active:":
|
case "Active:":
|
||||||
m.Active = v
|
m.Active = &v
|
||||||
case "Inactive:":
|
case "Inactive:":
|
||||||
m.Inactive = v
|
m.Inactive = &v
|
||||||
case "Active(anon):":
|
case "Active(anon):":
|
||||||
m.ActiveAnon = v
|
m.ActiveAnon = &v
|
||||||
case "Inactive(anon):":
|
case "Inactive(anon):":
|
||||||
m.InactiveAnon = v
|
m.InactiveAnon = &v
|
||||||
case "Active(file):":
|
case "Active(file):":
|
||||||
m.ActiveFile = v
|
m.ActiveFile = &v
|
||||||
case "Inactive(file):":
|
case "Inactive(file):":
|
||||||
m.InactiveFile = v
|
m.InactiveFile = &v
|
||||||
case "Unevictable:":
|
case "Unevictable:":
|
||||||
m.Unevictable = v
|
m.Unevictable = &v
|
||||||
case "Mlocked:":
|
case "Mlocked:":
|
||||||
m.Mlocked = v
|
m.Mlocked = &v
|
||||||
case "SwapTotal:":
|
case "SwapTotal:":
|
||||||
m.SwapTotal = v
|
m.SwapTotal = &v
|
||||||
case "SwapFree:":
|
case "SwapFree:":
|
||||||
m.SwapFree = v
|
m.SwapFree = &v
|
||||||
case "Dirty:":
|
case "Dirty:":
|
||||||
m.Dirty = v
|
m.Dirty = &v
|
||||||
case "Writeback:":
|
case "Writeback:":
|
||||||
m.Writeback = v
|
m.Writeback = &v
|
||||||
case "AnonPages:":
|
case "AnonPages:":
|
||||||
m.AnonPages = v
|
m.AnonPages = &v
|
||||||
case "Mapped:":
|
case "Mapped:":
|
||||||
m.Mapped = v
|
m.Mapped = &v
|
||||||
case "Shmem:":
|
case "Shmem:":
|
||||||
m.Shmem = v
|
m.Shmem = &v
|
||||||
case "Slab:":
|
case "Slab:":
|
||||||
m.Slab = v
|
m.Slab = &v
|
||||||
case "SReclaimable:":
|
case "SReclaimable:":
|
||||||
m.SReclaimable = v
|
m.SReclaimable = &v
|
||||||
case "SUnreclaim:":
|
case "SUnreclaim:":
|
||||||
m.SUnreclaim = v
|
m.SUnreclaim = &v
|
||||||
case "KernelStack:":
|
case "KernelStack:":
|
||||||
m.KernelStack = v
|
m.KernelStack = &v
|
||||||
case "PageTables:":
|
case "PageTables:":
|
||||||
m.PageTables = v
|
m.PageTables = &v
|
||||||
case "NFS_Unstable:":
|
case "NFS_Unstable:":
|
||||||
m.NFSUnstable = v
|
m.NFSUnstable = &v
|
||||||
case "Bounce:":
|
case "Bounce:":
|
||||||
m.Bounce = v
|
m.Bounce = &v
|
||||||
case "WritebackTmp:":
|
case "WritebackTmp:":
|
||||||
m.WritebackTmp = v
|
m.WritebackTmp = &v
|
||||||
case "CommitLimit:":
|
case "CommitLimit:":
|
||||||
m.CommitLimit = v
|
m.CommitLimit = &v
|
||||||
case "Committed_AS:":
|
case "Committed_AS:":
|
||||||
m.CommittedAS = v
|
m.CommittedAS = &v
|
||||||
case "VmallocTotal:":
|
case "VmallocTotal:":
|
||||||
m.VmallocTotal = v
|
m.VmallocTotal = &v
|
||||||
case "VmallocUsed:":
|
case "VmallocUsed:":
|
||||||
m.VmallocUsed = v
|
m.VmallocUsed = &v
|
||||||
case "VmallocChunk:":
|
case "VmallocChunk:":
|
||||||
m.VmallocChunk = v
|
m.VmallocChunk = &v
|
||||||
case "HardwareCorrupted:":
|
case "HardwareCorrupted:":
|
||||||
m.HardwareCorrupted = v
|
m.HardwareCorrupted = &v
|
||||||
case "AnonHugePages:":
|
case "AnonHugePages:":
|
||||||
m.AnonHugePages = v
|
m.AnonHugePages = &v
|
||||||
case "ShmemHugePages:":
|
case "ShmemHugePages:":
|
||||||
m.ShmemHugePages = v
|
m.ShmemHugePages = &v
|
||||||
case "ShmemPmdMapped:":
|
case "ShmemPmdMapped:":
|
||||||
m.ShmemPmdMapped = v
|
m.ShmemPmdMapped = &v
|
||||||
case "CmaTotal:":
|
case "CmaTotal:":
|
||||||
m.CmaTotal = v
|
m.CmaTotal = &v
|
||||||
case "CmaFree:":
|
case "CmaFree:":
|
||||||
m.CmaFree = v
|
m.CmaFree = &v
|
||||||
case "HugePages_Total:":
|
case "HugePages_Total:":
|
||||||
m.HugePagesTotal = v
|
m.HugePagesTotal = &v
|
||||||
case "HugePages_Free:":
|
case "HugePages_Free:":
|
||||||
m.HugePagesFree = v
|
m.HugePagesFree = &v
|
||||||
case "HugePages_Rsvd:":
|
case "HugePages_Rsvd:":
|
||||||
m.HugePagesRsvd = v
|
m.HugePagesRsvd = &v
|
||||||
case "HugePages_Surp:":
|
case "HugePages_Surp:":
|
||||||
m.HugePagesSurp = v
|
m.HugePagesSurp = &v
|
||||||
case "Hugepagesize:":
|
case "Hugepagesize:":
|
||||||
m.Hugepagesize = v
|
m.Hugepagesize = &v
|
||||||
case "DirectMap4k:":
|
case "DirectMap4k:":
|
||||||
m.DirectMap4k = v
|
m.DirectMap4k = &v
|
||||||
case "DirectMap2M:":
|
case "DirectMap2M:":
|
||||||
m.DirectMap2M = v
|
m.DirectMap2M = &v
|
||||||
case "DirectMap1G:":
|
case "DirectMap1G:":
|
||||||
m.DirectMap1G = v
|
m.DirectMap1G = &v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
vendor/github.com/prometheus/procfs/mountstats.go
сгенерированный
поставляемый
15
vendor/github.com/prometheus/procfs/mountstats.go
сгенерированный
поставляемый
@@ -338,12 +338,12 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e
|
|||||||
if len(ss) == 0 {
|
if len(ss) == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if len(ss) < 2 {
|
|
||||||
return nil, fmt.Errorf("not enough information for NFS stats: %v", ss)
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ss[0] {
|
switch ss[0] {
|
||||||
case fieldOpts:
|
case fieldOpts:
|
||||||
|
if len(ss) < 2 {
|
||||||
|
return nil, fmt.Errorf("not enough information for NFS stats: %v", ss)
|
||||||
|
}
|
||||||
if stats.Opts == nil {
|
if stats.Opts == nil {
|
||||||
stats.Opts = map[string]string{}
|
stats.Opts = map[string]string{}
|
||||||
}
|
}
|
||||||
@@ -356,6 +356,9 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case fieldAge:
|
case fieldAge:
|
||||||
|
if len(ss) < 2 {
|
||||||
|
return nil, fmt.Errorf("not enough information for NFS stats: %v", ss)
|
||||||
|
}
|
||||||
// Age integer is in seconds
|
// Age integer is in seconds
|
||||||
d, err := time.ParseDuration(ss[1] + "s")
|
d, err := time.ParseDuration(ss[1] + "s")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -364,6 +367,9 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e
|
|||||||
|
|
||||||
stats.Age = d
|
stats.Age = d
|
||||||
case fieldBytes:
|
case fieldBytes:
|
||||||
|
if len(ss) < 2 {
|
||||||
|
return nil, fmt.Errorf("not enough information for NFS stats: %v", ss)
|
||||||
|
}
|
||||||
bstats, err := parseNFSBytesStats(ss[1:])
|
bstats, err := parseNFSBytesStats(ss[1:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -371,6 +377,9 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e
|
|||||||
|
|
||||||
stats.Bytes = *bstats
|
stats.Bytes = *bstats
|
||||||
case fieldEvents:
|
case fieldEvents:
|
||||||
|
if len(ss) < 2 {
|
||||||
|
return nil, fmt.Errorf("not enough information for NFS stats: %v", ss)
|
||||||
|
}
|
||||||
estats, err := parseNFSEventsStats(ss[1:])
|
estats, err := parseNFSEventsStats(ss[1:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
180
vendor/github.com/prometheus/procfs/net_protocols.go
сгенерированный
поставляемый
Обычный файл
180
vendor/github.com/prometheus/procfs/net_protocols.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,180 @@
|
|||||||
|
// Copyright 2020 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/procfs/internal/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NetProtocolStats stores the contents from /proc/net/protocols
|
||||||
|
type NetProtocolStats map[string]NetProtocolStatLine
|
||||||
|
|
||||||
|
// NetProtocolStatLine contains a single line parsed from /proc/net/protocols. We
|
||||||
|
// only care about the first six columns as the rest are not likely to change
|
||||||
|
// and only serve to provide a set of capabilities for each protocol.
|
||||||
|
type NetProtocolStatLine struct {
|
||||||
|
Name string // 0 The name of the protocol
|
||||||
|
Size uint64 // 1 The size, in bytes, of a given protocol structure. e.g. sizeof(struct tcp_sock) or sizeof(struct unix_sock)
|
||||||
|
Sockets int64 // 2 Number of sockets in use by this protocol
|
||||||
|
Memory int64 // 3 Number of 4KB pages allocated by all sockets of this protocol
|
||||||
|
Pressure int // 4 This is either yes, no, or NI (not implemented). For the sake of simplicity we treat NI as not experiencing memory pressure.
|
||||||
|
MaxHeader uint64 // 5 Protocol specific max header size
|
||||||
|
Slab bool // 6 Indicates whether or not memory is allocated from the SLAB
|
||||||
|
ModuleName string // 7 The name of the module that implemented this protocol or "kernel" if not from a module
|
||||||
|
Capabilities NetProtocolCapabilities
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetProtocolCapabilities contains a list of capabilities for each protocol
|
||||||
|
type NetProtocolCapabilities struct {
|
||||||
|
Close bool // 8
|
||||||
|
Connect bool // 9
|
||||||
|
Disconnect bool // 10
|
||||||
|
Accept bool // 11
|
||||||
|
IoCtl bool // 12
|
||||||
|
Init bool // 13
|
||||||
|
Destroy bool // 14
|
||||||
|
Shutdown bool // 15
|
||||||
|
SetSockOpt bool // 16
|
||||||
|
GetSockOpt bool // 17
|
||||||
|
SendMsg bool // 18
|
||||||
|
RecvMsg bool // 19
|
||||||
|
SendPage bool // 20
|
||||||
|
Bind bool // 21
|
||||||
|
BacklogRcv bool // 22
|
||||||
|
Hash bool // 23
|
||||||
|
UnHash bool // 24
|
||||||
|
GetPort bool // 25
|
||||||
|
EnterMemoryPressure bool // 26
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetProtocols reads stats from /proc/net/protocols and returns a map of
|
||||||
|
// PortocolStatLine entries. As of this writing no official Linux Documentation
|
||||||
|
// exists, however the source is fairly self-explanatory and the format seems
|
||||||
|
// stable since its introduction in 2.6.12-rc2
|
||||||
|
// Linux 2.6.12-rc2 - https://elixir.bootlin.com/linux/v2.6.12-rc2/source/net/core/sock.c#L1452
|
||||||
|
// Linux 5.10 - https://elixir.bootlin.com/linux/v5.10.4/source/net/core/sock.c#L3586
|
||||||
|
func (fs FS) NetProtocols() (NetProtocolStats, error) {
|
||||||
|
data, err := util.ReadFileNoStat(fs.proc.Path("net/protocols"))
|
||||||
|
if err != nil {
|
||||||
|
return NetProtocolStats{}, err
|
||||||
|
}
|
||||||
|
return parseNetProtocols(bufio.NewScanner(bytes.NewReader(data)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseNetProtocols(s *bufio.Scanner) (NetProtocolStats, error) {
|
||||||
|
nps := NetProtocolStats{}
|
||||||
|
|
||||||
|
// Skip the header line
|
||||||
|
s.Scan()
|
||||||
|
|
||||||
|
for s.Scan() {
|
||||||
|
line, err := nps.parseLine(s.Text())
|
||||||
|
if err != nil {
|
||||||
|
return NetProtocolStats{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
nps[line.Name] = *line
|
||||||
|
}
|
||||||
|
return nps, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps NetProtocolStats) parseLine(rawLine string) (*NetProtocolStatLine, error) {
|
||||||
|
line := &NetProtocolStatLine{Capabilities: NetProtocolCapabilities{}}
|
||||||
|
var err error
|
||||||
|
const enabled = "yes"
|
||||||
|
const disabled = "no"
|
||||||
|
|
||||||
|
fields := strings.Fields(rawLine)
|
||||||
|
line.Name = fields[0]
|
||||||
|
line.Size, err = strconv.ParseUint(fields[1], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
line.Sockets, err = strconv.ParseInt(fields[2], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
line.Memory, err = strconv.ParseInt(fields[3], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if fields[4] == enabled {
|
||||||
|
line.Pressure = 1
|
||||||
|
} else if fields[4] == disabled {
|
||||||
|
line.Pressure = 0
|
||||||
|
} else {
|
||||||
|
line.Pressure = -1
|
||||||
|
}
|
||||||
|
line.MaxHeader, err = strconv.ParseUint(fields[5], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if fields[6] == enabled {
|
||||||
|
line.Slab = true
|
||||||
|
} else if fields[6] == disabled {
|
||||||
|
line.Slab = false
|
||||||
|
} else {
|
||||||
|
return nil, fmt.Errorf("unable to parse capability for protocol: %s", line.Name)
|
||||||
|
}
|
||||||
|
line.ModuleName = fields[7]
|
||||||
|
|
||||||
|
err = line.Capabilities.parseCapabilities(fields[8:])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return line, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pc *NetProtocolCapabilities) parseCapabilities(capabilities []string) error {
|
||||||
|
// The capabilities are all bools so we can loop over to map them
|
||||||
|
capabilityFields := [...]*bool{
|
||||||
|
&pc.Close,
|
||||||
|
&pc.Connect,
|
||||||
|
&pc.Disconnect,
|
||||||
|
&pc.Accept,
|
||||||
|
&pc.IoCtl,
|
||||||
|
&pc.Init,
|
||||||
|
&pc.Destroy,
|
||||||
|
&pc.Shutdown,
|
||||||
|
&pc.SetSockOpt,
|
||||||
|
&pc.GetSockOpt,
|
||||||
|
&pc.SendMsg,
|
||||||
|
&pc.RecvMsg,
|
||||||
|
&pc.SendPage,
|
||||||
|
&pc.Bind,
|
||||||
|
&pc.BacklogRcv,
|
||||||
|
&pc.Hash,
|
||||||
|
&pc.UnHash,
|
||||||
|
&pc.GetPort,
|
||||||
|
&pc.EnterMemoryPressure,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < len(capabilities); i++ {
|
||||||
|
if capabilities[i] == "y" {
|
||||||
|
*capabilityFields[i] = true
|
||||||
|
} else if capabilities[i] == "n" {
|
||||||
|
*capabilityFields[i] = false
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("unable to parse capability block for protocol: position %d", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
82
vendor/github.com/prometheus/procfs/proc_limits.go
сгенерированный
поставляемый
82
vendor/github.com/prometheus/procfs/proc_limits.go
сгенерированный
поставляемый
@@ -26,55 +26,55 @@ import (
|
|||||||
// http://man7.org/linux/man-pages/man2/getrlimit.2.html.
|
// http://man7.org/linux/man-pages/man2/getrlimit.2.html.
|
||||||
type ProcLimits struct {
|
type ProcLimits struct {
|
||||||
// CPU time limit in seconds.
|
// CPU time limit in seconds.
|
||||||
CPUTime int64
|
CPUTime uint64
|
||||||
// Maximum size of files that the process may create.
|
// Maximum size of files that the process may create.
|
||||||
FileSize int64
|
FileSize uint64
|
||||||
// Maximum size of the process's data segment (initialized data,
|
// Maximum size of the process's data segment (initialized data,
|
||||||
// uninitialized data, and heap).
|
// uninitialized data, and heap).
|
||||||
DataSize int64
|
DataSize uint64
|
||||||
// Maximum size of the process stack in bytes.
|
// Maximum size of the process stack in bytes.
|
||||||
StackSize int64
|
StackSize uint64
|
||||||
// Maximum size of a core file.
|
// Maximum size of a core file.
|
||||||
CoreFileSize int64
|
CoreFileSize uint64
|
||||||
// Limit of the process's resident set in pages.
|
// Limit of the process's resident set in pages.
|
||||||
ResidentSet int64
|
ResidentSet uint64
|
||||||
// Maximum number of processes that can be created for the real user ID of
|
// Maximum number of processes that can be created for the real user ID of
|
||||||
// the calling process.
|
// the calling process.
|
||||||
Processes int64
|
Processes uint64
|
||||||
// Value one greater than the maximum file descriptor number that can be
|
// Value one greater than the maximum file descriptor number that can be
|
||||||
// opened by this process.
|
// opened by this process.
|
||||||
OpenFiles int64
|
OpenFiles uint64
|
||||||
// Maximum number of bytes of memory that may be locked into RAM.
|
// Maximum number of bytes of memory that may be locked into RAM.
|
||||||
LockedMemory int64
|
LockedMemory uint64
|
||||||
// Maximum size of the process's virtual memory address space in bytes.
|
// Maximum size of the process's virtual memory address space in bytes.
|
||||||
AddressSpace int64
|
AddressSpace uint64
|
||||||
// Limit on the combined number of flock(2) locks and fcntl(2) leases that
|
// Limit on the combined number of flock(2) locks and fcntl(2) leases that
|
||||||
// this process may establish.
|
// this process may establish.
|
||||||
FileLocks int64
|
FileLocks uint64
|
||||||
// Limit of signals that may be queued for the real user ID of the calling
|
// Limit of signals that may be queued for the real user ID of the calling
|
||||||
// process.
|
// process.
|
||||||
PendingSignals int64
|
PendingSignals uint64
|
||||||
// Limit on the number of bytes that can be allocated for POSIX message
|
// Limit on the number of bytes that can be allocated for POSIX message
|
||||||
// queues for the real user ID of the calling process.
|
// queues for the real user ID of the calling process.
|
||||||
MsqqueueSize int64
|
MsqqueueSize uint64
|
||||||
// Limit of the nice priority set using setpriority(2) or nice(2).
|
// Limit of the nice priority set using setpriority(2) or nice(2).
|
||||||
NicePriority int64
|
NicePriority uint64
|
||||||
// Limit of the real-time priority set using sched_setscheduler(2) or
|
// Limit of the real-time priority set using sched_setscheduler(2) or
|
||||||
// sched_setparam(2).
|
// sched_setparam(2).
|
||||||
RealtimePriority int64
|
RealtimePriority uint64
|
||||||
// Limit (in microseconds) on the amount of CPU time that a process
|
// Limit (in microseconds) on the amount of CPU time that a process
|
||||||
// scheduled under a real-time scheduling policy may consume without making
|
// scheduled under a real-time scheduling policy may consume without making
|
||||||
// a blocking system call.
|
// a blocking system call.
|
||||||
RealtimeTimeout int64
|
RealtimeTimeout uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
limitsFields = 3
|
limitsFields = 4
|
||||||
limitsUnlimited = "unlimited"
|
limitsUnlimited = "unlimited"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
limitsDelimiter = regexp.MustCompile(" +")
|
limitsMatch = regexp.MustCompile(`(Max \w+\s{0,1}?\w*\s{0,1}\w*)\s{2,}(\w+)\s+(\w+)`)
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewLimits returns the current soft limits of the process.
|
// NewLimits returns the current soft limits of the process.
|
||||||
@@ -96,46 +96,50 @@ func (p Proc) Limits() (ProcLimits, error) {
|
|||||||
l = ProcLimits{}
|
l = ProcLimits{}
|
||||||
s = bufio.NewScanner(f)
|
s = bufio.NewScanner(f)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
s.Scan() // Skip limits header
|
||||||
|
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
fields := limitsDelimiter.Split(s.Text(), limitsFields)
|
//fields := limitsMatch.Split(s.Text(), limitsFields)
|
||||||
|
fields := limitsMatch.FindStringSubmatch(s.Text())
|
||||||
if len(fields) != limitsFields {
|
if len(fields) != limitsFields {
|
||||||
return ProcLimits{}, fmt.Errorf(
|
return ProcLimits{}, fmt.Errorf(
|
||||||
"couldn't parse %s line %s", f.Name(), s.Text())
|
"couldn't parse %s line %s", f.Name(), s.Text())
|
||||||
}
|
}
|
||||||
|
|
||||||
switch fields[0] {
|
switch fields[1] {
|
||||||
case "Max cpu time":
|
case "Max cpu time":
|
||||||
l.CPUTime, err = parseInt(fields[1])
|
l.CPUTime, err = parseUint(fields[2])
|
||||||
case "Max file size":
|
case "Max file size":
|
||||||
l.FileSize, err = parseInt(fields[1])
|
l.FileSize, err = parseUint(fields[2])
|
||||||
case "Max data size":
|
case "Max data size":
|
||||||
l.DataSize, err = parseInt(fields[1])
|
l.DataSize, err = parseUint(fields[2])
|
||||||
case "Max stack size":
|
case "Max stack size":
|
||||||
l.StackSize, err = parseInt(fields[1])
|
l.StackSize, err = parseUint(fields[2])
|
||||||
case "Max core file size":
|
case "Max core file size":
|
||||||
l.CoreFileSize, err = parseInt(fields[1])
|
l.CoreFileSize, err = parseUint(fields[2])
|
||||||
case "Max resident set":
|
case "Max resident set":
|
||||||
l.ResidentSet, err = parseInt(fields[1])
|
l.ResidentSet, err = parseUint(fields[2])
|
||||||
case "Max processes":
|
case "Max processes":
|
||||||
l.Processes, err = parseInt(fields[1])
|
l.Processes, err = parseUint(fields[2])
|
||||||
case "Max open files":
|
case "Max open files":
|
||||||
l.OpenFiles, err = parseInt(fields[1])
|
l.OpenFiles, err = parseUint(fields[2])
|
||||||
case "Max locked memory":
|
case "Max locked memory":
|
||||||
l.LockedMemory, err = parseInt(fields[1])
|
l.LockedMemory, err = parseUint(fields[2])
|
||||||
case "Max address space":
|
case "Max address space":
|
||||||
l.AddressSpace, err = parseInt(fields[1])
|
l.AddressSpace, err = parseUint(fields[2])
|
||||||
case "Max file locks":
|
case "Max file locks":
|
||||||
l.FileLocks, err = parseInt(fields[1])
|
l.FileLocks, err = parseUint(fields[2])
|
||||||
case "Max pending signals":
|
case "Max pending signals":
|
||||||
l.PendingSignals, err = parseInt(fields[1])
|
l.PendingSignals, err = parseUint(fields[2])
|
||||||
case "Max msgqueue size":
|
case "Max msgqueue size":
|
||||||
l.MsqqueueSize, err = parseInt(fields[1])
|
l.MsqqueueSize, err = parseUint(fields[2])
|
||||||
case "Max nice priority":
|
case "Max nice priority":
|
||||||
l.NicePriority, err = parseInt(fields[1])
|
l.NicePriority, err = parseUint(fields[2])
|
||||||
case "Max realtime priority":
|
case "Max realtime priority":
|
||||||
l.RealtimePriority, err = parseInt(fields[1])
|
l.RealtimePriority, err = parseUint(fields[2])
|
||||||
case "Max realtime timeout":
|
case "Max realtime timeout":
|
||||||
l.RealtimeTimeout, err = parseInt(fields[1])
|
l.RealtimeTimeout, err = parseUint(fields[2])
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ProcLimits{}, err
|
return ProcLimits{}, err
|
||||||
@@ -145,11 +149,11 @@ func (p Proc) Limits() (ProcLimits, error) {
|
|||||||
return l, s.Err()
|
return l, s.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseInt(s string) (int64, error) {
|
func parseUint(s string) (uint64, error) {
|
||||||
if s == limitsUnlimited {
|
if s == limitsUnlimited {
|
||||||
return -1, nil
|
return 18446744073709551615, nil
|
||||||
}
|
}
|
||||||
i, err := strconv.ParseInt(s, 10, 64)
|
i, err := strconv.ParseUint(s, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("couldn't parse value %s: %s", s, err)
|
return 0, fmt.Errorf("couldn't parse value %s: %s", s, err)
|
||||||
}
|
}
|
||||||
|
|||||||
21
vendor/github.com/rivo/uniseg/LICENSE.txt
сгенерированный
поставляемый
Обычный файл
21
vendor/github.com/rivo/uniseg/LICENSE.txt
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Oliver Kuederle
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
62
vendor/github.com/rivo/uniseg/README.md
сгенерированный
поставляемый
Обычный файл
62
vendor/github.com/rivo/uniseg/README.md
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,62 @@
|
|||||||
|
# Unicode Text Segmentation for Go
|
||||||
|
|
||||||
|
[](https://godoc.org/github.com/rivo/uniseg)
|
||||||
|
[](https://goreportcard.com/report/github.com/rivo/uniseg)
|
||||||
|
|
||||||
|
This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](http://unicode.org/reports/tr29/) (Unicode version 12.0.0).
|
||||||
|
|
||||||
|
At this point, only the determination of grapheme cluster boundaries is implemented.
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
In Go, [strings are read-only slices of bytes](https://blog.golang.org/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls "grapheme cluster". Here are some examples:
|
||||||
|
|
||||||
|
|String|Bytes (UTF-8)|Code points (runes)|Grapheme clusters|
|
||||||
|
|-|-|-|-|
|
||||||
|
|Käse|6 bytes: `4b 61 cc 88 73 65`|5 code points: `4b 61 308 73 65`|4 clusters: `[4b],[61 308],[73],[65]`|
|
||||||
|
|🏳️🌈|14 bytes: `f0 9f 8f b3 ef b8 8f e2 80 8d f0 9f 8c 88`|4 code points: `1f3f3 fe0f 200d 1f308`|1 cluster: `[1f3f3 fe0f 200d 1f308]`|
|
||||||
|
|🇩🇪|8 bytes: `f0 9f 87 a9 f0 9f 87 aa`|2 code points: `1f1e9 1f1ea`|1 cluster: `[1f1e9 1f1ea]`|
|
||||||
|
|
||||||
|
This package provides a tool to iterate over these grapheme clusters. This may be used to determine the number of user-perceived characters, to split strings in their intended places, or to extract individual characters which form a unit.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go get github.com/rivo/uniseg
|
||||||
|
```
|
||||||
|
|
||||||
|
## Basic Example
|
||||||
|
|
||||||
|
```go
|
||||||
|
package uniseg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/rivo/uniseg"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
gr := uniseg.NewGraphemes("👍🏼!")
|
||||||
|
for gr.Next() {
|
||||||
|
fmt.Printf("%x ", gr.Runes())
|
||||||
|
}
|
||||||
|
// Output: [1f44d 1f3fc] [21]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
Refer to https://godoc.org/github.com/rivo/uniseg for the package's documentation.
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
This package does not depend on any packages outside the standard library.
|
||||||
|
|
||||||
|
## Your Feedback
|
||||||
|
|
||||||
|
Add your issue here on GitHub. Feel free to get in touch if you have any questions.
|
||||||
|
|
||||||
|
## Version
|
||||||
|
|
||||||
|
Version tags will be introduced once Golang modules are official. Consider this version 0.1.
|
||||||
8
vendor/github.com/rivo/uniseg/doc.go
сгенерированный
поставляемый
Обычный файл
8
vendor/github.com/rivo/uniseg/doc.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
Package uniseg implements Unicode Text Segmentation according to Unicode
|
||||||
|
Standard Annex #29 (http://unicode.org/reports/tr29/).
|
||||||
|
|
||||||
|
At this point, only the determination of grapheme cluster boundaries is
|
||||||
|
implemented.
|
||||||
|
*/
|
||||||
|
package uniseg
|
||||||
3
vendor/github.com/rivo/uniseg/go.mod
сгенерированный
поставляемый
Обычный файл
3
vendor/github.com/rivo/uniseg/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/rivo/uniseg
|
||||||
|
|
||||||
|
go 1.12
|
||||||
268
vendor/github.com/rivo/uniseg/grapheme.go
сгенерированный
поставляемый
Обычный файл
268
vendor/github.com/rivo/uniseg/grapheme.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,268 @@
|
|||||||
|
package uniseg
|
||||||
|
|
||||||
|
import "unicode/utf8"
|
||||||
|
|
||||||
|
// The states of the grapheme cluster parser.
|
||||||
|
const (
|
||||||
|
grAny = iota
|
||||||
|
grCR
|
||||||
|
grControlLF
|
||||||
|
grL
|
||||||
|
grLVV
|
||||||
|
grLVTT
|
||||||
|
grPrepend
|
||||||
|
grExtendedPictographic
|
||||||
|
grExtendedPictographicZWJ
|
||||||
|
grRIOdd
|
||||||
|
grRIEven
|
||||||
|
)
|
||||||
|
|
||||||
|
// The grapheme cluster parser's breaking instructions.
|
||||||
|
const (
|
||||||
|
grNoBoundary = iota
|
||||||
|
grBoundary
|
||||||
|
)
|
||||||
|
|
||||||
|
// The grapheme cluster parser's state transitions. Maps (state, property) to
|
||||||
|
// (new state, breaking instruction, rule number). The breaking instruction
|
||||||
|
// always refers to the boundary between the last and next code point.
|
||||||
|
//
|
||||||
|
// This map is queried as follows:
|
||||||
|
//
|
||||||
|
// 1. Find specific state + specific property. Stop if found.
|
||||||
|
// 2. Find specific state + any property.
|
||||||
|
// 3. Find any state + specific property.
|
||||||
|
// 4. If only (2) or (3) (but not both) was found, stop.
|
||||||
|
// 5. If both (2) and (3) were found, use state and breaking instruction from
|
||||||
|
// the transition with the lower rule number, prefer (3) if rule numbers
|
||||||
|
// are equal. Stop.
|
||||||
|
// 6. Assume grAny and grBoundary.
|
||||||
|
var grTransitions = map[[2]int][3]int{
|
||||||
|
// GB5
|
||||||
|
{grAny, prCR}: {grCR, grBoundary, 50},
|
||||||
|
{grAny, prLF}: {grControlLF, grBoundary, 50},
|
||||||
|
{grAny, prControl}: {grControlLF, grBoundary, 50},
|
||||||
|
|
||||||
|
// GB4
|
||||||
|
{grCR, prAny}: {grAny, grBoundary, 40},
|
||||||
|
{grControlLF, prAny}: {grAny, grBoundary, 40},
|
||||||
|
|
||||||
|
// GB3.
|
||||||
|
{grCR, prLF}: {grAny, grNoBoundary, 30},
|
||||||
|
|
||||||
|
// GB6.
|
||||||
|
{grAny, prL}: {grL, grBoundary, 9990},
|
||||||
|
{grL, prL}: {grL, grNoBoundary, 60},
|
||||||
|
{grL, prV}: {grLVV, grNoBoundary, 60},
|
||||||
|
{grL, prLV}: {grLVV, grNoBoundary, 60},
|
||||||
|
{grL, prLVT}: {grLVTT, grNoBoundary, 60},
|
||||||
|
|
||||||
|
// GB7.
|
||||||
|
{grAny, prLV}: {grLVV, grBoundary, 9990},
|
||||||
|
{grAny, prV}: {grLVV, grBoundary, 9990},
|
||||||
|
{grLVV, prV}: {grLVV, grNoBoundary, 70},
|
||||||
|
{grLVV, prT}: {grLVTT, grNoBoundary, 70},
|
||||||
|
|
||||||
|
// GB8.
|
||||||
|
{grAny, prLVT}: {grLVTT, grBoundary, 9990},
|
||||||
|
{grAny, prT}: {grLVTT, grBoundary, 9990},
|
||||||
|
{grLVTT, prT}: {grLVTT, grNoBoundary, 80},
|
||||||
|
|
||||||
|
// GB9.
|
||||||
|
{grAny, prExtend}: {grAny, grNoBoundary, 90},
|
||||||
|
{grAny, prZWJ}: {grAny, grNoBoundary, 90},
|
||||||
|
|
||||||
|
// GB9a.
|
||||||
|
{grAny, prSpacingMark}: {grAny, grNoBoundary, 91},
|
||||||
|
|
||||||
|
// GB9b.
|
||||||
|
{grAny, prPreprend}: {grPrepend, grBoundary, 9990},
|
||||||
|
{grPrepend, prAny}: {grAny, grNoBoundary, 92},
|
||||||
|
|
||||||
|
// GB11.
|
||||||
|
{grAny, prExtendedPictographic}: {grExtendedPictographic, grBoundary, 9990},
|
||||||
|
{grExtendedPictographic, prExtend}: {grExtendedPictographic, grNoBoundary, 110},
|
||||||
|
{grExtendedPictographic, prZWJ}: {grExtendedPictographicZWJ, grNoBoundary, 110},
|
||||||
|
{grExtendedPictographicZWJ, prExtendedPictographic}: {grExtendedPictographic, grNoBoundary, 110},
|
||||||
|
|
||||||
|
// GB12 / GB13.
|
||||||
|
{grAny, prRegionalIndicator}: {grRIOdd, grBoundary, 9990},
|
||||||
|
{grRIOdd, prRegionalIndicator}: {grRIEven, grNoBoundary, 120},
|
||||||
|
{grRIEven, prRegionalIndicator}: {grRIOdd, grBoundary, 120},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Graphemes implements an iterator over Unicode extended grapheme clusters,
|
||||||
|
// specified in the Unicode Standard Annex #29. Grapheme clusters correspond to
|
||||||
|
// "user-perceived characters". These characters often consist of multiple
|
||||||
|
// code points (e.g. the "woman kissing woman" emoji consists of 8 code points:
|
||||||
|
// woman + ZWJ + heavy black heart (2 code points) + ZWJ + kiss mark + ZWJ +
|
||||||
|
// woman) and the rules described in Annex #29 must be applied to group those
|
||||||
|
// code points into clusters perceived by the user as one character.
|
||||||
|
type Graphemes struct {
|
||||||
|
// The code points over which this class iterates.
|
||||||
|
codePoints []rune
|
||||||
|
|
||||||
|
// The (byte-based) indices of the code points into the original string plus
|
||||||
|
// len(original string). Thus, len(indices) = len(codePoints) + 1.
|
||||||
|
indices []int
|
||||||
|
|
||||||
|
// The current grapheme cluster to be returned. These are indices into
|
||||||
|
// codePoints/indices. If start == end, we either haven't started iterating
|
||||||
|
// yet (0) or the iteration has already completed (1).
|
||||||
|
start, end int
|
||||||
|
|
||||||
|
// The index of the next code point to be parsed.
|
||||||
|
pos int
|
||||||
|
|
||||||
|
// The current state of the code point parser.
|
||||||
|
state int
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewGraphemes returns a new grapheme cluster iterator.
|
||||||
|
func NewGraphemes(s string) *Graphemes {
|
||||||
|
l := utf8.RuneCountInString(s)
|
||||||
|
codePoints := make([]rune, l)
|
||||||
|
indices := make([]int, l+1)
|
||||||
|
i := 0
|
||||||
|
for pos, r := range s {
|
||||||
|
codePoints[i] = r
|
||||||
|
indices[i] = pos
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
indices[l] = len(s)
|
||||||
|
g := &Graphemes{
|
||||||
|
codePoints: codePoints,
|
||||||
|
indices: indices,
|
||||||
|
}
|
||||||
|
g.Next() // Parse ahead.
|
||||||
|
return g
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next advances the iterator by one grapheme cluster and returns false if no
|
||||||
|
// clusters are left. This function must be called before the first cluster is
|
||||||
|
// accessed.
|
||||||
|
func (g *Graphemes) Next() bool {
|
||||||
|
g.start = g.end
|
||||||
|
|
||||||
|
// The state transition gives us a boundary instruction BEFORE the next code
|
||||||
|
// point so we always need to stay ahead by one code point.
|
||||||
|
|
||||||
|
// Parse the next code point.
|
||||||
|
for g.pos <= len(g.codePoints) {
|
||||||
|
// GB2.
|
||||||
|
if g.pos == len(g.codePoints) {
|
||||||
|
g.end = g.pos
|
||||||
|
g.pos++
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine the property of the next character.
|
||||||
|
nextProperty := property(g.codePoints[g.pos])
|
||||||
|
g.pos++
|
||||||
|
|
||||||
|
// Find the applicable transition.
|
||||||
|
var boundary bool
|
||||||
|
transition, ok := grTransitions[[2]int{g.state, nextProperty}]
|
||||||
|
if ok {
|
||||||
|
// We have a specific transition. We'll use it.
|
||||||
|
g.state = transition[0]
|
||||||
|
boundary = transition[1] == grBoundary
|
||||||
|
} else {
|
||||||
|
// No specific transition found. Try the less specific ones.
|
||||||
|
transAnyProp, okAnyProp := grTransitions[[2]int{g.state, prAny}]
|
||||||
|
transAnyState, okAnyState := grTransitions[[2]int{grAny, nextProperty}]
|
||||||
|
if okAnyProp && okAnyState {
|
||||||
|
// Both apply. We'll use a mix (see comments for grTransitions).
|
||||||
|
g.state = transAnyState[0]
|
||||||
|
boundary = transAnyState[1] == grBoundary
|
||||||
|
if transAnyProp[2] < transAnyState[2] {
|
||||||
|
g.state = transAnyProp[0]
|
||||||
|
boundary = transAnyProp[1] == grBoundary
|
||||||
|
}
|
||||||
|
} else if okAnyProp {
|
||||||
|
// We only have a specific state.
|
||||||
|
g.state = transAnyProp[0]
|
||||||
|
boundary = transAnyProp[1] == grBoundary
|
||||||
|
// This branch will probably never be reached because okAnyState will
|
||||||
|
// always be true given the current transition map. But we keep it here
|
||||||
|
// for future modifications to the transition map where this may not be
|
||||||
|
// true anymore.
|
||||||
|
} else if okAnyState {
|
||||||
|
// We only have a specific property.
|
||||||
|
g.state = transAnyState[0]
|
||||||
|
boundary = transAnyState[1] == grBoundary
|
||||||
|
} else {
|
||||||
|
// No known transition. GB999: Any x Any.
|
||||||
|
g.state = grAny
|
||||||
|
boundary = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we found a cluster boundary, let's stop here. The current cluster will
|
||||||
|
// be the one that just ended.
|
||||||
|
if g.pos-1 == 0 /* GB1 */ || boundary {
|
||||||
|
g.end = g.pos - 1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return g.start != g.end
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runes returns a slice of runes (code points) which corresponds to the current
|
||||||
|
// grapheme cluster. If the iterator is already past the end or Next() has not
|
||||||
|
// yet been called, nil is returned.
|
||||||
|
func (g *Graphemes) Runes() []rune {
|
||||||
|
if g.start == g.end {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return g.codePoints[g.start:g.end]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Str returns a substring of the original string which corresponds to the
|
||||||
|
// current grapheme cluster. If the iterator is already past the end or Next()
|
||||||
|
// has not yet been called, an empty string is returned.
|
||||||
|
func (g *Graphemes) Str() string {
|
||||||
|
if g.start == g.end {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return string(g.codePoints[g.start:g.end])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns a byte slice which corresponds to the current grapheme cluster.
|
||||||
|
// If the iterator is already past the end or Next() has not yet been called,
|
||||||
|
// nil is returned.
|
||||||
|
func (g *Graphemes) Bytes() []byte {
|
||||||
|
if g.start == g.end {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return []byte(string(g.codePoints[g.start:g.end]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Positions returns the interval of the current grapheme cluster as byte
|
||||||
|
// positions into the original string. The first returned value "from" indexes
|
||||||
|
// the first byte and the second returned value "to" indexes the first byte that
|
||||||
|
// is not included anymore, i.e. str[from:to] is the current grapheme cluster of
|
||||||
|
// the original string "str". If Next() has not yet been called, both values are
|
||||||
|
// 0. If the iterator is already past the end, both values are 1.
|
||||||
|
func (g *Graphemes) Positions() (int, int) {
|
||||||
|
return g.indices[g.start], g.indices[g.end]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset puts the iterator into its initial state such that the next call to
|
||||||
|
// Next() sets it to the first grapheme cluster again.
|
||||||
|
func (g *Graphemes) Reset() {
|
||||||
|
g.start, g.end, g.pos, g.state = 0, 0, 0, grAny
|
||||||
|
g.Next() // Parse ahead again.
|
||||||
|
}
|
||||||
|
|
||||||
|
// GraphemeClusterCount returns the number of user-perceived characters
|
||||||
|
// (grapheme clusters) for the given string. To calculate this number, it
|
||||||
|
// iterates through the string using the Graphemes iterator.
|
||||||
|
func GraphemeClusterCount(s string) (n int) {
|
||||||
|
g := NewGraphemes(s)
|
||||||
|
for g.Next() {
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
1658
vendor/github.com/rivo/uniseg/properties.go
сгенерированный
поставляемый
Обычный файл
1658
vendor/github.com/rivo/uniseg/properties.go
сгенерированный
поставляемый
Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
172
vendor/github.com/stretchr/testify/assert/assertion_compare.go
сгенерированный
поставляемый
172
vendor/github.com/stretchr/testify/assert/assertion_compare.go
сгенерированный
поставляемый
@@ -13,12 +13,42 @@ const (
|
|||||||
compareGreater
|
compareGreater
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
intType = reflect.TypeOf(int(1))
|
||||||
|
int8Type = reflect.TypeOf(int8(1))
|
||||||
|
int16Type = reflect.TypeOf(int16(1))
|
||||||
|
int32Type = reflect.TypeOf(int32(1))
|
||||||
|
int64Type = reflect.TypeOf(int64(1))
|
||||||
|
|
||||||
|
uintType = reflect.TypeOf(uint(1))
|
||||||
|
uint8Type = reflect.TypeOf(uint8(1))
|
||||||
|
uint16Type = reflect.TypeOf(uint16(1))
|
||||||
|
uint32Type = reflect.TypeOf(uint32(1))
|
||||||
|
uint64Type = reflect.TypeOf(uint64(1))
|
||||||
|
|
||||||
|
float32Type = reflect.TypeOf(float32(1))
|
||||||
|
float64Type = reflect.TypeOf(float64(1))
|
||||||
|
|
||||||
|
stringType = reflect.TypeOf("")
|
||||||
|
)
|
||||||
|
|
||||||
func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
||||||
|
obj1Value := reflect.ValueOf(obj1)
|
||||||
|
obj2Value := reflect.ValueOf(obj2)
|
||||||
|
|
||||||
|
// throughout this switch we try and avoid calling .Convert() if possible,
|
||||||
|
// as this has a pretty big performance impact
|
||||||
switch kind {
|
switch kind {
|
||||||
case reflect.Int:
|
case reflect.Int:
|
||||||
{
|
{
|
||||||
intobj1 := obj1.(int)
|
intobj1, ok := obj1.(int)
|
||||||
intobj2 := obj2.(int)
|
if !ok {
|
||||||
|
intobj1 = obj1Value.Convert(intType).Interface().(int)
|
||||||
|
}
|
||||||
|
intobj2, ok := obj2.(int)
|
||||||
|
if !ok {
|
||||||
|
intobj2 = obj2Value.Convert(intType).Interface().(int)
|
||||||
|
}
|
||||||
if intobj1 > intobj2 {
|
if intobj1 > intobj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -31,8 +61,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Int8:
|
case reflect.Int8:
|
||||||
{
|
{
|
||||||
int8obj1 := obj1.(int8)
|
int8obj1, ok := obj1.(int8)
|
||||||
int8obj2 := obj2.(int8)
|
if !ok {
|
||||||
|
int8obj1 = obj1Value.Convert(int8Type).Interface().(int8)
|
||||||
|
}
|
||||||
|
int8obj2, ok := obj2.(int8)
|
||||||
|
if !ok {
|
||||||
|
int8obj2 = obj2Value.Convert(int8Type).Interface().(int8)
|
||||||
|
}
|
||||||
if int8obj1 > int8obj2 {
|
if int8obj1 > int8obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -45,8 +81,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Int16:
|
case reflect.Int16:
|
||||||
{
|
{
|
||||||
int16obj1 := obj1.(int16)
|
int16obj1, ok := obj1.(int16)
|
||||||
int16obj2 := obj2.(int16)
|
if !ok {
|
||||||
|
int16obj1 = obj1Value.Convert(int16Type).Interface().(int16)
|
||||||
|
}
|
||||||
|
int16obj2, ok := obj2.(int16)
|
||||||
|
if !ok {
|
||||||
|
int16obj2 = obj2Value.Convert(int16Type).Interface().(int16)
|
||||||
|
}
|
||||||
if int16obj1 > int16obj2 {
|
if int16obj1 > int16obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -59,8 +101,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Int32:
|
case reflect.Int32:
|
||||||
{
|
{
|
||||||
int32obj1 := obj1.(int32)
|
int32obj1, ok := obj1.(int32)
|
||||||
int32obj2 := obj2.(int32)
|
if !ok {
|
||||||
|
int32obj1 = obj1Value.Convert(int32Type).Interface().(int32)
|
||||||
|
}
|
||||||
|
int32obj2, ok := obj2.(int32)
|
||||||
|
if !ok {
|
||||||
|
int32obj2 = obj2Value.Convert(int32Type).Interface().(int32)
|
||||||
|
}
|
||||||
if int32obj1 > int32obj2 {
|
if int32obj1 > int32obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -73,8 +121,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Int64:
|
case reflect.Int64:
|
||||||
{
|
{
|
||||||
int64obj1 := obj1.(int64)
|
int64obj1, ok := obj1.(int64)
|
||||||
int64obj2 := obj2.(int64)
|
if !ok {
|
||||||
|
int64obj1 = obj1Value.Convert(int64Type).Interface().(int64)
|
||||||
|
}
|
||||||
|
int64obj2, ok := obj2.(int64)
|
||||||
|
if !ok {
|
||||||
|
int64obj2 = obj2Value.Convert(int64Type).Interface().(int64)
|
||||||
|
}
|
||||||
if int64obj1 > int64obj2 {
|
if int64obj1 > int64obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -87,8 +141,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Uint:
|
case reflect.Uint:
|
||||||
{
|
{
|
||||||
uintobj1 := obj1.(uint)
|
uintobj1, ok := obj1.(uint)
|
||||||
uintobj2 := obj2.(uint)
|
if !ok {
|
||||||
|
uintobj1 = obj1Value.Convert(uintType).Interface().(uint)
|
||||||
|
}
|
||||||
|
uintobj2, ok := obj2.(uint)
|
||||||
|
if !ok {
|
||||||
|
uintobj2 = obj2Value.Convert(uintType).Interface().(uint)
|
||||||
|
}
|
||||||
if uintobj1 > uintobj2 {
|
if uintobj1 > uintobj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -101,8 +161,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Uint8:
|
case reflect.Uint8:
|
||||||
{
|
{
|
||||||
uint8obj1 := obj1.(uint8)
|
uint8obj1, ok := obj1.(uint8)
|
||||||
uint8obj2 := obj2.(uint8)
|
if !ok {
|
||||||
|
uint8obj1 = obj1Value.Convert(uint8Type).Interface().(uint8)
|
||||||
|
}
|
||||||
|
uint8obj2, ok := obj2.(uint8)
|
||||||
|
if !ok {
|
||||||
|
uint8obj2 = obj2Value.Convert(uint8Type).Interface().(uint8)
|
||||||
|
}
|
||||||
if uint8obj1 > uint8obj2 {
|
if uint8obj1 > uint8obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -115,8 +181,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Uint16:
|
case reflect.Uint16:
|
||||||
{
|
{
|
||||||
uint16obj1 := obj1.(uint16)
|
uint16obj1, ok := obj1.(uint16)
|
||||||
uint16obj2 := obj2.(uint16)
|
if !ok {
|
||||||
|
uint16obj1 = obj1Value.Convert(uint16Type).Interface().(uint16)
|
||||||
|
}
|
||||||
|
uint16obj2, ok := obj2.(uint16)
|
||||||
|
if !ok {
|
||||||
|
uint16obj2 = obj2Value.Convert(uint16Type).Interface().(uint16)
|
||||||
|
}
|
||||||
if uint16obj1 > uint16obj2 {
|
if uint16obj1 > uint16obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -129,8 +201,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Uint32:
|
case reflect.Uint32:
|
||||||
{
|
{
|
||||||
uint32obj1 := obj1.(uint32)
|
uint32obj1, ok := obj1.(uint32)
|
||||||
uint32obj2 := obj2.(uint32)
|
if !ok {
|
||||||
|
uint32obj1 = obj1Value.Convert(uint32Type).Interface().(uint32)
|
||||||
|
}
|
||||||
|
uint32obj2, ok := obj2.(uint32)
|
||||||
|
if !ok {
|
||||||
|
uint32obj2 = obj2Value.Convert(uint32Type).Interface().(uint32)
|
||||||
|
}
|
||||||
if uint32obj1 > uint32obj2 {
|
if uint32obj1 > uint32obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -143,8 +221,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Uint64:
|
case reflect.Uint64:
|
||||||
{
|
{
|
||||||
uint64obj1 := obj1.(uint64)
|
uint64obj1, ok := obj1.(uint64)
|
||||||
uint64obj2 := obj2.(uint64)
|
if !ok {
|
||||||
|
uint64obj1 = obj1Value.Convert(uint64Type).Interface().(uint64)
|
||||||
|
}
|
||||||
|
uint64obj2, ok := obj2.(uint64)
|
||||||
|
if !ok {
|
||||||
|
uint64obj2 = obj2Value.Convert(uint64Type).Interface().(uint64)
|
||||||
|
}
|
||||||
if uint64obj1 > uint64obj2 {
|
if uint64obj1 > uint64obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -157,8 +241,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Float32:
|
case reflect.Float32:
|
||||||
{
|
{
|
||||||
float32obj1 := obj1.(float32)
|
float32obj1, ok := obj1.(float32)
|
||||||
float32obj2 := obj2.(float32)
|
if !ok {
|
||||||
|
float32obj1 = obj1Value.Convert(float32Type).Interface().(float32)
|
||||||
|
}
|
||||||
|
float32obj2, ok := obj2.(float32)
|
||||||
|
if !ok {
|
||||||
|
float32obj2 = obj2Value.Convert(float32Type).Interface().(float32)
|
||||||
|
}
|
||||||
if float32obj1 > float32obj2 {
|
if float32obj1 > float32obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -171,8 +261,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.Float64:
|
case reflect.Float64:
|
||||||
{
|
{
|
||||||
float64obj1 := obj1.(float64)
|
float64obj1, ok := obj1.(float64)
|
||||||
float64obj2 := obj2.(float64)
|
if !ok {
|
||||||
|
float64obj1 = obj1Value.Convert(float64Type).Interface().(float64)
|
||||||
|
}
|
||||||
|
float64obj2, ok := obj2.(float64)
|
||||||
|
if !ok {
|
||||||
|
float64obj2 = obj2Value.Convert(float64Type).Interface().(float64)
|
||||||
|
}
|
||||||
if float64obj1 > float64obj2 {
|
if float64obj1 > float64obj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -185,8 +281,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
|||||||
}
|
}
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
{
|
{
|
||||||
stringobj1 := obj1.(string)
|
stringobj1, ok := obj1.(string)
|
||||||
stringobj2 := obj2.(string)
|
if !ok {
|
||||||
|
stringobj1 = obj1Value.Convert(stringType).Interface().(string)
|
||||||
|
}
|
||||||
|
stringobj2, ok := obj2.(string)
|
||||||
|
if !ok {
|
||||||
|
stringobj2 = obj2Value.Convert(stringType).Interface().(string)
|
||||||
|
}
|
||||||
if stringobj1 > stringobj2 {
|
if stringobj1 > stringobj2 {
|
||||||
return compareGreater, true
|
return compareGreater, true
|
||||||
}
|
}
|
||||||
@@ -240,6 +342,24 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter
|
|||||||
return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs)
|
return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Positive asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// assert.Positive(t, 1)
|
||||||
|
// assert.Positive(t, 1.23)
|
||||||
|
func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
zero := reflect.Zero(reflect.TypeOf(e))
|
||||||
|
return compareTwoValues(t, e, zero.Interface(), []CompareType{compareGreater}, "\"%v\" is not positive", msgAndArgs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negative asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// assert.Negative(t, -1)
|
||||||
|
// assert.Negative(t, -1.23)
|
||||||
|
func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
zero := reflect.Zero(reflect.TypeOf(e))
|
||||||
|
return compareTwoValues(t, e, zero.Interface(), []CompareType{compareLess}, "\"%v\" is not negative", msgAndArgs)
|
||||||
|
}
|
||||||
|
|
||||||
func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool {
|
func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool {
|
||||||
if h, ok := t.(tHelper); ok {
|
if h, ok := t.(tHelper); ok {
|
||||||
h.Helper()
|
h.Helper()
|
||||||
|
|||||||
97
vendor/github.com/stretchr/testify/assert/assertion_format.go
сгенерированный
поставляемый
97
vendor/github.com/stretchr/testify/assert/assertion_format.go
сгенерированный
поставляемый
@@ -114,6 +114,24 @@ func Errorf(t TestingT, err error, msg string, args ...interface{}) bool {
|
|||||||
return Error(t, err, append([]interface{}{msg}, args...)...)
|
return Error(t, err, append([]interface{}{msg}, args...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return ErrorAs(t, err, target, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIsf asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return ErrorIs(t, err, target, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
// Eventuallyf asserts that given condition will be met in waitFor time,
|
// Eventuallyf asserts that given condition will be met in waitFor time,
|
||||||
// periodically checking target function each tick.
|
// periodically checking target function each tick.
|
||||||
//
|
//
|
||||||
@@ -321,6 +339,54 @@ func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsil
|
|||||||
return InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)
|
return InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsDecreasingf asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted")
|
||||||
|
// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted")
|
||||||
|
// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsDecreasing(t, object, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasingf asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted")
|
||||||
|
// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted")
|
||||||
|
// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsIncreasing(t, object, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasingf asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsNonDecreasing(t, object, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasingf asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsNonIncreasing(t, object, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
// IsTypef asserts that the specified objects are of the same type.
|
// IsTypef asserts that the specified objects are of the same type.
|
||||||
func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {
|
func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {
|
||||||
if h, ok := t.(tHelper); ok {
|
if h, ok := t.(tHelper); ok {
|
||||||
@@ -375,6 +441,17 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args .
|
|||||||
return LessOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...)
|
return LessOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Negativef asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// assert.Negativef(t, -1, "error message %s", "formatted")
|
||||||
|
// assert.Negativef(t, -1.23, "error message %s", "formatted")
|
||||||
|
func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return Negative(t, e, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
// Neverf asserts that the given condition doesn't satisfy in waitFor time,
|
// Neverf asserts that the given condition doesn't satisfy in waitFor time,
|
||||||
// periodically checking the target function each tick.
|
// periodically checking the target function each tick.
|
||||||
//
|
//
|
||||||
@@ -476,6 +553,15 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s
|
|||||||
return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)
|
return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotErrorIsf asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return NotErrorIs(t, err, target, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
// NotNilf asserts that the specified object is not nil.
|
// NotNilf asserts that the specified object is not nil.
|
||||||
//
|
//
|
||||||
// assert.NotNilf(t, err, "error message %s", "formatted")
|
// assert.NotNilf(t, err, "error message %s", "formatted")
|
||||||
@@ -572,6 +658,17 @@ func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg str
|
|||||||
return PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...)
|
return PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Positivef asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// assert.Positivef(t, 1, "error message %s", "formatted")
|
||||||
|
// assert.Positivef(t, 1.23, "error message %s", "formatted")
|
||||||
|
func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return Positive(t, e, append([]interface{}{msg}, args...)...)
|
||||||
|
}
|
||||||
|
|
||||||
// Regexpf asserts that a specified regexp matches a string.
|
// Regexpf asserts that a specified regexp matches a string.
|
||||||
//
|
//
|
||||||
// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted")
|
// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted")
|
||||||
|
|||||||
194
vendor/github.com/stretchr/testify/assert/assertion_forward.go
сгенерированный
поставляемый
194
vendor/github.com/stretchr/testify/assert/assertion_forward.go
сгенерированный
поставляемый
@@ -204,6 +204,42 @@ func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool {
|
|||||||
return Error(a.t, err, msgAndArgs...)
|
return Error(a.t, err, msgAndArgs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return ErrorAs(a.t, err, target, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return ErrorAsf(a.t, err, target, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIs asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return ErrorIs(a.t, err, target, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIsf asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return ErrorIsf(a.t, err, target, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Errorf asserts that a function returned an error (i.e. not `nil`).
|
// Errorf asserts that a function returned an error (i.e. not `nil`).
|
||||||
//
|
//
|
||||||
// actualObj, err := SomeFunction()
|
// actualObj, err := SomeFunction()
|
||||||
@@ -631,6 +667,102 @@ func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilo
|
|||||||
return InEpsilonf(a.t, expected, actual, epsilon, msg, args...)
|
return InEpsilonf(a.t, expected, actual, epsilon, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsDecreasing asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// a.IsDecreasing([]int{2, 1, 0})
|
||||||
|
// a.IsDecreasing([]float{2, 1})
|
||||||
|
// a.IsDecreasing([]string{"b", "a"})
|
||||||
|
func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsDecreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDecreasingf asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted")
|
||||||
|
// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted")
|
||||||
|
// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsDecreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasing asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// a.IsIncreasing([]int{1, 2, 3})
|
||||||
|
// a.IsIncreasing([]float{1, 2})
|
||||||
|
// a.IsIncreasing([]string{"a", "b"})
|
||||||
|
func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsIncreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasingf asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted")
|
||||||
|
// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted")
|
||||||
|
// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsIncreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasing asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// a.IsNonDecreasing([]int{1, 1, 2})
|
||||||
|
// a.IsNonDecreasing([]float{1, 2})
|
||||||
|
// a.IsNonDecreasing([]string{"a", "b"})
|
||||||
|
func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsNonDecreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasingf asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted")
|
||||||
|
// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted")
|
||||||
|
// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsNonDecreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasing asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// a.IsNonIncreasing([]int{2, 1, 1})
|
||||||
|
// a.IsNonIncreasing([]float{2, 1})
|
||||||
|
// a.IsNonIncreasing([]string{"b", "a"})
|
||||||
|
func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsNonIncreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasingf asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted")
|
||||||
|
// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted")
|
||||||
|
// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return IsNonIncreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// IsType asserts that the specified objects are of the same type.
|
// IsType asserts that the specified objects are of the same type.
|
||||||
func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {
|
func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
if h, ok := a.t.(tHelper); ok {
|
if h, ok := a.t.(tHelper); ok {
|
||||||
@@ -739,6 +871,28 @@ func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...i
|
|||||||
return Lessf(a.t, e1, e2, msg, args...)
|
return Lessf(a.t, e1, e2, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Negative asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// a.Negative(-1)
|
||||||
|
// a.Negative(-1.23)
|
||||||
|
func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return Negative(a.t, e, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negativef asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// a.Negativef(-1, "error message %s", "formatted")
|
||||||
|
// a.Negativef(-1.23, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return Negativef(a.t, e, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Never asserts that the given condition doesn't satisfy in waitFor time,
|
// Never asserts that the given condition doesn't satisfy in waitFor time,
|
||||||
// periodically checking the target function each tick.
|
// periodically checking the target function each tick.
|
||||||
//
|
//
|
||||||
@@ -941,6 +1095,24 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str
|
|||||||
return NotEqualf(a.t, expected, actual, msg, args...)
|
return NotEqualf(a.t, expected, actual, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotErrorIs asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return NotErrorIs(a.t, err, target, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotErrorIsf asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return NotErrorIsf(a.t, err, target, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// NotNil asserts that the specified object is not nil.
|
// NotNil asserts that the specified object is not nil.
|
||||||
//
|
//
|
||||||
// a.NotNil(err)
|
// a.NotNil(err)
|
||||||
@@ -1133,6 +1305,28 @@ func (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) b
|
|||||||
return Panicsf(a.t, f, msg, args...)
|
return Panicsf(a.t, f, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Positive asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// a.Positive(1)
|
||||||
|
// a.Positive(1.23)
|
||||||
|
func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return Positive(a.t, e, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Positivef asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// a.Positivef(1, "error message %s", "formatted")
|
||||||
|
// a.Positivef(1.23, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) bool {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
return Positivef(a.t, e, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Regexp asserts that a specified regexp matches a string.
|
// Regexp asserts that a specified regexp matches a string.
|
||||||
//
|
//
|
||||||
// a.Regexp(regexp.MustCompile("start"), "it's starting")
|
// a.Regexp(regexp.MustCompile("start"), "it's starting")
|
||||||
|
|||||||
81
vendor/github.com/stretchr/testify/assert/assertion_order.go
сгенерированный
поставляемый
Обычный файл
81
vendor/github.com/stretchr/testify/assert/assertion_order.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,81 @@
|
|||||||
|
package assert
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
// isOrdered checks that collection contains orderable elements.
|
||||||
|
func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool {
|
||||||
|
objKind := reflect.TypeOf(object).Kind()
|
||||||
|
if objKind != reflect.Slice && objKind != reflect.Array {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
objValue := reflect.ValueOf(object)
|
||||||
|
objLen := objValue.Len()
|
||||||
|
|
||||||
|
if objLen <= 1 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
value := objValue.Index(0)
|
||||||
|
valueInterface := value.Interface()
|
||||||
|
firstValueKind := value.Kind()
|
||||||
|
|
||||||
|
for i := 1; i < objLen; i++ {
|
||||||
|
prevValue := value
|
||||||
|
prevValueInterface := valueInterface
|
||||||
|
|
||||||
|
value = objValue.Index(i)
|
||||||
|
valueInterface = value.Interface()
|
||||||
|
|
||||||
|
compareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind)
|
||||||
|
|
||||||
|
if !isComparable {
|
||||||
|
return Fail(t, fmt.Sprintf("Can not compare type \"%s\" and \"%s\"", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !containsValue(allowedComparesResults, compareResult) {
|
||||||
|
return Fail(t, fmt.Sprintf(failMessage, prevValue, value), msgAndArgs...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasing asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// assert.IsIncreasing(t, []int{1, 2, 3})
|
||||||
|
// assert.IsIncreasing(t, []float{1, 2})
|
||||||
|
// assert.IsIncreasing(t, []string{"a", "b"})
|
||||||
|
func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasing asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// assert.IsNonIncreasing(t, []int{2, 1, 1})
|
||||||
|
// assert.IsNonIncreasing(t, []float{2, 1})
|
||||||
|
// assert.IsNonIncreasing(t, []string{"b", "a"})
|
||||||
|
func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDecreasing asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// assert.IsDecreasing(t, []int{2, 1, 0})
|
||||||
|
// assert.IsDecreasing(t, []float{2, 1})
|
||||||
|
// assert.IsDecreasing(t, []string{"b", "a"})
|
||||||
|
func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasing asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// assert.IsNonDecreasing(t, []int{1, 1, 2})
|
||||||
|
// assert.IsNonDecreasing(t, []float{1, 2})
|
||||||
|
// assert.IsNonDecreasing(t, []string{"a", "b"})
|
||||||
|
func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs)
|
||||||
|
}
|
||||||
83
vendor/github.com/stretchr/testify/assert/assertions.go
сгенерированный
поставляемый
83
vendor/github.com/stretchr/testify/assert/assertions.go
сгенерированный
поставляемый
@@ -172,8 +172,8 @@ func isTest(name, prefix string) bool {
|
|||||||
if len(name) == len(prefix) { // "Test" is ok
|
if len(name) == len(prefix) { // "Test" is ok
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
rune, _ := utf8.DecodeRuneInString(name[len(prefix):])
|
r, _ := utf8.DecodeRuneInString(name[len(prefix):])
|
||||||
return !unicode.IsLower(rune)
|
return !unicode.IsLower(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func messageFromMsgAndArgs(msgAndArgs ...interface{}) string {
|
func messageFromMsgAndArgs(msgAndArgs ...interface{}) string {
|
||||||
@@ -1622,6 +1622,7 @@ var spewConfig = spew.ConfigState{
|
|||||||
DisableCapacities: true,
|
DisableCapacities: true,
|
||||||
SortKeys: true,
|
SortKeys: true,
|
||||||
DisableMethods: true,
|
DisableMethods: true,
|
||||||
|
MaxDepth: 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
type tHelper interface {
|
type tHelper interface {
|
||||||
@@ -1693,3 +1694,81 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrorIs asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if errors.Is(err, target) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var expectedText string
|
||||||
|
if target != nil {
|
||||||
|
expectedText = target.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
chain := buildErrorChainString(err)
|
||||||
|
|
||||||
|
return Fail(t, fmt.Sprintf("Target error should be in err chain:\n"+
|
||||||
|
"expected: %q\n"+
|
||||||
|
"in chain: %s", expectedText, chain,
|
||||||
|
), msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotErrorIs asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if !errors.Is(err, target) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var expectedText string
|
||||||
|
if target != nil {
|
||||||
|
expectedText = target.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
chain := buildErrorChainString(err)
|
||||||
|
|
||||||
|
return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+
|
||||||
|
"found: %q\n"+
|
||||||
|
"in chain: %s", expectedText, chain,
|
||||||
|
), msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if errors.As(err, target) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
chain := buildErrorChainString(err)
|
||||||
|
|
||||||
|
return Fail(t, fmt.Sprintf("Should be in error chain:\n"+
|
||||||
|
"expected: %q\n"+
|
||||||
|
"in chain: %s", target, chain,
|
||||||
|
), msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildErrorChainString(err error) string {
|
||||||
|
if err == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
e := errors.Unwrap(err)
|
||||||
|
chain := fmt.Sprintf("%q", err.Error())
|
||||||
|
for e != nil {
|
||||||
|
chain += fmt.Sprintf("\n\t%q", e.Error())
|
||||||
|
e = errors.Unwrap(e)
|
||||||
|
}
|
||||||
|
return chain
|
||||||
|
}
|
||||||
|
|||||||
45
vendor/github.com/stretchr/testify/mock/mock.go
сгенерированный
поставляемый
45
vendor/github.com/stretchr/testify/mock/mock.go
сгенерированный
поставляемый
@@ -297,25 +297,52 @@ func (m *Mock) findExpectedCall(method string, arguments ...interface{}) (int, *
|
|||||||
return -1, expectedCall
|
return -1, expectedCall
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type matchCandidate struct {
|
||||||
|
call *Call
|
||||||
|
mismatch string
|
||||||
|
diffCount int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c matchCandidate) isBetterMatchThan(other matchCandidate) bool {
|
||||||
|
if c.call == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if other.call == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.diffCount > other.diffCount {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if c.diffCount < other.diffCount {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.call.Repeatability > 0 && other.call.Repeatability <= 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Mock) findClosestCall(method string, arguments ...interface{}) (*Call, string) {
|
func (m *Mock) findClosestCall(method string, arguments ...interface{}) (*Call, string) {
|
||||||
var diffCount int
|
var bestMatch matchCandidate
|
||||||
var closestCall *Call
|
|
||||||
var err string
|
|
||||||
|
|
||||||
for _, call := range m.expectedCalls() {
|
for _, call := range m.expectedCalls() {
|
||||||
if call.Method == method {
|
if call.Method == method {
|
||||||
|
|
||||||
errInfo, tempDiffCount := call.Arguments.Diff(arguments)
|
errInfo, tempDiffCount := call.Arguments.Diff(arguments)
|
||||||
if tempDiffCount < diffCount || diffCount == 0 {
|
tempCandidate := matchCandidate{
|
||||||
diffCount = tempDiffCount
|
call: call,
|
||||||
closestCall = call
|
mismatch: errInfo,
|
||||||
err = errInfo
|
diffCount: tempDiffCount,
|
||||||
|
}
|
||||||
|
if tempCandidate.isBetterMatchThan(bestMatch) {
|
||||||
|
bestMatch = tempCandidate
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return closestCall, err
|
return bestMatch.call, bestMatch.mismatch
|
||||||
}
|
}
|
||||||
|
|
||||||
func callString(method string, arguments Arguments, includeArgumentValues bool) string {
|
func callString(method string, arguments Arguments, includeArgumentValues bool) string {
|
||||||
|
|||||||
248
vendor/github.com/stretchr/testify/require/require.go
сгенерированный
поставляемый
248
vendor/github.com/stretchr/testify/require/require.go
сгенерированный
поставляемый
@@ -256,6 +256,54 @@ func Error(t TestingT, err error, msgAndArgs ...interface{}) {
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.ErrorAs(t, err, target, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.ErrorAsf(t, err, target, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIs asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func ErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.ErrorIs(t, err, target, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIsf asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.ErrorIsf(t, err, target, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
// Errorf asserts that a function returned an error (i.e. not `nil`).
|
// Errorf asserts that a function returned an error (i.e. not `nil`).
|
||||||
//
|
//
|
||||||
// actualObj, err := SomeFunction()
|
// actualObj, err := SomeFunction()
|
||||||
@@ -806,6 +854,126 @@ func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon fl
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsDecreasing asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// assert.IsDecreasing(t, []int{2, 1, 0})
|
||||||
|
// assert.IsDecreasing(t, []float{2, 1})
|
||||||
|
// assert.IsDecreasing(t, []string{"b", "a"})
|
||||||
|
func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsDecreasing(t, object, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDecreasingf asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted")
|
||||||
|
// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted")
|
||||||
|
// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsDecreasingf(t, object, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasing asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// assert.IsIncreasing(t, []int{1, 2, 3})
|
||||||
|
// assert.IsIncreasing(t, []float{1, 2})
|
||||||
|
// assert.IsIncreasing(t, []string{"a", "b"})
|
||||||
|
func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsIncreasing(t, object, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasingf asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted")
|
||||||
|
// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted")
|
||||||
|
// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsIncreasingf(t, object, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasing asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// assert.IsNonDecreasing(t, []int{1, 1, 2})
|
||||||
|
// assert.IsNonDecreasing(t, []float{1, 2})
|
||||||
|
// assert.IsNonDecreasing(t, []string{"a", "b"})
|
||||||
|
func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsNonDecreasing(t, object, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasingf asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsNonDecreasingf(t, object, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasing asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// assert.IsNonIncreasing(t, []int{2, 1, 1})
|
||||||
|
// assert.IsNonIncreasing(t, []float{2, 1})
|
||||||
|
// assert.IsNonIncreasing(t, []string{"b", "a"})
|
||||||
|
func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsNonIncreasing(t, object, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasingf asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted")
|
||||||
|
// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.IsNonIncreasingf(t, object, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
// IsType asserts that the specified objects are of the same type.
|
// IsType asserts that the specified objects are of the same type.
|
||||||
func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {
|
func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {
|
||||||
if h, ok := t.(tHelper); ok {
|
if h, ok := t.(tHelper); ok {
|
||||||
@@ -944,6 +1112,34 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Negative asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// assert.Negative(t, -1)
|
||||||
|
// assert.Negative(t, -1.23)
|
||||||
|
func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.Negative(t, e, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negativef asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// assert.Negativef(t, -1, "error message %s", "formatted")
|
||||||
|
// assert.Negativef(t, -1.23, "error message %s", "formatted")
|
||||||
|
func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.Negativef(t, e, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
// Never asserts that the given condition doesn't satisfy in waitFor time,
|
// Never asserts that the given condition doesn't satisfy in waitFor time,
|
||||||
// periodically checking the target function each tick.
|
// periodically checking the target function each tick.
|
||||||
//
|
//
|
||||||
@@ -1200,6 +1396,30 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string,
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotErrorIs asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.NotErrorIs(t, err, target, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotErrorIsf asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.NotErrorIsf(t, err, target, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
// NotNil asserts that the specified object is not nil.
|
// NotNil asserts that the specified object is not nil.
|
||||||
//
|
//
|
||||||
// assert.NotNil(t, err)
|
// assert.NotNil(t, err)
|
||||||
@@ -1446,6 +1666,34 @@ func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Positive asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// assert.Positive(t, 1)
|
||||||
|
// assert.Positive(t, 1.23)
|
||||||
|
func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.Positive(t, e, msgAndArgs...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Positivef asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// assert.Positivef(t, 1, "error message %s", "formatted")
|
||||||
|
// assert.Positivef(t, 1.23, "error message %s", "formatted")
|
||||||
|
func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
if assert.Positivef(t, e, msg, args...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
// Regexp asserts that a specified regexp matches a string.
|
// Regexp asserts that a specified regexp matches a string.
|
||||||
//
|
//
|
||||||
// assert.Regexp(t, regexp.MustCompile("start"), "it's starting")
|
// assert.Regexp(t, regexp.MustCompile("start"), "it's starting")
|
||||||
|
|||||||
194
vendor/github.com/stretchr/testify/require/require_forward.go
сгенерированный
поставляемый
194
vendor/github.com/stretchr/testify/require/require_forward.go
сгенерированный
поставляемый
@@ -205,6 +205,42 @@ func (a *Assertions) Error(err error, msgAndArgs ...interface{}) {
|
|||||||
Error(a.t, err, msgAndArgs...)
|
Error(a.t, err, msgAndArgs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
ErrorAs(a.t, err, target, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.
|
||||||
|
// This is a wrapper for errors.As.
|
||||||
|
func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
ErrorAsf(a.t, err, target, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIs asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
ErrorIs(a.t, err, target, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorIsf asserts that at least one of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
ErrorIsf(a.t, err, target, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Errorf asserts that a function returned an error (i.e. not `nil`).
|
// Errorf asserts that a function returned an error (i.e. not `nil`).
|
||||||
//
|
//
|
||||||
// actualObj, err := SomeFunction()
|
// actualObj, err := SomeFunction()
|
||||||
@@ -632,6 +668,102 @@ func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilo
|
|||||||
InEpsilonf(a.t, expected, actual, epsilon, msg, args...)
|
InEpsilonf(a.t, expected, actual, epsilon, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsDecreasing asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// a.IsDecreasing([]int{2, 1, 0})
|
||||||
|
// a.IsDecreasing([]float{2, 1})
|
||||||
|
// a.IsDecreasing([]string{"b", "a"})
|
||||||
|
func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsDecreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDecreasingf asserts that the collection is decreasing
|
||||||
|
//
|
||||||
|
// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted")
|
||||||
|
// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted")
|
||||||
|
// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsDecreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasing asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// a.IsIncreasing([]int{1, 2, 3})
|
||||||
|
// a.IsIncreasing([]float{1, 2})
|
||||||
|
// a.IsIncreasing([]string{"a", "b"})
|
||||||
|
func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsIncreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsIncreasingf asserts that the collection is increasing
|
||||||
|
//
|
||||||
|
// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted")
|
||||||
|
// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted")
|
||||||
|
// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsIncreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasing asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// a.IsNonDecreasing([]int{1, 1, 2})
|
||||||
|
// a.IsNonDecreasing([]float{1, 2})
|
||||||
|
// a.IsNonDecreasing([]string{"a", "b"})
|
||||||
|
func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsNonDecreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonDecreasingf asserts that the collection is not decreasing
|
||||||
|
//
|
||||||
|
// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted")
|
||||||
|
// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted")
|
||||||
|
// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsNonDecreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasing asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// a.IsNonIncreasing([]int{2, 1, 1})
|
||||||
|
// a.IsNonIncreasing([]float{2, 1})
|
||||||
|
// a.IsNonIncreasing([]string{"b", "a"})
|
||||||
|
func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsNonIncreasing(a.t, object, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNonIncreasingf asserts that the collection is not increasing
|
||||||
|
//
|
||||||
|
// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted")
|
||||||
|
// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted")
|
||||||
|
// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
IsNonIncreasingf(a.t, object, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// IsType asserts that the specified objects are of the same type.
|
// IsType asserts that the specified objects are of the same type.
|
||||||
func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {
|
func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {
|
||||||
if h, ok := a.t.(tHelper); ok {
|
if h, ok := a.t.(tHelper); ok {
|
||||||
@@ -740,6 +872,28 @@ func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...i
|
|||||||
Lessf(a.t, e1, e2, msg, args...)
|
Lessf(a.t, e1, e2, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Negative asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// a.Negative(-1)
|
||||||
|
// a.Negative(-1.23)
|
||||||
|
func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
Negative(a.t, e, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negativef asserts that the specified element is negative
|
||||||
|
//
|
||||||
|
// a.Negativef(-1, "error message %s", "formatted")
|
||||||
|
// a.Negativef(-1.23, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
Negativef(a.t, e, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Never asserts that the given condition doesn't satisfy in waitFor time,
|
// Never asserts that the given condition doesn't satisfy in waitFor time,
|
||||||
// periodically checking the target function each tick.
|
// periodically checking the target function each tick.
|
||||||
//
|
//
|
||||||
@@ -942,6 +1096,24 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str
|
|||||||
NotEqualf(a.t, expected, actual, msg, args...)
|
NotEqualf(a.t, expected, actual, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotErrorIs asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
NotErrorIs(a.t, err, target, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotErrorIsf asserts that at none of the errors in err's chain matches target.
|
||||||
|
// This is a wrapper for errors.Is.
|
||||||
|
func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
NotErrorIsf(a.t, err, target, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// NotNil asserts that the specified object is not nil.
|
// NotNil asserts that the specified object is not nil.
|
||||||
//
|
//
|
||||||
// a.NotNil(err)
|
// a.NotNil(err)
|
||||||
@@ -1134,6 +1306,28 @@ func (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interfa
|
|||||||
Panicsf(a.t, f, msg, args...)
|
Panicsf(a.t, f, msg, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Positive asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// a.Positive(1)
|
||||||
|
// a.Positive(1.23)
|
||||||
|
func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
Positive(a.t, e, msgAndArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Positivef asserts that the specified element is positive
|
||||||
|
//
|
||||||
|
// a.Positivef(1, "error message %s", "formatted")
|
||||||
|
// a.Positivef(1.23, "error message %s", "formatted")
|
||||||
|
func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) {
|
||||||
|
if h, ok := a.t.(tHelper); ok {
|
||||||
|
h.Helper()
|
||||||
|
}
|
||||||
|
Positivef(a.t, e, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Regexp asserts that a specified regexp matches a string.
|
// Regexp asserts that a specified regexp matches a string.
|
||||||
//
|
//
|
||||||
// a.Regexp(regexp.MustCompile("start"), "it's starting")
|
// a.Regexp(regexp.MustCompile("start"), "it's starting")
|
||||||
|
|||||||
14
vendor/github.com/vmihailenco/msgpack/v5/decode.go
сгенерированный
поставляемый
14
vendor/github.com/vmihailenco/msgpack/v5/decode.go
сгенерированный
поставляемый
@@ -99,15 +99,15 @@ func (d *Decoder) ResetDict(r io.Reader, dict []string) {
|
|||||||
d.flags = 0
|
d.flags = 0
|
||||||
d.structTag = ""
|
d.structTag = ""
|
||||||
d.mapDecoder = nil
|
d.mapDecoder = nil
|
||||||
d.SetDict(dict)
|
d.dict = dict
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Decoder) SetDict(dict []string) {
|
func (d *Decoder) WithDict(dict []string, fn func(*Decoder) error) error {
|
||||||
if len(dict) > 0 {
|
oldDict := d.dict
|
||||||
d.dict = dict
|
d.dict = dict
|
||||||
} else {
|
err := fn(d)
|
||||||
d.dict = d.dict[:0]
|
d.dict = oldDict
|
||||||
}
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Decoder) resetReader(r io.Reader) {
|
func (d *Decoder) resetReader(r io.Reader) {
|
||||||
|
|||||||
4
vendor/github.com/vmihailenco/msgpack/v5/decode_map.go
сгенерированный
поставляемый
4
vendor/github.com/vmihailenco/msgpack/v5/decode_map.go
сгенерированный
поставляемый
@@ -312,12 +312,12 @@ func decodeStructValue(d *Decoder, v reflect.Value) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
name, err := d.bytesTemp()
|
name, err := d.decodeStringTemp()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if f := fields.Map[string(name)]; f != nil {
|
if f := fields.Map[name]; f != nil {
|
||||||
if err := f.DecodeValue(d, v); err != nil {
|
if err := f.DecodeValue(d, v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
4
vendor/github.com/vmihailenco/msgpack/v5/decode_query.go
сгенерированный
поставляемый
4
vendor/github.com/vmihailenco/msgpack/v5/decode_query.go
сгенерированный
поставляемый
@@ -77,12 +77,12 @@ func (d *Decoder) queryMapKey(q *queryResult) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
key, err := d.bytesTemp()
|
key, err := d.decodeStringTemp()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if string(key) == q.key {
|
if key == q.key {
|
||||||
if err := d.query(q); err != nil {
|
if err := d.query(q); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
21
vendor/github.com/vmihailenco/msgpack/v5/decode_string.go
сгенерированный
поставляемый
21
vendor/github.com/vmihailenco/msgpack/v5/decode_string.go
сгенерированный
поставляемый
@@ -95,19 +95,30 @@ func (d *Decoder) bytes(c byte, b []byte) ([]byte, error) {
|
|||||||
return readN(d.r, b, n)
|
return readN(d.r, b, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Decoder) bytesTemp() ([]byte, error) {
|
func (d *Decoder) decodeStringTemp() (string, error) {
|
||||||
|
if intern := d.flags&useInternedStringsFlag != 0; intern || len(d.dict) > 0 {
|
||||||
|
return d.decodeInternedString(intern)
|
||||||
|
}
|
||||||
|
|
||||||
c, err := d.readCode()
|
c, err := d.readCode()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
n, err := d.bytesLen(c)
|
n, err := d.bytesLen(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return "", err
|
||||||
}
|
}
|
||||||
if n == -1 {
|
if n == -1 {
|
||||||
return nil, nil
|
return "", nil
|
||||||
}
|
}
|
||||||
return d.readN(n)
|
|
||||||
|
b, err := d.readN(n)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytesToString(b), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Decoder) decodeBytesPtr(ptr *[]byte) error {
|
func (d *Decoder) decodeBytesPtr(ptr *[]byte) error {
|
||||||
|
|||||||
16
vendor/github.com/vmihailenco/msgpack/v5/encode.go
сгенерированный
поставляемый
16
vendor/github.com/vmihailenco/msgpack/v5/encode.go
сгенерированный
поставляемый
@@ -109,17 +109,15 @@ func (e *Encoder) ResetDict(w io.Writer, dict map[string]int) {
|
|||||||
e.resetWriter(w)
|
e.resetWriter(w)
|
||||||
e.flags = 0
|
e.flags = 0
|
||||||
e.structTag = ""
|
e.structTag = ""
|
||||||
e.SetDict(dict)
|
e.dict = dict
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Encoder) SetDict(dict map[string]int) {
|
func (e *Encoder) WithDict(dict map[string]int, fn func(*Encoder) error) error {
|
||||||
if len(dict) > 0 {
|
oldDict := e.dict
|
||||||
e.dict = dict
|
e.dict = dict
|
||||||
} else {
|
err := fn(e)
|
||||||
for k := range e.dict {
|
e.dict = oldDict
|
||||||
delete(e.dict, k)
|
return err
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Encoder) resetWriter(w io.Writer) {
|
func (e *Encoder) resetWriter(w io.Writer) {
|
||||||
|
|||||||
2
vendor/github.com/vmihailenco/msgpack/v5/unsafe.go
сгенерированный
поставляемый
2
vendor/github.com/vmihailenco/msgpack/v5/unsafe.go
сгенерированный
поставляемый
@@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// bytesToString converts byte slice to string.
|
// bytesToString converts byte slice to string.
|
||||||
func bytesToString(b []byte) string { //nolint:deadcode,unused
|
func bytesToString(b []byte) string {
|
||||||
return *(*string)(unsafe.Pointer(&b))
|
return *(*string)(unsafe.Pointer(&b))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/.gitignore
сгенерированный
поставляемый
2
vendor/go.opentelemetry.io/otel/.gitignore
сгенерированный
поставляемый
@@ -10,7 +10,6 @@ coverage.*
|
|||||||
|
|
||||||
gen/
|
gen/
|
||||||
|
|
||||||
/example/basic/basic
|
|
||||||
/example/grpc/client/client
|
/example/grpc/client/client
|
||||||
/example/grpc/server/server
|
/example/grpc/server/server
|
||||||
/example/http/client/client
|
/example/http/client/client
|
||||||
@@ -19,5 +18,6 @@ gen/
|
|||||||
/example/namedtracer/namedtracer
|
/example/namedtracer/namedtracer
|
||||||
/example/opencensus/opencensus
|
/example/opencensus/opencensus
|
||||||
/example/prometheus/prometheus
|
/example/prometheus/prometheus
|
||||||
|
/example/prom-collector/prom-collector
|
||||||
/example/zipkin/zipkin
|
/example/zipkin/zipkin
|
||||||
/example/otel-collector/otel-collector
|
/example/otel-collector/otel-collector
|
||||||
|
|||||||
51
vendor/go.opentelemetry.io/otel/CHANGELOG.md
сгенерированный
поставляемый
51
vendor/go.opentelemetry.io/otel/CHANGELOG.md
сгенерированный
поставляемый
@@ -8,6 +8,52 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-01-13
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add the `ReadOnlySpan` and `ReadWriteSpan` interfaces to provide better control for accessing span data. (#1360)
|
||||||
|
- `NewGRPCDriver` function returns a `ProtocolDriver` that maintains a single gRPC connection to the collector. (#1369)
|
||||||
|
- Added documentation about the project's versioning policy. (#1388)
|
||||||
|
- Added `NewSplitDriver` for OTLP exporter that allows sending traces and metrics to different endpoints. (#1418)
|
||||||
|
- Added codeql worfklow to GitHub Actions (#1428)
|
||||||
|
- Added Gosec workflow to GitHub Actions (#1429)
|
||||||
|
- Add new HTTP driver for OTLP exporter in `exporters/otlp/otlphttp`. Currently it only supports the binary protobuf payloads. (#1420)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Rename `internal/testing` to `internal/internaltest`. (#1449)
|
||||||
|
- Rename `export.SpanData` to `export.SpanSnapshot` and use it only for exporting spans. (#1360)
|
||||||
|
- Store the parent's full `SpanContext` rather than just its span ID in the `span` struct. (#1360)
|
||||||
|
- Improve span duration accuracy. (#1360)
|
||||||
|
- Migrated CI/CD from CircleCI to GitHub Actions (#1382)
|
||||||
|
- Remove duplicate checkout from GitHub Actions workflow (#1407)
|
||||||
|
- Metric `array` aggregator renamed `exact` to match its `aggregation.Kind` (#1412)
|
||||||
|
- Metric `exact` aggregator includes per-point timestamps (#1412)
|
||||||
|
- Metric stdout exporter uses MinMaxSumCount aggregator for ValueRecorder instruments (#1412)
|
||||||
|
- `NewExporter` from `exporters/otlp` now takes a `ProtocolDriver` as a parameter. (#1369)
|
||||||
|
- Many OTLP Exporter options became gRPC ProtocolDriver options. (#1369)
|
||||||
|
- Unify endpoint API that related to OTel exporter. (#1401)
|
||||||
|
- Optimize metric histogram aggregator to re-use its slice of buckets. (#1435)
|
||||||
|
- Metric aggregator Count() and histogram Bucket.Counts are consistently `uint64`. (1430)
|
||||||
|
- `SamplingResult` now passed a `Tracestate` from the parent `SpanContext` (#1432)
|
||||||
|
- Moved gRPC driver for OTLP exporter to `exporters/otlp/otlpgrpc`. (#1420)
|
||||||
|
- The `TraceContext` propagator now correctly propagates `TraceState` through the `SpanContext`. (#1447)
|
||||||
|
- Metric Push and Pull Controller components are combined into a single "basic" Controller:
|
||||||
|
- `WithExporter()` and `Start()` to configure Push behavior
|
||||||
|
- `Start()` is optional; use `Collect()` and `ForEach()` for Pull behavior
|
||||||
|
- `Start()` and `Stop()` accept Context. (#1378)
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Remove `errUninitializedSpan` as its only usage is now obsolete. (#1360)
|
||||||
|
- Remove Metric export functionality related to quantiles and summary data points: this is not specified (#1412)
|
||||||
|
- Remove DDSketch metric aggregator; our intention is to re-introduce this as an option of the histogram aggregator after [new OTLP histogram data types](https://github.com/open-telemetry/opentelemetry-proto/pull/226) are released (#1412)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `BatchSpanProcessor.Shutdown()` will now shutdown underlying `export.SpanExporter`. (#1443)
|
||||||
|
|
||||||
## [0.15.0] - 2020-12-10
|
## [0.15.0] - 2020-12-10
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@@ -23,7 +69,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
- Bump `github.com/google/go-cmp` from 0.5.3 to 0.5.4 (#1374)
|
- Bump `github.com/google/go-cmp` from 0.5.3 to 0.5.4 (#1374)
|
||||||
- Bump `github.com/golangci/golangci-lint` in `/internal/tools` (#1375)
|
- Bump `github.com/golangci/golangci-lint` in `/internal/tools` (#1375)
|
||||||
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Metric SDK `SumObserver` and `UpDownSumObserver` instruments correctness fixes. (#1381)
|
- Metric SDK `SumObserver` and `UpDownSumObserver` instruments correctness fixes. (#1381)
|
||||||
@@ -35,6 +80,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
- An `EventOption` and the related `NewEventConfig` function are added to the `go.opentelemetry.io/otel` package to configure Span events. (#1254)
|
- An `EventOption` and the related `NewEventConfig` function are added to the `go.opentelemetry.io/otel` package to configure Span events. (#1254)
|
||||||
- A `TextMapPropagator` and associated `TextMapCarrier` are added to the `go.opentelemetry.io/otel/oteltest` package to test `TextMap` type propagators and their use. (#1259)
|
- A `TextMapPropagator` and associated `TextMapCarrier` are added to the `go.opentelemetry.io/otel/oteltest` package to test `TextMap` type propagators and their use. (#1259)
|
||||||
- `SpanContextFromContext` returns `SpanContext` from context. (#1255)
|
- `SpanContextFromContext` returns `SpanContext` from context. (#1255)
|
||||||
|
- `TraceState` has been added to `SpanContext`. (#1340)
|
||||||
- `DeploymentEnvironmentKey` added to `go.opentelemetry.io/otel/semconv` package. (#1323)
|
- `DeploymentEnvironmentKey` added to `go.opentelemetry.io/otel/semconv` package. (#1323)
|
||||||
- Add an OpenCensus to OpenTelemetry tracing bridge. (#1305)
|
- Add an OpenCensus to OpenTelemetry tracing bridge. (#1305)
|
||||||
- Add a parent context argument to `SpanProcessor.OnStart` to follow the specification. (#1333)
|
- Add a parent context argument to `SpanProcessor.OnStart` to follow the specification. (#1333)
|
||||||
@@ -980,7 +1026,8 @@ It contains api and sdk for trace and meter.
|
|||||||
- CODEOWNERS file to track owners of this project.
|
- CODEOWNERS file to track owners of this project.
|
||||||
|
|
||||||
|
|
||||||
[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v0.15.0...HEAD
|
[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v0.16.0...HEAD
|
||||||
|
[0.16.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.16.0
|
||||||
[0.15.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.15.0
|
[0.15.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.15.0
|
||||||
[0.14.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.14.0
|
[0.14.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.14.0
|
||||||
[0.13.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.13.0
|
[0.13.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.13.0
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/CODEOWNERS
сгенерированный
поставляемый
2
vendor/go.opentelemetry.io/otel/CODEOWNERS
сгенерированный
поставляемый
@@ -12,6 +12,6 @@
|
|||||||
# https://help.github.com/en/articles/about-code-owners
|
# https://help.github.com/en/articles/about-code-owners
|
||||||
#
|
#
|
||||||
|
|
||||||
* @jmacd @lizthegrey @MrAlias @Aneurysm9 @evantorrie @XSAM
|
* @jmacd @lizthegrey @MrAlias @Aneurysm9 @evantorrie @XSAM @dashpole
|
||||||
|
|
||||||
CODEOWNERS @MrAlias @Aneurysm9
|
CODEOWNERS @MrAlias @Aneurysm9
|
||||||
|
|||||||
1
vendor/go.opentelemetry.io/otel/CONTRIBUTING.md
сгенерированный
поставляемый
1
vendor/go.opentelemetry.io/otel/CONTRIBUTING.md
сгенерированный
поставляемый
@@ -361,6 +361,7 @@ Approvers:
|
|||||||
- [Evan Torrie](https://github.com/evantorrie), Verizon Media
|
- [Evan Torrie](https://github.com/evantorrie), Verizon Media
|
||||||
- [Josh MacDonald](https://github.com/jmacd), LightStep
|
- [Josh MacDonald](https://github.com/jmacd), LightStep
|
||||||
- [Sam Xie](https://github.com/XSAM)
|
- [Sam Xie](https://github.com/XSAM)
|
||||||
|
- [David Ashpole](https://github.com/dashpole), Google
|
||||||
|
|
||||||
Maintainers:
|
Maintainers:
|
||||||
|
|
||||||
|
|||||||
7
vendor/go.opentelemetry.io/otel/README.md
сгенерированный
поставляемый
7
vendor/go.opentelemetry.io/otel/README.md
сгенерированный
поставляемый
@@ -1,6 +1,6 @@
|
|||||||
# OpenTelemetry-Go
|
# OpenTelemetry-Go
|
||||||
|
|
||||||
[](https://circleci.com/gh/open-telemetry/opentelemetry-go)
|
[](https://github.com/open-telemetry/opentelemetry-go/actions?query=workflow%3Aci+branch%3Amaster)
|
||||||
[](https://pkg.go.dev/go.opentelemetry.io/otel)
|
[](https://pkg.go.dev/go.opentelemetry.io/otel)
|
||||||
[](https://goreportcard.com/report/go.opentelemetry.io/otel)
|
[](https://goreportcard.com/report/go.opentelemetry.io/otel)
|
||||||
[](https://gitter.im/open-telemetry/opentelemetry-go?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
[](https://gitter.im/open-telemetry/opentelemetry-go?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||||
@@ -23,8 +23,13 @@ Progress and status specific to this repository is tracked in our local
|
|||||||
and
|
and
|
||||||
[milestones](https://github.com/open-telemetry/opentelemetry-go/milestones).
|
[milestones](https://github.com/open-telemetry/opentelemetry-go/milestones).
|
||||||
|
|
||||||
|
Project versioning information and stability guarantees can be found in the
|
||||||
|
[versioning documentation](./VERSIONING.md).
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
|
You can find a getting started guide on [opentelemetry.io](https://opentelemetry.io/docs/go/getting-started/).
|
||||||
|
|
||||||
OpenTelemetry's goal is to provide a single set of APIs to capture distributed
|
OpenTelemetry's goal is to provide a single set of APIs to capture distributed
|
||||||
traces and metrics from your application and send them to an observability
|
traces and metrics from your application and send them to an observability
|
||||||
platform. This project allows you to do just that for applications written in
|
platform. This project allows you to do just that for applications written in
|
||||||
|
|||||||
217
vendor/go.opentelemetry.io/otel/VERSIONING.md
сгенерированный
поставляемый
Обычный файл
217
vendor/go.opentelemetry.io/otel/VERSIONING.md
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,217 @@
|
|||||||
|
# Versioning
|
||||||
|
|
||||||
|
This document describes the versioning policy for this repository. This policy
|
||||||
|
is designed so the following goals can be achieved.
|
||||||
|
|
||||||
|
**Users are provided a codebase of value that is stable and secure.**
|
||||||
|
|
||||||
|
## Policy
|
||||||
|
|
||||||
|
* Versioning of this project will be idiomatic of a Go project using [Go
|
||||||
|
modules](https://github.com/golang/go/wiki/Modules).
|
||||||
|
* [Semantic import
|
||||||
|
versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning)
|
||||||
|
will be used.
|
||||||
|
* Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html).
|
||||||
|
* If a module is version `v2` or higher, the major version of the module
|
||||||
|
must be included as a `/vN` at the end of the module paths used in
|
||||||
|
`go.mod` files (e.g., `module go.opentelemetry.io/otel/v2`, `require
|
||||||
|
go.opentelemetry.io/otel/v2 v2.0.1`) and in the package import path
|
||||||
|
(e.g., `import "go.opentelemetry.io/otel/v2/trace"`). This includes the
|
||||||
|
paths used in `go get` commands (e.g., `go get
|
||||||
|
go.opentelemetry.io/otel/v2@v2.0.1`. Note there is both a `/v2` and a
|
||||||
|
`@v2.0.1` in that example. One way to think about it is that the module
|
||||||
|
name now includes the `/v2`, so include `/v2` whenever you are using the
|
||||||
|
module name).
|
||||||
|
* If a module is version `v0` or `v1`, do not include the major version in
|
||||||
|
either the module path or the import path.
|
||||||
|
* Modules will be used to encapsulate signals and components.
|
||||||
|
* Experimental modules still under active development will be versioned at
|
||||||
|
`v0` to imply the stability guarantee defined by
|
||||||
|
[semver](https://semver.org/spec/v2.0.0.html#spec-item-4).
|
||||||
|
|
||||||
|
> Major version zero (0.y.z) is for initial development. Anything MAY
|
||||||
|
> change at any time. The public API SHOULD NOT be considered stable.
|
||||||
|
|
||||||
|
* Mature modules for which we guarantee a stable public API will be versioned
|
||||||
|
with a major version greater than `v0`.
|
||||||
|
* The decision to make a module stable will be made on a case-by-case
|
||||||
|
basis by the maintainers of this project.
|
||||||
|
* Experimental modules will start their versioning at `v0.0.0` and will
|
||||||
|
increment their minor version when backwards incompatible changes are
|
||||||
|
released and increment their patch version when backwards compatible
|
||||||
|
changes are released.
|
||||||
|
* All stable modules that use the same major version number will use the
|
||||||
|
same entire version number.
|
||||||
|
* Stable modules may be released with an incremented minor or patch
|
||||||
|
version even though that module has not been changed, but rather so
|
||||||
|
that it will remain at the same version as other stable modules that
|
||||||
|
did undergo change.
|
||||||
|
* When an experimental module becomes stable a new stable module version
|
||||||
|
will be released and will include this now stable module. The new
|
||||||
|
stable module version will be an increment of the minor version number
|
||||||
|
and will be applied to all existing stable modules as well as the newly
|
||||||
|
stable module being released.
|
||||||
|
* Versioning of the associated [contrib
|
||||||
|
repository](https://github.com/open-telemetry/opentelemetry-go-contrib) of
|
||||||
|
this project will be idiomatic of a Go project using [Go
|
||||||
|
modules](https://github.com/golang/go/wiki/Modules).
|
||||||
|
* [Semantic import
|
||||||
|
versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning)
|
||||||
|
will be used.
|
||||||
|
* Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html).
|
||||||
|
* If a module is version `v2` or higher, the
|
||||||
|
major version of the module must be included as a `/vN` at the end of the
|
||||||
|
module paths used in `go.mod` files (e.g., `module
|
||||||
|
go.opentelemetry.io/contrib/instrumentation/host/v2`, `require
|
||||||
|
go.opentelemetry.io/contrib/instrumentation/host/v2 v2.0.1`) and in the
|
||||||
|
package import path (e.g., `import
|
||||||
|
"go.opentelemetry.io/contrib/instrumentation/host/v2"`). This includes
|
||||||
|
the paths used in `go get` commands (e.g., `go get
|
||||||
|
go.opentelemetry.io/contrib/instrumentation/host/v2@v2.0.1`. Note there
|
||||||
|
is both a `/v2` and a `@v2.0.1` in that example. One way to think about
|
||||||
|
it is that the module name now includes the `/v2`, so include `/v2`
|
||||||
|
whenever you are using the module name).
|
||||||
|
* If a module is version `v0` or `v1`, do not include the major version
|
||||||
|
in either the module path or the import path.
|
||||||
|
* In addition to public APIs, telemetry produced by stable instrumentation
|
||||||
|
will remain stable and backwards compatible. This is to avoid breaking
|
||||||
|
alerts and dashboard.
|
||||||
|
* Modules will be used to encapsulate instrumentation, detectors, exporters,
|
||||||
|
propagators, and any other independent sets of related components.
|
||||||
|
* Experimental modules still under active development will be versioned at
|
||||||
|
`v0` to imply the stability guarantee defined by
|
||||||
|
[semver](https://semver.org/spec/v2.0.0.html#spec-item-4).
|
||||||
|
|
||||||
|
> Major version zero (0.y.z) is for initial development. Anything MAY
|
||||||
|
> change at any time. The public API SHOULD NOT be considered stable.
|
||||||
|
|
||||||
|
* Mature modules for which we guarantee a stable public API and telemetry will
|
||||||
|
be versioned with a major version greater than `v0`.
|
||||||
|
* Experimental modules will start their versioning at `v0.0.0` and will
|
||||||
|
increment their minor version when backwards incompatible changes are
|
||||||
|
released and increment their patch version when backwards compatible
|
||||||
|
changes are released.
|
||||||
|
* Stable contrib modules cannot depend on experimental modules from this
|
||||||
|
project.
|
||||||
|
* All stable contrib modules of the same major version with this project
|
||||||
|
will use the same entire version as this project.
|
||||||
|
* Stable modules may be released with an incremented minor or patch
|
||||||
|
version even though that module's code has not been changed. Instead
|
||||||
|
the only change that will have been included is to have updated that
|
||||||
|
modules dependency on this project's stable APIs.
|
||||||
|
* When an experimental module in contrib becomes stable a new stable
|
||||||
|
module version will be released and will include this now stable
|
||||||
|
module. The new stable module version will be an increment of the minor
|
||||||
|
version number and will be applied to all existing stable contrib
|
||||||
|
modules, this project's modules, and the newly stable module being
|
||||||
|
released.
|
||||||
|
* Contrib modules will be kept up to date with this project's releases.
|
||||||
|
* Due to the dependency contrib modules will implicitly have on this
|
||||||
|
project's modules the release of stable contrib modules to match the
|
||||||
|
released version number will be staggered after this project's release.
|
||||||
|
There is no explicit time guarantee for how long after this projects
|
||||||
|
release the contrib release will be. Effort should be made to keep them
|
||||||
|
as close in time as possible.
|
||||||
|
* No additional stable release in this project can be made until the
|
||||||
|
contrib repository has a matching stable release.
|
||||||
|
* No release can be made in the contrib repository after this project's
|
||||||
|
stable release except for a stable release of the contrib repository.
|
||||||
|
* GitHub releases will be made for all releases.
|
||||||
|
* Go modules will be made available at Go package mirrors.
|
||||||
|
|
||||||
|
## Example Versioning Lifecycle
|
||||||
|
|
||||||
|
To better understand the implementation of the above policy the following
|
||||||
|
example is provided. This project is simplified to include only the following
|
||||||
|
modules and their versions:
|
||||||
|
|
||||||
|
* `otel`: `v0.14.0`
|
||||||
|
* `otel/trace`: `v0.14.0`
|
||||||
|
* `otel/metric`: `v0.14.0`
|
||||||
|
* `otel/baggage`: `v0.14.0`
|
||||||
|
* `otel/sdk/trace`: `v0.14.0`
|
||||||
|
* `otel/sdk/metric`: `v0.14.0`
|
||||||
|
|
||||||
|
These modules have been developed to a point where the `otel/trace`,
|
||||||
|
`otel/baggage`, and `otel/sdk/trace` modules have reached a point that they
|
||||||
|
should be considered for a stable release. The `otel/metric` and
|
||||||
|
`otel/sdk/metric` are still under active development and the `otel` module
|
||||||
|
depends on both `otel/trace` and `otel/metric`.
|
||||||
|
|
||||||
|
The `otel` package is refactored to remove its dependencies on `otel/metric` so
|
||||||
|
it can be released as stable as well. With that done the following release
|
||||||
|
candidates are made:
|
||||||
|
|
||||||
|
* `otel`: `v1.0.0-rc.1`
|
||||||
|
* `otel/trace`: `v1.0.0-rc.1`
|
||||||
|
* `otel/baggage`: `v1.0.0-rc.1`
|
||||||
|
* `otel/sdk/trace`: `v1.0.0-rc.1`
|
||||||
|
|
||||||
|
The `otel/metric` and `otel/sdk/metric` modules remain at `v0.14.0`.
|
||||||
|
|
||||||
|
A few minor issues are discovered in the `otel/trace` package. These issues are
|
||||||
|
resolved with some minor, but backwards incompatible, changes and are released
|
||||||
|
as a second release candidate:
|
||||||
|
|
||||||
|
* `otel`: `v1.0.0-rc.2`
|
||||||
|
* `otel/trace`: `v1.0.0-rc.2`
|
||||||
|
* `otel/baggage`: `v1.0.0-rc.2`
|
||||||
|
* `otel/sdk/trace`: `v1.0.0-rc.2`
|
||||||
|
|
||||||
|
Notice that all module version numbers are incremented to adhere to our
|
||||||
|
versioning policy.
|
||||||
|
|
||||||
|
After these release candidates have been evaluated to satisfaction, they are
|
||||||
|
released as version `v1.0.0`.
|
||||||
|
|
||||||
|
* `otel`: `v1.0.0`
|
||||||
|
* `otel/trace`: `v1.0.0`
|
||||||
|
* `otel/baggage`: `v1.0.0`
|
||||||
|
* `otel/sdk/trace`: `v1.0.0`
|
||||||
|
|
||||||
|
Since both the `go` utility and the Go module system support [the semantic
|
||||||
|
versioning definition of
|
||||||
|
precedence](https://semver.org/spec/v2.0.0.html#spec-item-11), this release
|
||||||
|
will correctly be interpreted as the successor to the previous release
|
||||||
|
candidates.
|
||||||
|
|
||||||
|
Active development of this project continues. The `otel/metric` module now has
|
||||||
|
backwards incompatible changes to its API that need to be released and the
|
||||||
|
`otel/baggage` module has a minor bug fix that needs to be released. The
|
||||||
|
following release is made:
|
||||||
|
|
||||||
|
* `otel`: `v1.0.1`
|
||||||
|
* `otel/trace`: `v1.0.1`
|
||||||
|
* `otel/metric`: `v0.15.0`
|
||||||
|
* `otel/baggage`: `v1.0.1`
|
||||||
|
* `otel/sdk/trace`: `v1.0.1`
|
||||||
|
* `otel/sdk/metric`: `v0.15.0`
|
||||||
|
|
||||||
|
Notice that, again, all stable module versions are incremented in unison and
|
||||||
|
the `otel/sdk/metric` package, which depends on the `otel/metric` package, also
|
||||||
|
bumped its version. This bump of the `otel/sdk/metric` package makes sense
|
||||||
|
given their coupling, though it is not explicitly required by our versioning
|
||||||
|
policy.
|
||||||
|
|
||||||
|
As we progress, the `otel/metric` and `otel/sdk/metric` packages have reached a
|
||||||
|
point where they should be evaluated for stability. The `otel` module is
|
||||||
|
reintegrated with the `otel/metric` package and the following release is made:
|
||||||
|
|
||||||
|
* `otel`: `v1.1.0-rc.1`
|
||||||
|
* `otel/trace`: `v1.1.0-rc.1`
|
||||||
|
* `otel/metric`: `v1.1.0-rc.1`
|
||||||
|
* `otel/baggage`: `v1.1.0-rc.1`
|
||||||
|
* `otel/sdk/trace`: `v1.1.0-rc.1`
|
||||||
|
* `otel/sdk/metric`: `v1.1.0-rc.1`
|
||||||
|
|
||||||
|
All the modules are evaluated and determined to a viable stable release. They
|
||||||
|
are then released as version `v1.1.0` (the minor version is incremented to
|
||||||
|
indicate the addition of new signal).
|
||||||
|
|
||||||
|
* `otel`: `v1.1.0`
|
||||||
|
* `otel/trace`: `v1.1.0`
|
||||||
|
* `otel/metric`: `v1.1.0`
|
||||||
|
* `otel/baggage`: `v1.1.0`
|
||||||
|
* `otel/sdk/trace`: `v1.1.0`
|
||||||
|
* `otel/sdk/metric`: `v1.1.0`
|
||||||
2
vendor/go.opentelemetry.io/otel/doc.go
сгенерированный
поставляемый
2
vendor/go.opentelemetry.io/otel/doc.go
сгенерированный
поставляемый
@@ -26,6 +26,8 @@ transmitted anywhere. An implementation of the OpenTelemetry SDK, like the
|
|||||||
default SDK implementation (go.opentelemetry.io/otel/sdk), and associated
|
default SDK implementation (go.opentelemetry.io/otel/sdk), and associated
|
||||||
exporters are used to process and transport this data.
|
exporters are used to process and transport this data.
|
||||||
|
|
||||||
|
To read the getting started guide, see https://opentelemetry.io/docs/go/getting-started/.
|
||||||
|
|
||||||
To read more about tracing, see go.opentelemetry.io/otel/trace.
|
To read more about tracing, see go.opentelemetry.io/otel/trace.
|
||||||
|
|
||||||
To read more about metrics, see go.opentelemetry.io/otel/metric.
|
To read more about metrics, see go.opentelemetry.io/otel/metric.
|
||||||
|
|||||||
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Ссылка в новой задаче
Block a user