slidge-whatsapp 0.2.5__cp312-cp312-manylinux_2_36_aarch64.whl → 0.2.6__cp312-cp312-manylinux_2_36_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of slidge-whatsapp might be problematic. Click here for more details.
- slidge_whatsapp/config.py +3 -0
- slidge_whatsapp/event.go +23 -24
- slidge_whatsapp/gateway.go +13 -9
- slidge_whatsapp/gateway.py +2 -2
- slidge_whatsapp/generated/_whatsapp.cpython-312-aarch64-linux-gnu.h +169 -169
- slidge_whatsapp/generated/_whatsapp.cpython-312-aarch64-linux-gnu.so +0 -0
- slidge_whatsapp/generated/build.py +135 -135
- slidge_whatsapp/generated/whatsapp.c +1455 -1455
- slidge_whatsapp/generated/whatsapp.go +737 -737
- slidge_whatsapp/generated/whatsapp.py +1038 -1038
- slidge_whatsapp/generated/whatsapp_go.h +169 -169
- slidge_whatsapp/go.mod +15 -12
- slidge_whatsapp/go.sum +41 -29
- slidge_whatsapp/media/media.go +16 -10
- slidge_whatsapp/session.go +73 -66
- slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn.go +4 -4
- slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn_darwin.go +0 -5
- slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go +3 -0
- slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/symbols.go +40 -20
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/CHANGELOG.md +14 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/ffi.go +2 -2
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/fun.go +10 -2
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib.go +1 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_unix.go +1 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_windows.go +1 -1
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/README.md +2 -7
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/callback.go +2 -1
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +8510 -5090
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +344 -150
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3.go +57 -23
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.c +4 -0
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/.gitignore +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/LICENSE +202 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/README.md +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid.go +35 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_gccgo.go +26 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.c +23 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.go +22 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.go +35 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.s +18 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.go +28 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.s +44 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_slow.go +24 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go +17 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.23.go +38 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.5.go +57 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.6.go +43 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.9.go +37 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/CONTRIBUTING.md +43 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/README.md +31 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/console.go +20 -5
- slidge_whatsapp/vendor/github.com/rs/zerolog/log/log.go +131 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/log.go +1 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/sampler.go +4 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/writer.go +9 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupCipher.go +17 -6
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go +17 -7
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go +4 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go +2 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/session/Session.go +41 -17
- slidge_whatsapp/vendor/go.mau.fi/libsignal/session/SessionCipher.go +64 -30
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go +5 -3
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go +6 -4
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go +6 -4
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SessionStore.go +8 -6
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go +7 -5
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/connlog.go +257 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/database.go +309 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/iter.go +233 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/json.go +47 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/log.go +129 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/massinsert.go +164 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/queryhelper.go +137 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/reflectscan.go +30 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/transaction.go +180 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgrades.go +250 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgradetable.go +331 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exerrors/dualerror.go +33 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exerrors/must.go +23 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/cors.go +32 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/handleerrors.go +64 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/json.go +41 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/middleware.go +30 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/networkerror.go +37 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/event.go +88 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/returnonce.go +25 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/ringbuffer.go +139 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +94 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +136 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/callermarshal.go +28 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/defaults.go +32 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/generics.go +45 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/writer.go +81 -0
- slidge_whatsapp/vendor/go.mau.fi/util/ptr/ptr.go +43 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +27 -26
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +4 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/keys.go +5 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +27 -25
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/broadcast.go +5 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +60 -15
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +25 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download-to-file.go +45 -19
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +52 -28
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +59 -29
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +166 -146
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/keepalive.go +2 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaconn.go +5 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaretry.go +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +270 -111
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +118 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +67 -36
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +7 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +42 -18
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +9 -5
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/privacysettings.go +10 -11
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +39 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +354 -175
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +5 -5
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +158 -15
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +29 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +13 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +344 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +26 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.pb.go → WACompanionReg.pb.go} +170 -84
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.proto → WACompanionReg.proto} +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +173 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +78 -16
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +5 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +6747 -2230
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +294 -43
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +456 -135
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +14 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +162 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +32 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +192 -52
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +60 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +39 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +61 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +1051 -382
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +32 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +27 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +59 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +382 -78
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +555 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +13 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +29 -19
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +244 -73
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +27 -16
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +3 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +85 -43
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +75 -88
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +79 -61
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go +186 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +291 -167
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql +153 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql +11 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql +5 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql +10 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go +22 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +105 -56
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/botmap.go +210 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/group.go +15 -6
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +7 -8
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/message.go +17 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/update.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/upload.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +45 -29
- slidge_whatsapp/vendor/golang.org/x/exp/LICENSE +27 -0
- slidge_whatsapp/vendor/golang.org/x/exp/PATENTS +22 -0
- slidge_whatsapp/vendor/golang.org/x/exp/constraints/constraints.go +54 -0
- slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
- slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/.gitignore +2 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/ascii.go +53 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/ciphers.go +641 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/client_conn_pool.go +311 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +122 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +61 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +16 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/databuffer.go +149 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/errors.go +145 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/flow.go +120 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +1702 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +170 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +432 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/pipe.go +184 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +3350 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +20 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +3287 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/write.go +381 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +251 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority.go +451 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_random.go +77 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +119 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/go118.go +13 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/idna10.0.0.go +769 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/idna9.0.0.go +717 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/pre_go118.go +11 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/punycode.go +217 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables10.0.0.go +4559 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables11.0.0.go +4653 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables12.0.0.go +4733 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables13.0.0.go +4959 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables9.0.0.go +4486 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie.go +51 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie12.0.0.go +30 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie13.0.0.go +30 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trieval.go +119 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +467 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +148 -1
- slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +16 -26
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +84 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +20 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +84 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +20 -0
- slidge_whatsapp/vendor/golang.org/x/sys/windows/security_windows.go +44 -5
- slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +4 -2
- slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +239 -0
- slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +9 -0
- slidge_whatsapp/vendor/golang.org/x/text/LICENSE +27 -0
- slidge_whatsapp/vendor/golang.org/x/text/PATENTS +22 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule.go +336 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +11 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +14 -0
- slidge_whatsapp/vendor/golang.org/x/text/transform/transform.go +709 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +1071 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +1815 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +1887 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +1923 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +1955 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +1781 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/forminfo.go +279 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/iter.go +458 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +7657 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +7693 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +7710 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +7760 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +7637 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +3 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +16 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/{strings_unsafe_go121.go → strings_unsafe.go} +0 -2
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
- slidge_whatsapp/vendor/google.golang.org/protobuf/proto/merge.go +6 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +2 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/{value_unsafe_go121.go → value_unsafe.go} +0 -2
- slidge_whatsapp/vendor/modules.txt +38 -13
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/METADATA +1 -1
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/RECORD +293 -180
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/WHEEL +1 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/CNAME +0 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/_config.yml +0 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +0 -23
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +0 -7
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +0 -296
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +0 -94
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +0 -98
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/LICENSE +0 -0
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exsync
|
|
8
|
+
|
|
9
|
+
import "sync"
|
|
10
|
+
|
|
11
|
+
// ReturnableOnce is a wrapper for sync.Once that can return a value
|
|
12
|
+
//
|
|
13
|
+
// Deprecated: Use [sync.OnceValues] instead.
|
|
14
|
+
type ReturnableOnce[Value any] struct {
|
|
15
|
+
once sync.Once
|
|
16
|
+
output Value
|
|
17
|
+
err error
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
func (ronce *ReturnableOnce[Value]) Do(fn func() (Value, error)) (Value, error) {
|
|
21
|
+
ronce.once.Do(func() {
|
|
22
|
+
ronce.output, ronce.err = fn()
|
|
23
|
+
})
|
|
24
|
+
return ronce.output, ronce.err
|
|
25
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exsync
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"errors"
|
|
11
|
+
"sync"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
type pair[Key comparable, Value any] struct {
|
|
15
|
+
Set bool
|
|
16
|
+
Key Key
|
|
17
|
+
Value Value
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type RingBuffer[Key comparable, Value any] struct {
|
|
21
|
+
ptr int
|
|
22
|
+
data []pair[Key, Value]
|
|
23
|
+
lock sync.RWMutex
|
|
24
|
+
size int
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func NewRingBuffer[Key comparable, Value any](size int) *RingBuffer[Key, Value] {
|
|
28
|
+
return &RingBuffer[Key, Value]{
|
|
29
|
+
data: make([]pair[Key, Value], size),
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var (
|
|
34
|
+
// StopIteration can be returned by the RingBuffer.Iter or MapRingBuffer callbacks to stop iteration immediately.
|
|
35
|
+
StopIteration = errors.New("stop iteration") //lint:ignore ST1012 not an error
|
|
36
|
+
|
|
37
|
+
// SkipItem can be returned by the MapRingBuffer callback to skip adding a specific item.
|
|
38
|
+
SkipItem = errors.New("skip item") //lint:ignore ST1012 not an error
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
func (rb *RingBuffer[Key, Value]) unlockedIter(callback func(key Key, val Value) error) error {
|
|
42
|
+
end := rb.ptr
|
|
43
|
+
for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) {
|
|
44
|
+
entry := rb.data[i]
|
|
45
|
+
if !entry.Set {
|
|
46
|
+
break
|
|
47
|
+
}
|
|
48
|
+
err := callback(entry.Key, entry.Value)
|
|
49
|
+
if err != nil {
|
|
50
|
+
if errors.Is(err, StopIteration) {
|
|
51
|
+
return nil
|
|
52
|
+
}
|
|
53
|
+
return err
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return nil
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
func (rb *RingBuffer[Key, Value]) Iter(callback func(key Key, val Value) error) error {
|
|
60
|
+
rb.lock.RLock()
|
|
61
|
+
defer rb.lock.RUnlock()
|
|
62
|
+
return rb.unlockedIter(callback)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func MapRingBuffer[Key comparable, Value, Output any](rb *RingBuffer[Key, Value], callback func(key Key, val Value) (Output, error)) ([]Output, error) {
|
|
66
|
+
rb.lock.RLock()
|
|
67
|
+
defer rb.lock.RUnlock()
|
|
68
|
+
output := make([]Output, 0, rb.size)
|
|
69
|
+
err := rb.unlockedIter(func(key Key, val Value) error {
|
|
70
|
+
item, err := callback(key, val)
|
|
71
|
+
if err != nil {
|
|
72
|
+
if errors.Is(err, SkipItem) {
|
|
73
|
+
return nil
|
|
74
|
+
}
|
|
75
|
+
return err
|
|
76
|
+
}
|
|
77
|
+
output = append(output, item)
|
|
78
|
+
return nil
|
|
79
|
+
})
|
|
80
|
+
return output, err
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
func (rb *RingBuffer[Key, Value]) Size() int {
|
|
84
|
+
rb.lock.RLock()
|
|
85
|
+
defer rb.lock.RUnlock()
|
|
86
|
+
return rb.size
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
func (rb *RingBuffer[Key, Value]) Contains(val Key) bool {
|
|
90
|
+
_, ok := rb.Get(val)
|
|
91
|
+
return ok
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
func (rb *RingBuffer[Key, Value]) Get(key Key) (val Value, found bool) {
|
|
95
|
+
rb.lock.RLock()
|
|
96
|
+
end := rb.ptr
|
|
97
|
+
for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) {
|
|
98
|
+
if rb.data[i].Key == key {
|
|
99
|
+
val = rb.data[i].Value
|
|
100
|
+
found = true
|
|
101
|
+
break
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
rb.lock.RUnlock()
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func (rb *RingBuffer[Key, Value]) Replace(key Key, val Value) bool {
|
|
109
|
+
rb.lock.Lock()
|
|
110
|
+
defer rb.lock.Unlock()
|
|
111
|
+
end := rb.ptr
|
|
112
|
+
for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) {
|
|
113
|
+
if rb.data[i].Key == key {
|
|
114
|
+
rb.data[i].Value = val
|
|
115
|
+
return true
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return false
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
func (rb *RingBuffer[Key, Value]) Push(key Key, val Value) {
|
|
122
|
+
rb.lock.Lock()
|
|
123
|
+
rb.data[rb.ptr] = pair[Key, Value]{Key: key, Value: val, Set: true}
|
|
124
|
+
rb.ptr = (rb.ptr + 1) % len(rb.data)
|
|
125
|
+
if rb.size < len(rb.data) {
|
|
126
|
+
rb.size++
|
|
127
|
+
}
|
|
128
|
+
rb.lock.Unlock()
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
func clamp(index, len int) int {
|
|
132
|
+
if index < 0 {
|
|
133
|
+
return len + index
|
|
134
|
+
} else if index >= len {
|
|
135
|
+
return len - index
|
|
136
|
+
} else {
|
|
137
|
+
return index
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exsync
|
|
8
|
+
|
|
9
|
+
import "sync"
|
|
10
|
+
|
|
11
|
+
// Map is a simple map with a built-in mutex.
|
|
12
|
+
type Map[Key comparable, Value any] struct {
|
|
13
|
+
data map[Key]Value
|
|
14
|
+
lock sync.RWMutex
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
func NewMap[Key comparable, Value any]() *Map[Key, Value] {
|
|
18
|
+
return &Map[Key, Value]{
|
|
19
|
+
data: make(map[Key]Value),
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Set stores a value in the map.
|
|
24
|
+
func (sm *Map[Key, Value]) Set(key Key, value Value) {
|
|
25
|
+
sm.Swap(key, value)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Swap sets a value in the map and returns the old value.
|
|
29
|
+
//
|
|
30
|
+
// The boolean return parameter is true if the value already existed, false if not.
|
|
31
|
+
func (sm *Map[Key, Value]) Swap(key Key, value Value) (oldValue Value, wasReplaced bool) {
|
|
32
|
+
sm.lock.Lock()
|
|
33
|
+
oldValue, wasReplaced = sm.data[key]
|
|
34
|
+
sm.data[key] = value
|
|
35
|
+
sm.lock.Unlock()
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Delete removes a key from the map.
|
|
40
|
+
func (sm *Map[Key, Value]) Delete(key Key) {
|
|
41
|
+
sm.Pop(key)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Pop removes a key from the map and returns the old value.
|
|
45
|
+
//
|
|
46
|
+
// The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not).
|
|
47
|
+
func (sm *Map[Key, Value]) Pop(key Key) (value Value, ok bool) {
|
|
48
|
+
sm.lock.Lock()
|
|
49
|
+
value, ok = sm.data[key]
|
|
50
|
+
delete(sm.data, key)
|
|
51
|
+
sm.lock.Unlock()
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Get gets a value in the map.
|
|
56
|
+
//
|
|
57
|
+
// The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not).
|
|
58
|
+
func (sm *Map[Key, Value]) Get(key Key) (value Value, ok bool) {
|
|
59
|
+
sm.lock.RLock()
|
|
60
|
+
value, ok = sm.data[key]
|
|
61
|
+
sm.lock.RUnlock()
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// GetOrSet gets a value in the map if the key already exists, otherwise inserts the given value and returns it.
|
|
66
|
+
//
|
|
67
|
+
// The boolean return parameter is true if the key already exists, and false if the given value was inserted.
|
|
68
|
+
func (sm *Map[Key, Value]) GetOrSet(key Key, value Value) (actual Value, wasGet bool) {
|
|
69
|
+
sm.lock.Lock()
|
|
70
|
+
defer sm.lock.Unlock()
|
|
71
|
+
actual, wasGet = sm.data[key]
|
|
72
|
+
if wasGet {
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
sm.data[key] = value
|
|
76
|
+
actual = value
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Clone returns a copy of the map.
|
|
81
|
+
func (sm *Map[Key, Value]) Clone() *Map[Key, Value] {
|
|
82
|
+
return &Map[Key, Value]{data: sm.CopyData()}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// CopyData returns a copy of the data in the map as a normal (non-atomic) map.
|
|
86
|
+
func (sm *Map[Key, Value]) CopyData() map[Key]Value {
|
|
87
|
+
sm.lock.RLock()
|
|
88
|
+
copied := make(map[Key]Value, len(sm.data))
|
|
89
|
+
for key, value := range sm.data {
|
|
90
|
+
copied[key] = value
|
|
91
|
+
}
|
|
92
|
+
sm.lock.RUnlock()
|
|
93
|
+
return copied
|
|
94
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exsync
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"sync"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
type empty struct{}
|
|
14
|
+
|
|
15
|
+
var emptyVal = empty{}
|
|
16
|
+
|
|
17
|
+
// Set is a wrapper around a map[T]struct{} with a built-in mutex.
|
|
18
|
+
type Set[T comparable] struct {
|
|
19
|
+
m map[T]empty
|
|
20
|
+
l sync.RWMutex
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// NewSet constructs a Set with an empty map.
|
|
24
|
+
func NewSet[T comparable]() *Set[T] {
|
|
25
|
+
return NewSetWithMap[T](make(map[T]empty))
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// NewSetWithSize constructs a Set with a map that has been allocated the given amount of space.
|
|
29
|
+
func NewSetWithSize[T comparable](size int) *Set[T] {
|
|
30
|
+
return NewSetWithMap[T](make(map[T]empty, size))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// NewSetWithMap constructs a Set with the given map. Accessing the map directly after passing it here is not safe.
|
|
34
|
+
func NewSetWithMap[T comparable](m map[T]empty) *Set[T] {
|
|
35
|
+
return &Set[T]{m: m}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// NewSetWithItems constructs a Set with items from the given slice pre-filled.
|
|
39
|
+
// The slice is not modified or used after the function returns, so using it after this is safe.
|
|
40
|
+
func NewSetWithItems[T comparable](items []T) *Set[T] {
|
|
41
|
+
s := NewSetWithSize[T](len(items))
|
|
42
|
+
for _, item := range items {
|
|
43
|
+
s.m[item] = emptyVal
|
|
44
|
+
}
|
|
45
|
+
return s
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Add adds an item to the set. The return value is true if the item was added to the set, or false otherwise.
|
|
49
|
+
func (s *Set[T]) Add(item T) bool {
|
|
50
|
+
if s == nil {
|
|
51
|
+
return false
|
|
52
|
+
}
|
|
53
|
+
s.l.Lock()
|
|
54
|
+
_, exists := s.m[item]
|
|
55
|
+
if exists {
|
|
56
|
+
s.l.Unlock()
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
59
|
+
s.m[item] = emptyVal
|
|
60
|
+
s.l.Unlock()
|
|
61
|
+
return true
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Has checks if the given item is in the set.
|
|
65
|
+
func (s *Set[T]) Has(item T) bool {
|
|
66
|
+
if s == nil {
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
s.l.RLock()
|
|
70
|
+
_, exists := s.m[item]
|
|
71
|
+
s.l.RUnlock()
|
|
72
|
+
return exists
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Pop removes the given item from the set. The return value is true if the item was in the set, or false otherwise.
|
|
76
|
+
func (s *Set[T]) Pop(item T) bool {
|
|
77
|
+
if s == nil {
|
|
78
|
+
return false
|
|
79
|
+
}
|
|
80
|
+
s.l.Lock()
|
|
81
|
+
_, exists := s.m[item]
|
|
82
|
+
if exists {
|
|
83
|
+
delete(s.m, item)
|
|
84
|
+
}
|
|
85
|
+
s.l.Unlock()
|
|
86
|
+
return exists
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Remove removes the given item from the set.
|
|
90
|
+
func (s *Set[T]) Remove(item T) {
|
|
91
|
+
if s == nil {
|
|
92
|
+
return
|
|
93
|
+
}
|
|
94
|
+
s.l.Lock()
|
|
95
|
+
delete(s.m, item)
|
|
96
|
+
s.l.Unlock()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ReplaceAll replaces this set with the given set. If the given set is nil, the set is cleared.
|
|
100
|
+
func (s *Set[T]) ReplaceAll(newSet *Set[T]) {
|
|
101
|
+
if s == nil {
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
s.l.Lock()
|
|
105
|
+
if newSet == nil {
|
|
106
|
+
s.m = make(map[T]empty)
|
|
107
|
+
} else {
|
|
108
|
+
s.m = newSet.m
|
|
109
|
+
}
|
|
110
|
+
s.l.Unlock()
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
func (s *Set[T]) Size() int {
|
|
114
|
+
if s == nil {
|
|
115
|
+
return 0
|
|
116
|
+
}
|
|
117
|
+
s.l.RLock()
|
|
118
|
+
size := len(s.m)
|
|
119
|
+
s.l.RUnlock()
|
|
120
|
+
return size
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
func (s *Set[T]) AsList() []T {
|
|
124
|
+
if s == nil {
|
|
125
|
+
return nil
|
|
126
|
+
}
|
|
127
|
+
s.l.RLock()
|
|
128
|
+
list := make([]T, len(s.m))
|
|
129
|
+
i := 0
|
|
130
|
+
for item := range s.m {
|
|
131
|
+
list[i] = item
|
|
132
|
+
i++
|
|
133
|
+
}
|
|
134
|
+
s.l.RUnlock()
|
|
135
|
+
return list
|
|
136
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exzerolog
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"fmt"
|
|
11
|
+
"runtime"
|
|
12
|
+
"strings"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
// CallerWithFunctionName is an implementation for zerolog.CallerMarshalFunc that includes the caller function name
|
|
16
|
+
// in addition to the file and line number.
|
|
17
|
+
//
|
|
18
|
+
// Use as
|
|
19
|
+
//
|
|
20
|
+
// zerolog.CallerMarshalFunc = exzerolog.CallerWithFunctionName
|
|
21
|
+
func CallerWithFunctionName(pc uintptr, file string, line int) string {
|
|
22
|
+
files := strings.Split(file, "/")
|
|
23
|
+
file = files[len(files)-1]
|
|
24
|
+
name := runtime.FuncForPC(pc).Name()
|
|
25
|
+
fns := strings.Split(name, ".")
|
|
26
|
+
name = fns[len(fns)-1]
|
|
27
|
+
return fmt.Sprintf("%s:%d:%s()", file, line, name)
|
|
28
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Copyright (c) 2024 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exzerolog
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"time"
|
|
11
|
+
|
|
12
|
+
"github.com/rs/zerolog"
|
|
13
|
+
deflog "github.com/rs/zerolog/log"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
// SetupDefaults updates zerolog globals with sensible defaults.
|
|
17
|
+
//
|
|
18
|
+
// * [zerolog.TimeFieldFormat] is set to time.RFC3339Nano instead of time.RFC3339
|
|
19
|
+
// * [zerolog.CallerMarshalFunc] is set to [CallerWithFunctionName]
|
|
20
|
+
// * [zerolog.DefaultContextLogger] is set to the given logger with default_context_log=true and caller info enabled
|
|
21
|
+
// * The global default [log.Logger] is set to the given logger with global_log=true and caller info enabled
|
|
22
|
+
// * [zerolog.LevelColors] are updated to swap trace and debug level colors
|
|
23
|
+
func SetupDefaults(log *zerolog.Logger) {
|
|
24
|
+
zerolog.TimeFieldFormat = time.RFC3339Nano
|
|
25
|
+
zerolog.CallerMarshalFunc = CallerWithFunctionName
|
|
26
|
+
defaultCtxLog := log.With().Bool("default_context_log", true).Caller().Logger()
|
|
27
|
+
zerolog.DefaultContextLogger = &defaultCtxLog
|
|
28
|
+
deflog.Logger = log.With().Bool("global_log", true).Caller().Logger()
|
|
29
|
+
// Swap trace and debug level colors so trace pops out the least
|
|
30
|
+
zerolog.LevelColors[zerolog.TraceLevel] = 0
|
|
31
|
+
zerolog.LevelColors[zerolog.DebugLevel] = 34 // blue
|
|
32
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exzerolog
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"fmt"
|
|
11
|
+
|
|
12
|
+
"github.com/rs/zerolog"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
func ArrayOf[T any](slice []T, fn func(arr *zerolog.Array, item T)) *zerolog.Array {
|
|
16
|
+
arr := zerolog.Arr()
|
|
17
|
+
for _, item := range slice {
|
|
18
|
+
fn(arr, item)
|
|
19
|
+
}
|
|
20
|
+
return arr
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
func AddObject[T zerolog.LogObjectMarshaler](arr *zerolog.Array, obj T) {
|
|
24
|
+
arr.Object(obj)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func AddStringer[T fmt.Stringer](arr *zerolog.Array, str T) {
|
|
28
|
+
arr.Str(str.String())
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func AddStr[T ~string](arr *zerolog.Array, str T) {
|
|
32
|
+
arr.Str(string(str))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
func ArrayOfObjs[T zerolog.LogObjectMarshaler](slice []T) *zerolog.Array {
|
|
36
|
+
return ArrayOf(slice, AddObject[T])
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
func ArrayOfStringers[T fmt.Stringer](slice []T) *zerolog.Array {
|
|
40
|
+
return ArrayOf(slice, AddStringer[T])
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
func ArrayOfStrs[T ~string](slice []T) *zerolog.Array {
|
|
44
|
+
return ArrayOf(slice, AddStr[T])
|
|
45
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Copyright (c) 2023 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package exzerolog
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"bytes"
|
|
11
|
+
"sync"
|
|
12
|
+
|
|
13
|
+
"github.com/rs/zerolog"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
// LogWriter wraps a zerolog.Logger and provides an io.Writer with buffering so each written line is logged separately.
|
|
17
|
+
type LogWriter struct {
|
|
18
|
+
log zerolog.Logger
|
|
19
|
+
level zerolog.Level
|
|
20
|
+
field string
|
|
21
|
+
mu sync.Mutex
|
|
22
|
+
buf bytes.Buffer
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
func NewLogWriter(log zerolog.Logger) *LogWriter {
|
|
26
|
+
zerolog.Nop()
|
|
27
|
+
return &LogWriter{
|
|
28
|
+
log: log,
|
|
29
|
+
level: zerolog.DebugLevel,
|
|
30
|
+
field: zerolog.MessageFieldName,
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
func (lw *LogWriter) WithLevel(level zerolog.Level) *LogWriter {
|
|
35
|
+
return &LogWriter{
|
|
36
|
+
log: lw.log,
|
|
37
|
+
level: level,
|
|
38
|
+
field: lw.field,
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
func (lw *LogWriter) WithField(field string) *LogWriter {
|
|
43
|
+
return &LogWriter{
|
|
44
|
+
log: lw.log,
|
|
45
|
+
level: lw.level,
|
|
46
|
+
field: field,
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
func (lw *LogWriter) writeLine(data []byte) {
|
|
51
|
+
if len(data) == 0 {
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
if data[len(data)-1] == '\n' {
|
|
55
|
+
data = data[:len(data)-1]
|
|
56
|
+
}
|
|
57
|
+
if lw.buf.Len() > 0 {
|
|
58
|
+
lw.buf.Write(data)
|
|
59
|
+
data = lw.buf.Bytes()
|
|
60
|
+
lw.buf.Reset()
|
|
61
|
+
}
|
|
62
|
+
lw.log.WithLevel(lw.level).Bytes(lw.field, data).Send()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func (lw *LogWriter) Write(data []byte) (n int, err error) {
|
|
66
|
+
lw.mu.Lock()
|
|
67
|
+
defer lw.mu.Unlock()
|
|
68
|
+
newline := bytes.IndexByte(data, '\n')
|
|
69
|
+
if newline == len(data)-1 {
|
|
70
|
+
lw.writeLine(data)
|
|
71
|
+
} else if newline < 0 {
|
|
72
|
+
lw.buf.Write(data)
|
|
73
|
+
} else {
|
|
74
|
+
lines := bytes.Split(data, []byte{'\n'})
|
|
75
|
+
for _, line := range lines[:len(lines)-1] {
|
|
76
|
+
lw.writeLine(line)
|
|
77
|
+
}
|
|
78
|
+
lw.buf.Write(lines[len(lines)-1])
|
|
79
|
+
}
|
|
80
|
+
return len(data), nil
|
|
81
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Copyright (c) 2024 Tulir Asokan
|
|
2
|
+
//
|
|
3
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
package ptr
|
|
8
|
+
|
|
9
|
+
// Clone creates a shallow copy of the given pointer.
|
|
10
|
+
func Clone[T any](val *T) *T {
|
|
11
|
+
if val == nil {
|
|
12
|
+
return nil
|
|
13
|
+
}
|
|
14
|
+
valCopy := *val
|
|
15
|
+
return &valCopy
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Ptr returns a pointer to the given value.
|
|
19
|
+
func Ptr[T any](val T) *T {
|
|
20
|
+
return &val
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// NonZero returns a pointer to the given comparable value, unless the value is the type's zero value.
|
|
24
|
+
func NonZero[T comparable](val T) *T {
|
|
25
|
+
var zero T
|
|
26
|
+
return NonDefault(val, zero)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// NonDefault returns a pointer to the first parameter, unless it is equal to the second parameter.
|
|
30
|
+
func NonDefault[T comparable](val, def T) *T {
|
|
31
|
+
if val == def {
|
|
32
|
+
return nil
|
|
33
|
+
}
|
|
34
|
+
return &val
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Val returns the value of the given pointer, or the zero value of the type if the pointer is nil.
|
|
38
|
+
func Val[T any](ptr *T) (val T) {
|
|
39
|
+
if ptr != nil {
|
|
40
|
+
val = *ptr
|
|
41
|
+
}
|
|
42
|
+
return
|
|
43
|
+
}
|