Compare commits
	
		
			16 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 55623618a5 | ||
| 6209a03044 | |||
|  | 9bb2f8cffa | ||
| 24801750a7 | |||
|  | b37fca95cf | ||
| 4c4a024e19 | |||
| b93e634873 | |||
| 4a6414b2b8 | |||
| 938ddd2ab3 | |||
| 04e0597b73 | |||
| 4d55c7b90a | |||
| fbe82a3905 | |||
|  | 14490a419e | ||
| d434261168 | |||
| 2e384a5b75 | |||
| d9e7ac75ef | 
							
								
								
									
										28
									
								
								.github/autoapprove.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.github/autoapprove.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| name: "autoapprove" | ||||
|  | ||||
| on: | ||||
|   pull_request_target: | ||||
|     types: [assigned, opened, synchronize, reopened] | ||||
|   workflow_run: | ||||
|     workflows: ["prbuild"] | ||||
|     types: | ||||
|       - completed | ||||
|  | ||||
| permissions: | ||||
|   pull-requests: write | ||||
|   contents: write | ||||
|  | ||||
| jobs: | ||||
|   autoapprove: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: approve | ||||
|         run: [ "curl -o tea https://dl.gitea.com/tea/main/tea-main-linux-amd64", | ||||
|                "chmod +x ./tea", | ||||
|                "./tea login add --name unistack --token ${{ secrets.GITHUB_TOKEN }} --url https://git.unistack.org", | ||||
|                "./tea pr --repo ${{ github.event.repository.name }}" | ||||
|         ] | ||||
|         if: github.actor == 'vtolstov' | ||||
|         id: approve | ||||
|         with: | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
							
								
								
									
										94
									
								
								.github/workflows/job_sync.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								.github/workflows/job_sync.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| name: sync | ||||
|  | ||||
| on: | ||||
|   schedule: | ||||
|     - cron: '*/5 * * * *' | ||||
|   # Allows you to run this workflow manually from the Actions tab | ||||
|   workflow_dispatch: | ||||
|  | ||||
| jobs: | ||||
|   sync: | ||||
|     if: github.server_url != 'https://github.com' | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: init | ||||
|       run: | | ||||
|         git config --global user.email "vtolstov <vtolstov@users.noreply.github.com>" | ||||
|         git config --global user.name "github-actions[bot]" | ||||
|         echo "machine git.unistack.org login vtolstov password ${{ secrets.TOKEN_GITEA }}" >> /root/.netrc | ||||
|         echo "machine github.com login vtolstov password ${{ secrets.TOKEN_GITHUB }}" >> /root/.netrc | ||||
|  | ||||
|     - name: check master | ||||
|       id: check_master | ||||
|       run: | | ||||
|         src_hash=$(git ls-remote https://github.com/${GITHUB_REPOSITORY} refs/heads/master | cut -f1) | ||||
|         dst_hash=$(git ls-remote ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} refs/heads/master | cut -f1) | ||||
|         echo "src_hash=$src_hash" | ||||
|         echo "dst_hash=$dst_hash" | ||||
|         if [ "$src_hash" != "$dst_hash" ]; then | ||||
|           echo "sync_needed=true" >> $GITHUB_OUTPUT | ||||
|         else | ||||
|           echo "sync_needed=false" >> $GITHUB_OUTPUT | ||||
|         fi | ||||
|  | ||||
|     - name: sync master | ||||
|       if: steps.check_master.outputs.sync_needed == 'true' | ||||
|       run: | | ||||
|         git clone --filter=blob:none --filter=tree:0 --branch master --single-branch ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} repo | ||||
|         cd repo | ||||
|         git remote add --no-tags --fetch --track master upstream https://github.com/${GITHUB_REPOSITORY} | ||||
|         git pull --rebase upstream master | ||||
|         git push upstream master --progress | ||||
|         git push origin master --progress | ||||
|         cd ../ | ||||
|         rm -rf repo | ||||
|  | ||||
|     - name: check v3 | ||||
|       id: check_v3 | ||||
|       run: | | ||||
|         src_hash=$(git ls-remote https://github.com/${GITHUB_REPOSITORY} refs/heads/v3 | cut -f1) | ||||
|         dst_hash=$(git ls-remote ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} refs/heads/v3 | cut -f1) | ||||
|         echo "src_hash=$src_hash" | ||||
|         echo "dst_hash=$dst_hash" | ||||
|         if [ "$src_hash" != "$dst_hash" ]; then | ||||
|           echo "sync_needed=true" >> $GITHUB_OUTPUT | ||||
|         else | ||||
|           echo "sync_needed=false" >> $GITHUB_OUTPUT | ||||
|         fi | ||||
|  | ||||
|     - name: sync v3 | ||||
|       if: steps.check_v3.outputs.sync_needed == 'true' | ||||
|       run: | | ||||
|         git clone --filter=blob:none --filter=tree:0 --branch v3 --single-branch ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} repo | ||||
|         cd repo | ||||
|         git remote add --no-tags --fetch --track v3 upstream https://github.com/${GITHUB_REPOSITORY} | ||||
|         git pull --rebase upstream v3 | ||||
|         git push upstream v3 --progress | ||||
|         git push origin v3 --progress | ||||
|         cd ../ | ||||
|         rm -rf repo | ||||
|  | ||||
|     - name: check v4 | ||||
|       id: check_v4 | ||||
|       run: | | ||||
|         src_hash=$(git ls-remote https://github.com/${GITHUB_REPOSITORY} refs/heads/v4 | cut -f1) | ||||
|         dst_hash=$(git ls-remote ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} refs/heads/v4 | cut -f1) | ||||
|         echo "src_hash=$src_hash" | ||||
|         echo "dst_hash=$dst_hash" | ||||
|         if [ "$src_hash" != "$dst_hash" ]; then | ||||
|           echo "sync_needed=true" >> $GITHUB_OUTPUT | ||||
|         else | ||||
|           echo "sync_needed=false" >> $GITHUB_OUTPUT | ||||
|         fi | ||||
|  | ||||
|     - name: sync v4 | ||||
|       if: steps.check_v4.outputs.sync_needed == 'true' | ||||
|       run: | | ||||
|         git clone --filter=blob:none --filter=tree:0 --branch v4 --single-branch ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} repo | ||||
|         cd repo | ||||
|         git remote add --no-tags --fetch --track v4 upstream https://github.com/${GITHUB_REPOSITORY} | ||||
|         git pull --rebase upstream v4 | ||||
|         git push upstream v4 --progress | ||||
|         git push origin v4 --progress | ||||
|         cd ../ | ||||
|         rm -rf repo | ||||
							
								
								
									
										36
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,8 +1,8 @@ | ||||
| # HTTP Client | ||||
|  | ||||
|  | ||||
| This plugin is an HTTP client for [Micro](https://pkg.go.dev/go.unistack.org/micro/v3). | ||||
| It implements the [micro.Client](https://pkg.go.dev/go.unistack.org/micro/v3/client#Client) interface. | ||||
| This plugin is an HTTP client for [Micro](https://pkg.go.dev/go.unistack.org/micro/v4). | ||||
| It implements the [micro.Client](https://pkg.go.dev/go.unistack.org/micro/v4/client#Client) interface. | ||||
|  | ||||
| ## Overview | ||||
|  | ||||
| @@ -18,8 +18,8 @@ implements HTTP rules defined in the [google/api/http.proto](https://github.com/ | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     "go.unistack.org/micro/v3" | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     "go.unistack.org/micro/v4" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
| ) | ||||
|  | ||||
| service := micro.NewService( | ||||
| @@ -32,9 +32,9 @@ service := micro.NewService( | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     "go.unistack.org/micro/v3/client" | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     jsoncodec "go.unistack.org/micro-codec-json/v3" | ||||
|     "go.unistack.org/micro/v4/client" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
|     jsoncodec "go.unistack.org/micro-codec-json/v4" | ||||
| ) | ||||
|  | ||||
| c := http.NewClient( | ||||
| @@ -60,8 +60,8 @@ err := c.Call( | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     "go.unistack.org/micro/v3/client" | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     "go.unistack.org/micro/v4/client" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
| ) | ||||
|  | ||||
| err := c.Call( | ||||
| @@ -79,8 +79,8 @@ err := c.Call( | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     "go.unistack.org/micro/v3/metadata" | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     "go.unistack.org/micro/v4/metadata" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
| ) | ||||
|  | ||||
| ctx := metadata.NewOutgoingContext(ctx, metadata.Pairs( | ||||
| @@ -100,8 +100,8 @@ err := c.Call( | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     "go.unistack.org/micro/v3/metadata" | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     "go.unistack.org/micro/v4/metadata" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
| ) | ||||
|  | ||||
| respMetadata := metadata.Metadata{} | ||||
| @@ -118,8 +118,8 @@ err := c.Call( | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     "go.unistack.org/micro/v3/metadata" | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     "go.unistack.org/micro/v4/metadata" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
| ) | ||||
|  | ||||
| ctx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs( | ||||
| @@ -138,9 +138,9 @@ err := c.Call( | ||||
|  | ||||
| ```go | ||||
| import ( | ||||
|     http "go.unistack.org/micro-client-http/v3" | ||||
|     status "go.unistack.org/micro-client-http/v3/status" | ||||
|     jsoncodec "go.unistack.org/micro-codec-json/v3" | ||||
|     http "go.unistack.org/micro-client-http/v4" | ||||
|     status "go.unistack.org/micro-client-http/v4/status" | ||||
|     jsoncodec "go.unistack.org/micro-codec-json/v4" | ||||
| ) | ||||
|  | ||||
| err := c.Call( | ||||
|   | ||||
| @@ -3745,7 +3745,7 @@ const file_test_messages_proto_rawDesc = "" + | ||||
| 	"\fSpecialError\x12\x12\n" + | ||||
| 	"\x04code\x18\x01 \x01(\tR\x04code\x12\x10\n" + | ||||
| 	"\x03msg\x18\x02 \x01(\tR\x03msg\x12\x18\n" + | ||||
| 	"\awarning\x18\x03 \x01(\tR\awarningB2Z0go.unistack.org/micro-client-http/v3/proto;protob\x06proto3" | ||||
| 	"\awarning\x18\x03 \x01(\tR\awarningB2Z0go.unistack.org/micro-client-http/v4/proto;protob\x06proto3" | ||||
|  | ||||
| var ( | ||||
| 	file_test_messages_proto_rawDescOnce sync.Once | ||||
|   | ||||
| @@ -2,7 +2,7 @@ syntax = "proto3"; | ||||
|  | ||||
| package proto; | ||||
|  | ||||
| option go_package = "go.unistack.org/micro-client-http/v3/proto;proto"; | ||||
| option go_package = "go.unistack.org/micro-client-http/v4/proto;proto"; | ||||
|  | ||||
| message TestRequestBuilder {} | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import ( | ||||
|  | ||||
| 	"google.golang.org/protobuf/proto" | ||||
|  | ||||
| 	pb "go.unistack.org/micro-client-http/v3/builder/proto" | ||||
| 	pb "go.unistack.org/micro-client-http/v4/builder/proto" | ||||
| ) | ||||
|  | ||||
| // sink prevents the compiler from optimizing away parsePathTemplate results. | ||||
|   | ||||
| @@ -6,8 +6,8 @@ import ( | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
|  | ||||
| 	"go.unistack.org/micro-client-http/v3/builder" | ||||
| 	pb "go.unistack.org/micro-client-http/v3/builder/proto" | ||||
| 	"go.unistack.org/micro-client-http/v4/builder" | ||||
| 	pb "go.unistack.org/micro-client-http/v4/builder/proto" | ||||
| ) | ||||
|  | ||||
| func TestNewRequestBuilder(t *testing.T) { | ||||
|   | ||||
							
								
								
									
										10
									
								
								client.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								client.go
									
									
									
									
									
								
							| @@ -7,11 +7,11 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	"go.unistack.org/micro/v3/errors" | ||||
| 	"go.unistack.org/micro/v3/options" | ||||
| 	"go.unistack.org/micro/v3/semconv" | ||||
| 	"go.unistack.org/micro/v3/tracer" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| 	"go.unistack.org/micro/v4/errors" | ||||
| 	"go.unistack.org/micro/v4/options" | ||||
| 	"go.unistack.org/micro/v4/semconv" | ||||
| 	"go.unistack.org/micro/v4/tracer" | ||||
| ) | ||||
|  | ||||
| var DefaultContentType = "application/json" | ||||
|   | ||||
| @@ -11,14 +11,14 @@ import ( | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	"go.unistack.org/micro/v3/codec" | ||||
| 	"go.unistack.org/micro/v3/logger" | ||||
| 	"go.unistack.org/micro/v3/metadata" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| 	"go.unistack.org/micro/v4/codec" | ||||
| 	"go.unistack.org/micro/v4/logger" | ||||
| 	"go.unistack.org/micro/v4/metadata" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
|  | ||||
| 	"go.unistack.org/micro-client-http/v3/builder" | ||||
| 	"go.unistack.org/micro-client-http/v4/builder" | ||||
| ) | ||||
|  | ||||
| func buildHTTPRequest( | ||||
| @@ -205,7 +205,7 @@ func setHeadersAndCookies(ctx context.Context, r *http.Request, ct string, opts | ||||
| 				applyCookies(r, v) | ||||
| 				continue | ||||
| 			} | ||||
| 			r.Header[k] = append(r.Header[k], v) | ||||
| 			r.Header[k] = append(r.Header[k], v...) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -215,18 +215,20 @@ func setHeadersAndCookies(ctx context.Context, r *http.Request, ct string, opts | ||||
| 				applyCookies(r, v) | ||||
| 				continue | ||||
| 			} | ||||
| 			r.Header[k] = append(r.Header[k], v) | ||||
| 			r.Header[k] = append(r.Header[k], v...) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func applyCookies(r *http.Request, rawCookies string) { | ||||
| func applyCookies(r *http.Request, rawCookies []string) { | ||||
| 	if len(rawCookies) == 0 { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	raw := strings.Join(rawCookies, "; ") | ||||
|  | ||||
| 	tmp := http.Request{Header: http.Header{}} | ||||
| 	tmp.Header.Set("Cookie", rawCookies) | ||||
| 	tmp.Header.Set("Cookie", raw) | ||||
|  | ||||
| 	for _, c := range tmp.Cookies() { | ||||
| 		r.AddCookie(c) | ||||
|   | ||||
| @@ -6,10 +6,10 @@ import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	jsoncodec "go.unistack.org/micro-codec-json/v3" | ||||
| 	jsoncodec "go.unistack.org/micro-codec-json/v4" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
|  | ||||
| 	pb "go.unistack.org/micro-client-http/v3/builder/proto" | ||||
| 	pb "go.unistack.org/micro-client-http/v4/builder/proto" | ||||
| ) | ||||
|  | ||||
| func TestJoinURL(t *testing.T) { | ||||
| @@ -232,24 +232,24 @@ func TestMarshallMsg(t *testing.T) { | ||||
| func TestApplyCookies(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name       string | ||||
| 		rawCookies string | ||||
| 		rawCookies []string | ||||
| 		want       []*http.Cookie | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:       "empty", | ||||
| 			rawCookies: "", | ||||
| 			rawCookies: []string{}, | ||||
| 			want:       []*http.Cookie{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "single cookie", | ||||
| 			rawCookies: "session=abc123", | ||||
| 			rawCookies: []string{"session=abc123"}, | ||||
| 			want: []*http.Cookie{ | ||||
| 				{Name: "session", Value: "abc123"}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "multiple cookies separate items", | ||||
| 			rawCookies: "session=abc123; user=john", | ||||
| 			rawCookies: []string{"session=abc123", "user=john"}, | ||||
| 			want: []*http.Cookie{ | ||||
| 				{Name: "session", Value: "abc123"}, | ||||
| 				{Name: "user", Value: "john"}, | ||||
| @@ -257,7 +257,7 @@ func TestApplyCookies(t *testing.T) { | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "multiple cookies in one item", | ||||
| 			rawCookies: "a=1; b=2", | ||||
| 			rawCookies: []string{"a=1; b=2"}, | ||||
| 			want: []*http.Cookie{ | ||||
| 				{Name: "a", Value: "1"}, | ||||
| 				{Name: "b", Value: "2"}, | ||||
| @@ -265,7 +265,7 @@ func TestApplyCookies(t *testing.T) { | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "mix of combined and separate cookies", | ||||
| 			rawCookies: "a=1; b=2; c=3", | ||||
| 			rawCookies: []string{"a=1; b=2", "c=3"}, | ||||
| 			want: []*http.Cookie{ | ||||
| 				{Name: "a", Value: "1"}, | ||||
| 				{Name: "b", Value: "2"}, | ||||
| @@ -274,7 +274,7 @@ func TestApplyCookies(t *testing.T) { | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "duplicate cookies", | ||||
| 			rawCookies: "session=abc123; session=xyz", | ||||
| 			rawCookies: []string{"session=abc123", "session=xyz"}, | ||||
| 			want: []*http.Cookie{ | ||||
| 				{Name: "session", Value: "abc123"}, | ||||
| 				{Name: "session", Value: "xyz"}, | ||||
| @@ -282,7 +282,7 @@ func TestApplyCookies(t *testing.T) { | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "cookie with spaces", | ||||
| 			rawCookies: "token=abc 123", | ||||
| 			rawCookies: []string{"token=abc 123"}, | ||||
| 			want: []*http.Cookie{ | ||||
| 				{Name: "token", Value: "abc 123", Quoted: true}, | ||||
| 			}, | ||||
|   | ||||
| @@ -3,7 +3,7 @@ package http | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| ) | ||||
|  | ||||
| // TODO: Add stream support in the future. | ||||
|   | ||||
| @@ -10,14 +10,14 @@ import ( | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	"go.unistack.org/micro/v3/codec" | ||||
| 	"go.unistack.org/micro/v3/errors" | ||||
| 	"go.unistack.org/micro/v3/logger" | ||||
| 	"go.unistack.org/micro/v3/metadata" | ||||
| 	"go.unistack.org/micro/v3/selector" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| 	"go.unistack.org/micro/v4/codec" | ||||
| 	"go.unistack.org/micro/v4/errors" | ||||
| 	"go.unistack.org/micro/v4/logger" | ||||
| 	"go.unistack.org/micro/v4/metadata" | ||||
| 	"go.unistack.org/micro/v4/selector" | ||||
|  | ||||
| 	"go.unistack.org/micro-client-http/v3/status" | ||||
| 	"go.unistack.org/micro-client-http/v4/status" | ||||
| ) | ||||
|  | ||||
| func (c *Client) fnCall(ctx context.Context, req client.Request, rsp any, opts ...client.CallOption) error { | ||||
|   | ||||
| @@ -9,15 +9,15 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	jsoncodec "go.unistack.org/micro-codec-json/v3" | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	microerr "go.unistack.org/micro/v3/errors" | ||||
| 	"go.unistack.org/micro/v3/metadata" | ||||
| 	jsoncodec "go.unistack.org/micro-codec-json/v4" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| 	microerr "go.unistack.org/micro/v4/errors" | ||||
| 	"go.unistack.org/micro/v4/metadata" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
|  | ||||
| 	httpcli "go.unistack.org/micro-client-http/v3" | ||||
| 	pb "go.unistack.org/micro-client-http/v3/builder/proto" | ||||
| 	"go.unistack.org/micro-client-http/v3/status" | ||||
| 	httpcli "go.unistack.org/micro-client-http/v4" | ||||
| 	pb "go.unistack.org/micro-client-http/v4/builder/proto" | ||||
| 	"go.unistack.org/micro-client-http/v4/status" | ||||
| ) | ||||
|  | ||||
| func TestClient_Call_Get(t *testing.T) { | ||||
| @@ -130,10 +130,9 @@ func TestClient_Call_Get(t *testing.T) { | ||||
| 			) | ||||
|  | ||||
| 			var ( | ||||
| 				md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 				ctx   = metadata.NewOutgoingContext( | ||||
| 				ctx = metadata.NewOutgoingContext( | ||||
| 					context.Background(), | ||||
| 					md, | ||||
| 					metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 				) | ||||
| 				rsp          = &response{} | ||||
| 				respMetadata = metadata.Metadata{} | ||||
| @@ -163,8 +162,8 @@ func TestClient_Call_Get(t *testing.T) { | ||||
| 			} else { | ||||
| 				require.NoError(t, err) | ||||
| 				require.True(t, proto.Equal(tt.wantRsp, rsp)) | ||||
| 				require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 				require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| @@ -279,10 +278,9 @@ func TestClient_Call_Head(t *testing.T) { | ||||
| 			) | ||||
|  | ||||
| 			var ( | ||||
| 				md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 				ctx   = metadata.NewOutgoingContext( | ||||
| 				ctx = metadata.NewOutgoingContext( | ||||
| 					context.Background(), | ||||
| 					md, | ||||
| 					metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 				) | ||||
| 				rsp          = &response{} | ||||
| 				respMetadata = metadata.Metadata{} | ||||
| @@ -312,8 +310,8 @@ func TestClient_Call_Head(t *testing.T) { | ||||
| 			} else { | ||||
| 				require.NoError(t, err) | ||||
| 				require.True(t, proto.Equal(tt.wantRsp, rsp)) | ||||
| 				require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 				require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| @@ -464,10 +462,9 @@ func TestClient_Call_Post(t *testing.T) { | ||||
| 			) | ||||
|  | ||||
| 			var ( | ||||
| 				md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 				ctx   = metadata.NewOutgoingContext( | ||||
| 				ctx = metadata.NewOutgoingContext( | ||||
| 					context.Background(), | ||||
| 					md, | ||||
| 					metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 				) | ||||
| 				rsp          = &response{} | ||||
| 				respMetadata = metadata.Metadata{} | ||||
| @@ -497,8 +494,8 @@ func TestClient_Call_Post(t *testing.T) { | ||||
| 			} else { | ||||
| 				require.NoError(t, err) | ||||
| 				require.True(t, proto.Equal(tt.wantRsp, rsp)) | ||||
| 				require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 				require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| @@ -614,10 +611,9 @@ func TestClient_Call_Delete(t *testing.T) { | ||||
| 			) | ||||
|  | ||||
| 			var ( | ||||
| 				md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 				ctx   = metadata.NewOutgoingContext( | ||||
| 				ctx = metadata.NewOutgoingContext( | ||||
| 					context.Background(), | ||||
| 					md, | ||||
| 					metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 				) | ||||
| 				rsp          = &response{} | ||||
| 				respMetadata = metadata.Metadata{} | ||||
| @@ -647,8 +643,8 @@ func TestClient_Call_Delete(t *testing.T) { | ||||
| 			} else { | ||||
| 				require.NoError(t, err) | ||||
| 				require.True(t, proto.Equal(tt.wantRsp, rsp)) | ||||
| 				require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 				require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| @@ -771,10 +767,9 @@ func TestClient_Call_APIError_WithErrorsMap(t *testing.T) { | ||||
| 			) | ||||
|  | ||||
| 			var ( | ||||
| 				md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 				ctx   = metadata.NewOutgoingContext( | ||||
| 				ctx = metadata.NewOutgoingContext( | ||||
| 					context.Background(), | ||||
| 					md, | ||||
| 					metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 				) | ||||
| 				req = &request{UserId: "123", OrderId: 456} | ||||
| 				rsp = &response{} | ||||
| @@ -808,8 +803,8 @@ func TestClient_Call_APIError_WithErrorsMap(t *testing.T) { | ||||
| 			require.Equal(t, tt.expectedStatus, s) | ||||
| 			require.Empty(t, rsp) | ||||
|  | ||||
| 			require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 			require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 			require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 			require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| @@ -863,10 +858,9 @@ func TestClient_Call_APIError_WithoutErrorsMap(t *testing.T) { | ||||
| 	) | ||||
|  | ||||
| 	var ( | ||||
| 		md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 		ctx   = metadata.NewOutgoingContext( | ||||
| 		ctx = metadata.NewOutgoingContext( | ||||
| 			context.Background(), | ||||
| 			md, | ||||
| 			metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 		) | ||||
| 		req = &request{UserId: "123", OrderId: 456} | ||||
| 		rsp = &response{} | ||||
| @@ -896,8 +890,8 @@ func TestClient_Call_APIError_WithoutErrorsMap(t *testing.T) { | ||||
| 	require.Equal(t, expectedStatus, s) | ||||
| 	require.Empty(t, rsp) | ||||
|  | ||||
| 	require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 	require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 	require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 	require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| } | ||||
|  | ||||
| func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| @@ -954,8 +948,7 @@ func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| 				})) | ||||
| 			}, | ||||
| 			prepareMetadata: func() metadata.Metadata { | ||||
| 				md, _ := metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 				return md | ||||
| 				return metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 			}, | ||||
| 			headerOption: httpcli.Header("Authorization", "true", "My-Header", "true"), | ||||
| 			expectedRsp:  &response{Id: "product-id", Name: "product-name"}, | ||||
| @@ -999,8 +992,7 @@ func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| 				})) | ||||
| 			}, | ||||
| 			prepareMetadata: func() metadata.Metadata { | ||||
| 				md, _ := metadata.Pairs("Authorization", "Bearer token") | ||||
| 				return md | ||||
| 				return metadata.Pairs("Authorization", "Bearer token") | ||||
| 			}, | ||||
| 			headerOption: httpcli.Header("Authorization", "true", "My-Header", "true"), | ||||
| 			wantErr:      true, | ||||
| @@ -1043,8 +1035,7 @@ func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| 				})) | ||||
| 			}, | ||||
| 			prepareMetadata: func() metadata.Metadata { | ||||
| 				md, _ := metadata.Pairs("Cookie", "session_id=abc123; theme=dark") | ||||
| 				return md | ||||
| 				return metadata.Pairs("Cookie", "session_id=abc123; theme=dark") | ||||
| 			}, | ||||
| 			cookieOption: httpcli.Cookie("session_id", "true", "theme", "true"), | ||||
| 			expectedRsp:  &response{Id: "product-id", Name: "product-name"}, | ||||
| @@ -1087,8 +1078,7 @@ func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| 				})) | ||||
| 			}, | ||||
| 			prepareMetadata: func() metadata.Metadata { | ||||
| 				md, _ := metadata.Pairs("Cookie", "session_id=abc123") | ||||
| 				return md | ||||
| 				return metadata.Pairs("Cookie", "session_id=abc123") | ||||
| 			}, | ||||
| 			cookieOption: httpcli.Cookie("session_id", "true", "theme", "true"), | ||||
| 			wantErr:      true, | ||||
| @@ -1133,12 +1123,11 @@ func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| 				})) | ||||
| 			}, | ||||
| 			prepareMetadata: func() metadata.Metadata { | ||||
| 				md, _ := metadata.Pairs( | ||||
| 				return metadata.Pairs( | ||||
| 					"Authorization", "Bearer token", | ||||
| 					"My-Header", "My-Header-Value", | ||||
| 					"Cookie", "session_id=abc123; theme=dark", | ||||
| 				) | ||||
| 				return md | ||||
| 			}, | ||||
| 			headerOption: httpcli.Header("Authorization", "true", "My-Header", "true"), | ||||
| 			cookieOption: httpcli.Cookie("session_id", "true", "theme", "true"), | ||||
| @@ -1190,8 +1179,8 @@ func TestClient_Call_HeadersAndCookies(t *testing.T) { | ||||
| 			} else { | ||||
| 				require.NoError(t, err) | ||||
| 				require.True(t, proto.Equal(tt.expectedRsp, rsp)) | ||||
| 				require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 				require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 				require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| @@ -1239,10 +1228,9 @@ func TestClient_Call_NoContent(t *testing.T) { | ||||
| 	) | ||||
|  | ||||
| 	var ( | ||||
| 		md, _ = metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value") | ||||
| 		ctx   = metadata.NewOutgoingContext( | ||||
| 		ctx = metadata.NewOutgoingContext( | ||||
| 			context.Background(), | ||||
| 			md, | ||||
| 			metadata.Pairs("Authorization", "Bearer token", "My-Header", "My-Header-Value"), | ||||
| 		) | ||||
| 		req = &request{UserId: "123", OrderId: 456} | ||||
| 		rsp = &response{} | ||||
| @@ -1267,8 +1255,8 @@ func TestClient_Call_NoContent(t *testing.T) { | ||||
| 	require.NoError(t, err) | ||||
| 	require.Empty(t, rsp) | ||||
|  | ||||
| 	require.Equal(t, "application/json", respMetadata.MustGet("Content-Type")) | ||||
| 	require.Equal(t, "My-Header-Value", respMetadata.MustGet("My-Header")) | ||||
| 	require.Equal(t, "application/json", respMetadata.GetJoined("Content-Type")) | ||||
| 	require.Equal(t, "My-Header-Value", respMetadata.GetJoined("My-Header")) | ||||
| } | ||||
|  | ||||
| func TestClient_Call_RequestTimeoutError(t *testing.T) { | ||||
|   | ||||
							
								
								
									
										23
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								go.mod
									
									
									
									
									
								
							| @@ -1,26 +1,25 @@ | ||||
| module go.unistack.org/micro-client-http/v3 | ||||
| module go.unistack.org/micro-client-http/v4 | ||||
|  | ||||
| go 1.24.0 | ||||
| go 1.23.0 | ||||
|  | ||||
| toolchain go1.24.3 | ||||
| toolchain go1.24.2 | ||||
|  | ||||
| require ( | ||||
| 	github.com/stretchr/testify v1.11.1 | ||||
| 	go.unistack.org/micro-codec-json/v3 v3.10.3 | ||||
| 	go.unistack.org/micro/v3 v3.11.45 | ||||
| 	google.golang.org/protobuf v1.36.10 | ||||
| 	go.unistack.org/micro-codec-json/v4 v4.1.0 | ||||
| 	go.unistack.org/micro/v4 v4.1.19 | ||||
| 	google.golang.org/protobuf v1.36.9 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	github.com/ash3in/uuidv8 v1.2.0 // indirect | ||||
| 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect | ||||
| 	github.com/google/uuid v1.6.0 // indirect | ||||
| 	github.com/kr/pretty v0.3.1 // indirect | ||||
| 	github.com/matoous/go-nanoid v1.5.1 // indirect | ||||
| 	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect | ||||
| 	go.unistack.org/micro-proto/v3 v3.4.1 // indirect | ||||
| 	golang.org/x/sys v0.36.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4 // indirect | ||||
| 	google.golang.org/grpc v1.75.1 // indirect | ||||
| 	github.com/spf13/cast v1.9.2 // indirect | ||||
| 	go.unistack.org/micro-proto/v4 v4.1.0 // indirect | ||||
| 	golang.org/x/sys v0.35.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect | ||||
| 	google.golang.org/grpc v1.75.0 // indirect | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||
| ) | ||||
|   | ||||
							
								
								
									
										39
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,10 +1,7 @@ | ||||
| github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= | ||||
| github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= | ||||
| github.com/ash3in/uuidv8 v1.2.0 h1:2oogGdtCPwaVtyvPPGin4TfZLtOGE5F+W++E880G6SI= | ||||
| github.com/ash3in/uuidv8 v1.2.0/go.mod h1:BnU0wJBxnzdEKmVg4xckBkD+VZuecTFTUP3M0dWgyY4= | ||||
| github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= | ||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||
| github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= | ||||
| github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= | ||||
| github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= | ||||
| github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= | ||||
| @@ -17,32 +14,32 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||
| github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | ||||
| github.com/matoous/go-nanoid v1.5.1 h1:aCjdvTyO9LLnTIi0fgdXhOPPvOHjpXN6Ik9DaNjIct4= | ||||
| github.com/matoous/go-nanoid v1.5.1/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= | ||||
| github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= | ||||
| github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= | ||||
| github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= | ||||
| github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= | ||||
| github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= | ||||
| github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= | ||||
| github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= | ||||
| go.unistack.org/micro-codec-json/v3 v3.10.3 h1:FwSBfJswov30Dyqxp1XfQW1EG4h77uTEe/VGflg6XlY= | ||||
| go.unistack.org/micro-codec-json/v3 v3.10.3/go.mod h1:26OK5MizMNKhspGC6PRVwpDIp5w1GmRb0nE5eRWWDxA= | ||||
| go.unistack.org/micro-proto/v3 v3.4.1 h1:UTjLSRz2YZuaHk9iSlVqqsA50JQNAEK2ZFboGqtEa9Q= | ||||
| go.unistack.org/micro-proto/v3 v3.4.1/go.mod h1:okx/cnOhzuCX0ggl/vToatbCupi0O44diiiLLsZ93Zo= | ||||
| go.unistack.org/micro/v3 v3.11.45 h1:fjTLZYWgsVf9FIMZBxOg8ios2/tmyimnjZrsrxEUeXU= | ||||
| go.unistack.org/micro/v3 v3.11.45/go.mod h1:fDQ8Mu9wubaFP0L8hNQlpzHiEnWN0wbOlawN9HYo0N4= | ||||
| go.unistack.org/micro-codec-json/v4 v4.1.0 h1:iydeSkt3ee7IPU0dHHKlGN97lw+YFQasBk9rdv0woYA= | ||||
| go.unistack.org/micro-codec-json/v4 v4.1.0/go.mod h1:aUg86elSlURSynTAetDAAXj/VzFDwwcg92QNrRzcvrM= | ||||
| go.unistack.org/micro-proto/v4 v4.1.0 h1:qPwL2n/oqh9RE3RTTDgt28XK3QzV597VugQPaw9lKUk= | ||||
| go.unistack.org/micro-proto/v4 v4.1.0/go.mod h1:ArmK7o+uFvxSY3dbJhKBBX4Pm1rhWdLEFf3LxBrMtec= | ||||
| go.unistack.org/micro/v4 v4.1.19 h1:LKpmSPYvX5B9AkFD7JqMU/U06v5yEWn2bsCG/YKZtZI= | ||||
| go.unistack.org/micro/v4 v4.1.19/go.mod h1:xleO2M5Yxh4s6I+RUcLrEpUjobefh+71ctrdIfn7TUs= | ||||
| golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= | ||||
| golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= | ||||
| golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= | ||||
| golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= | ||||
| golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= | ||||
| golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= | ||||
| golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= | ||||
| golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4 h1:i8QOKZfYg6AbGVZzUAY3LrNWCKF8O6zFisU9Wl9RER4= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= | ||||
| google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= | ||||
| google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= | ||||
| google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= | ||||
| google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= | ||||
| google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= | ||||
| google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= | ||||
| google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= | ||||
| google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import ( | ||||
| 	"net/http" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| ) | ||||
|  | ||||
| // --------------------------------------------- HTTPClient option ----------------------------------------------------- | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package http | ||||
|  | ||||
| import ( | ||||
| 	"go.unistack.org/micro/v3/client" | ||||
| 	"go.unistack.org/micro/v3/codec" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| 	"go.unistack.org/micro/v4/codec" | ||||
| ) | ||||
|  | ||||
| type httpRequest struct { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.unistack.org/micro-client-http/v3/status" | ||||
| 	"go.unistack.org/micro-client-http/v4/status" | ||||
| ) | ||||
|  | ||||
| type fakeError struct{ s *status.Status } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user