Skip to content

Commit

Permalink
feat: implement abort controller support to abort RPCs
Browse files Browse the repository at this point in the history
Currently adds 1 patch for the following pending PR:

 - stephenh/ts-proto#730
 - stephenh/ts-proto#731

Signed-off-by: Christian Stewart <christian@paral.in>
  • Loading branch information
paralin committed Dec 13, 2022
1 parent fefdae7 commit aa194ae
Show file tree
Hide file tree
Showing 17 changed files with 446 additions and 351 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,9 @@ gents: $(PROTOWRAP) node_modules
--ts_proto_opt=forceLong=long \
--ts_proto_opt=oneof=unions \
--ts_proto_opt=outputServices=default,outputServices=generic-definitions \
--ts_proto_opt=useDate=true \
--ts_proto_opt=useAbortSignal=true \
--ts_proto_opt=useAsyncIterable=true \
--ts_proto_opt=useDate=true \
--proto_path $$(pwd)/vendor \
--print_structure \
--only_specified_files \
Expand Down
14 changes: 10 additions & 4 deletions e2e/mock/mock.pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export const MockMsg = {
/** Mock service mocks some RPCs for the e2e tests. */
export interface Mock {
/** MockRequest runs a mock unary request. */
MockRequest(request: MockMsg): Promise<MockMsg>
MockRequest(request: MockMsg, abortSignal?: AbortSignal): Promise<MockMsg>
}

export class MockClientImpl implements Mock {
Expand All @@ -107,9 +107,14 @@ export class MockClientImpl implements Mock {
this.rpc = rpc
this.MockRequest = this.MockRequest.bind(this)
}
MockRequest(request: MockMsg): Promise<MockMsg> {
MockRequest(request: MockMsg, abortSignal?: AbortSignal): Promise<MockMsg> {
const data = MockMsg.encode(request).finish()
const promise = this.rpc.request(this.service, 'MockRequest', data)
const promise = this.rpc.request(
this.service,
'MockRequest',
data,
abortSignal || undefined
)
return promise.then((data) => MockMsg.decode(new _m0.Reader(data)))
}
}
Expand All @@ -136,7 +141,8 @@ interface Rpc {
request(
service: string,
method: string,
data: Uint8Array
data: Uint8Array,
abortSignal?: AbortSignal
): Promise<Uint8Array>
}

Expand Down
2 changes: 1 addition & 1 deletion e2e/mock/mock_srpc.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 30 additions & 1 deletion echo/client-test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Client } from '../srpc/index.js'
import { Client, ERR_RPC_ABORT } from '../srpc/index.js'
import { EchoerClientImpl, EchoMsg } from './echo.pb.js'
import { pushable } from 'it-pushable'
import { buildRpcStreamOpenStream } from '../rpcstream/rpcstream.js'
Expand Down Expand Up @@ -30,6 +30,35 @@ export async function runClientTest(client: Client) {
}
}

// runAbortControllerTest tests aborting a RPC call.
export async function runAbortControllerTest(client: Client) {
const demoServiceClient = new EchoerClientImpl(client)

console.log('Testing EchoClientStream with AbortController...')
let errorReturned = false
const clientAbort = new AbortController()
const clientNoopStream = pushable<EchoMsg>({ objectMode: true })
new Promise((resolve) => setTimeout(resolve, 1000)).then(() => {
clientAbort.abort()
})
try {
await demoServiceClient.EchoClientStream(
clientNoopStream,
clientAbort.signal
)
} catch (err) {
const errMsg = (err as Error).message
errorReturned = true
if (errMsg !== ERR_RPC_ABORT) {
throw new Error('unexpected error: ' + errMsg)
}
} finally {
if (!errorReturned) {
throw new Error('expected aborted rpc to throw error')
}
}
}

// runRpcStreamTest tests a RPCStream.
export async function runRpcStreamTest(client: Client) {
console.log('Calling RpcStream to open a RPC stream client...')
Expand Down
71 changes: 52 additions & 19 deletions echo/echo.pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,16 +97,26 @@ export const EchoMsg = {
/** Echoer service returns the given message. */
export interface Echoer {
/** Echo returns the given message. */
Echo(request: EchoMsg): Promise<EchoMsg>
Echo(request: EchoMsg, abortSignal?: AbortSignal): Promise<EchoMsg>
/** EchoServerStream is an example of a server -> client one-way stream. */
EchoServerStream(request: EchoMsg): AsyncIterable<EchoMsg>
EchoServerStream(
request: EchoMsg,
abortSignal?: AbortSignal
): AsyncIterable<EchoMsg>
/** EchoClientStream is an example of client->server one-way stream. */
EchoClientStream(request: AsyncIterable<EchoMsg>): Promise<EchoMsg>
EchoClientStream(
request: AsyncIterable<EchoMsg>,
abortSignal?: AbortSignal
): Promise<EchoMsg>
/** EchoBidiStream is an example of a two-way stream. */
EchoBidiStream(request: AsyncIterable<EchoMsg>): AsyncIterable<EchoMsg>
EchoBidiStream(
request: AsyncIterable<EchoMsg>,
abortSignal?: AbortSignal
): AsyncIterable<EchoMsg>
/** RpcStream opens a nested rpc call stream. */
RpcStream(
request: AsyncIterable<RpcStreamPacket>
request: AsyncIterable<RpcStreamPacket>,
abortSignal?: AbortSignal
): AsyncIterable<RpcStreamPacket>
}

Expand All @@ -122,50 +132,69 @@ export class EchoerClientImpl implements Echoer {
this.EchoBidiStream = this.EchoBidiStream.bind(this)
this.RpcStream = this.RpcStream.bind(this)
}
Echo(request: EchoMsg): Promise<EchoMsg> {
Echo(request: EchoMsg, abortSignal?: AbortSignal): Promise<EchoMsg> {
const data = EchoMsg.encode(request).finish()
const promise = this.rpc.request(this.service, 'Echo', data)
const promise = this.rpc.request(
this.service,
'Echo',
data,
abortSignal || undefined
)
return promise.then((data) => EchoMsg.decode(new _m0.Reader(data)))
}

EchoServerStream(request: EchoMsg): AsyncIterable<EchoMsg> {
EchoServerStream(
request: EchoMsg,
abortSignal?: AbortSignal
): AsyncIterable<EchoMsg> {
const data = EchoMsg.encode(request).finish()
const result = this.rpc.serverStreamingRequest(
this.service,
'EchoServerStream',
data
data,
abortSignal || undefined
)
return EchoMsg.decodeTransform(result)
}

EchoClientStream(request: AsyncIterable<EchoMsg>): Promise<EchoMsg> {
EchoClientStream(
request: AsyncIterable<EchoMsg>,
abortSignal?: AbortSignal
): Promise<EchoMsg> {
const data = EchoMsg.encodeTransform(request)
const promise = this.rpc.clientStreamingRequest(
this.service,
'EchoClientStream',
data
data,
abortSignal || undefined
)
return promise.then((data) => EchoMsg.decode(new _m0.Reader(data)))
}

EchoBidiStream(request: AsyncIterable<EchoMsg>): AsyncIterable<EchoMsg> {
EchoBidiStream(
request: AsyncIterable<EchoMsg>,
abortSignal?: AbortSignal
): AsyncIterable<EchoMsg> {
const data = EchoMsg.encodeTransform(request)
const result = this.rpc.bidirectionalStreamingRequest(
this.service,
'EchoBidiStream',
data
data,
abortSignal || undefined
)
return EchoMsg.decodeTransform(result)
}

RpcStream(
request: AsyncIterable<RpcStreamPacket>
request: AsyncIterable<RpcStreamPacket>,
abortSignal?: AbortSignal
): AsyncIterable<RpcStreamPacket> {
const data = RpcStreamPacket.encodeTransform(request)
const result = this.rpc.bidirectionalStreamingRequest(
this.service,
'RpcStream',
data
data,
abortSignal || undefined
)
return RpcStreamPacket.decodeTransform(result)
}
Expand Down Expand Up @@ -229,22 +258,26 @@ interface Rpc {
request(
service: string,
method: string,
data: Uint8Array
data: Uint8Array,
abortSignal?: AbortSignal
): Promise<Uint8Array>
clientStreamingRequest(
service: string,
method: string,
data: AsyncIterable<Uint8Array>
data: AsyncIterable<Uint8Array>,
abortSignal?: AbortSignal
): Promise<Uint8Array>
serverStreamingRequest(
service: string,
method: string,
data: Uint8Array
data: Uint8Array,
abortSignal?: AbortSignal
): AsyncIterable<Uint8Array>
bidirectionalStreamingRequest(
service: string,
method: string,
data: AsyncIterable<Uint8Array>
data: AsyncIterable<Uint8Array>,
abortSignal?: AbortSignal
): AsyncIterable<Uint8Array>
}

Expand Down
2 changes: 1 addition & 1 deletion echo/echo_srpc.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 8 additions & 8 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ require (
)

require (
github.com/aperturerobotics/util v0.0.0-20221202094321-2fde40039383
github.com/libp2p/go-libp2p v0.24.0-dev.0.20221202071826-2cc4de512664
github.com/aperturerobotics/util v0.0.0-20221205090205-f776a34d2d0d
github.com/libp2p/go-libp2p v0.24.1
github.com/libp2p/go-yamux/v4 v4.0.1-0.20220919134236-1c09f2ab3ec1
github.com/sirupsen/logrus v1.9.0
)
Expand All @@ -19,23 +19,23 @@ require (
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/ipfs/go-cid v0.3.2 // indirect
github.com/klauspost/compress v1.15.10 // indirect
github.com/klauspost/cpuid/v2 v2.1.1 // indirect
github.com/klauspost/compress v1.15.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.1 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/libp2p/go-openssl v0.1.0 // indirect
github.com/mattn/go-pointer v0.0.1 // indirect
github.com/minio/sha256-simd v1.0.0 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
github.com/multiformats/go-base32 v0.1.0 // indirect
github.com/multiformats/go-base36 v0.1.1-0.20220823151017-f5af2eed4d9c // indirect
github.com/multiformats/go-base36 v0.2.0 // indirect
github.com/multiformats/go-multiaddr v0.8.0 // indirect
github.com/multiformats/go-multibase v0.1.2-0.20220823162309-7160a7347ed1 // indirect
github.com/multiformats/go-multicodec v0.7.1-0.20221017174837-a2baec7ca709 // indirect
github.com/multiformats/go-multihash v0.2.2-0.20221030163302-608669da49b6 // indirect
github.com/multiformats/go-varint v0.0.7-0.20220823162201-881f9a52d5d2 // indirect
github.com/multiformats/go-varint v0.0.7 // indirect
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect
github.com/spaolacci/murmur3 v1.1.1-0.20190317074736-539464a789e9 // indirect
golang.org/x/crypto v0.2.1-0.20221109165004-21d60a152191 // indirect
golang.org/x/sys v0.2.0 // indirect
golang.org/x/crypto v0.3.0 // indirect
golang.org/x/sys v0.3.0 // indirect
lukechampine.com/blake3 v1.1.8-0.20220321170924-7afca5966e5e // indirect
)
34 changes: 17 additions & 17 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
github.com/aperturerobotics/util v0.0.0-20221202094321-2fde40039383 h1:r0TEmQAFN1Ji+1iMqBW1ymiofevQaUb3uOQTje2wp3Q=
github.com/aperturerobotics/util v0.0.0-20221202094321-2fde40039383/go.mod h1:up2AYcp62UgmFVTm7QhM4USXAKGv73gpb5dHraKmzxQ=
github.com/aperturerobotics/util v0.0.0-20221205090205-f776a34d2d0d h1:nYXEY4LHTW7a7Vf+Lt+7icxoc02wIyLCa12xPbFuIxo=
github.com/aperturerobotics/util v0.0.0-20221205090205-f776a34d2d0d/go.mod h1:up2AYcp62UgmFVTm7QhM4USXAKGv73gpb5dHraKmzxQ=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -42,18 +42,18 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.15.10 h1:Ai8UzuomSCDw90e1qNMtb15msBXsNpH6gzkkENQNcJo=
github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM=
github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0=
github.com/klauspost/cpuid/v2 v2.1.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/klauspost/cpuid/v2 v2.2.1 h1:U33DW0aiEj633gHYw3LoDNfkDiYnE5Q8M/TKJn2f2jI=
github.com/klauspost/cpuid/v2 v2.2.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
github.com/libp2p/go-libp2p v0.24.0-dev.0.20221202071826-2cc4de512664 h1:pv+MuIVoXKlPfxZ/dGjK+aDK3fFmfuo7ombAjrBN7z0=
github.com/libp2p/go-libp2p v0.24.0-dev.0.20221202071826-2cc4de512664/go.mod h1:WVV1V9SPcZ0uV/sBB5X3zsKZW/EikukrgTp1ABOcqWk=
github.com/libp2p/go-libp2p v0.24.1 h1:+lS4fqj7RF9egcPq9Yo3iqdRTcDMApzoBbQMhxtwOVw=
github.com/libp2p/go-libp2p v0.24.1/go.mod h1:5LJqbrqFsUzWrq70JHCYqjATlX4ey8Klpct3OEe8hSI=
github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA=
github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo=
github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc=
Expand All @@ -73,8 +73,8 @@ github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
github.com/multiformats/go-base36 v0.1.1-0.20220823151017-f5af2eed4d9c h1:3eLctj5+2JpWf0E8PICebevkyD0KcZUhye8ggScrnEQ=
github.com/multiformats/go-base36 v0.1.1-0.20220823151017-f5af2eed4d9c/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU=
github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs=
github.com/multiformats/go-multibase v0.1.2-0.20220823162309-7160a7347ed1 h1:fts9VGSGzcENj3XnQ3iz9LGMAJAqT46fUGyaUDGFuxQ=
Expand All @@ -83,8 +83,8 @@ github.com/multiformats/go-multicodec v0.7.1-0.20221017174837-a2baec7ca709 h1:Xw
github.com/multiformats/go-multicodec v0.7.1-0.20221017174837-a2baec7ca709/go.mod h1:GUC8upxSBE4oG+q3kWZRw/+6yC1BqO550bjhWsJbZlw=
github.com/multiformats/go-multihash v0.2.2-0.20221030163302-608669da49b6 h1:qLF997Rz0X1WvdcZ2r5CUkLZ2rvdiXwG1JRSrJZEAuE=
github.com/multiformats/go-multihash v0.2.2-0.20221030163302-608669da49b6/go.mod h1:kaHxr8TfO1cxIR/tYxgZ7e59HraJq8arEQQR8E/YNvI=
github.com/multiformats/go-varint v0.0.7-0.20220823162201-881f9a52d5d2 h1:zsa4CR/QUzyyNdyaotjJrqFzKbzCsWzhQWcUSamGWr8=
github.com/multiformats/go-varint v0.0.7-0.20220823162201-881f9a52d5d2/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand All @@ -99,7 +99,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
Expand All @@ -109,8 +109,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.2.1-0.20221109165004-21d60a152191 h1:mPxyLskqfKMEHYEIa1kKmcNC8ZSiJLYbMaXyUpW+ooY=
golang.org/x/crypto v0.2.1-0.20221109165004-21d60a152191/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A=
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
Expand All @@ -126,8 +126,8 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
Expand Down
Loading

0 comments on commit aa194ae

Please sign in to comment.