Compare commits

...

5 Commits

Author SHA1 Message Date
page d879fa53be Merge branch 'master' into compatible-sdk-error 2025-03-10 18:54:06 +08:00
peze ca54bcb809 fix the io writer 2025-03-10 18:41:06 +08:00
peze db0543e442 fix the readSSE 2025-02-25 11:19:43 +08:00
peze 3704038763 compatible with old sdk error 2025-02-17 16:33:57 +08:00
peze abae7f41c3 fix to reader 2025-02-12 20:41:32 +08:00
4 changed files with 77 additions and 13 deletions
+28 -2
View File
@@ -24,8 +24,8 @@ import (
"time"
"github.com/alibabacloud-go/debug/debug"
"github.com/alibabacloud-go/tea/utils"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/utils"
"golang.org/x/net/proxy"
)
@@ -202,7 +202,7 @@ func getDaraClient(tag string) *daraClient {
// DoRequest is used send request to server
func DoRequest(request *Request, runtimeObject *RuntimeObject) (response *Response, err error) {
if(runtimeObject == nil) {
if runtimeObject == nil {
runtimeObject = &RuntimeObject{}
}
fieldMap := make(map[string]string)
@@ -429,6 +429,32 @@ func ToReader(obj interface{}) io.Reader {
}
}
func ToWriter(obj interface{}) io.Writer {
switch obj.(type) {
case string:
var buf bytes.Buffer
buf.WriteString(obj.(string))
return &buf
case *string:
var buf bytes.Buffer
tmp := obj.(*string)
buf.WriteString(*tmp)
return &buf
case []byte:
var buf bytes.Buffer
buf.Write(obj.([]byte))
return &buf
case io.Writer:
return obj.(io.Writer)
case *bytes.Buffer:
return obj.(*bytes.Buffer)
case *os.File:
return obj.(*os.File)
default:
panic("Invalid Writer. Please provide a valid Writer.")
}
}
func ToString(val interface{}) string {
switch v := val.(type) {
case []byte:
+36
View File
@@ -735,6 +735,42 @@ func Test_ToReader(t *testing.T) {
utils.AssertEqual(t, "", string(byt))
}
func Test_ToWriter(t *testing.T) {
str := "abc"
writer := ToWriter(str).(*bytes.Buffer)
utils.AssertEqual(t, "abc", writer.String())
strPtr := new(string)
*strPtr = "def"
writer = ToWriter(strPtr).(*bytes.Buffer)
utils.AssertEqual(t, "def", writer.String())
bytesData := []byte("ghi")
writer = ToWriter(bytesData).(*bytes.Buffer)
utils.AssertEqual(t, "ghi", writer.String())
buffer := new(bytes.Buffer)
writer = ToWriter(buffer).(*bytes.Buffer)
utils.AssertEqual(t, buffer, writer)
fileWriter := ToWriter(os.Stdout)
utils.AssertEqual(t, os.Stdout, fileWriter)
var buf bytes.Buffer
writer2 := ToWriter(&buf)
writer2.Write([]byte("test"))
utils.AssertEqual(t, "test", buf.String())
// Test a non-writer to trigger panic
defer func() {
if r := recover(); r != nil {
utils.AssertEqual(t, "Invalid Writer. Please provide a valid Writer.", r)
}
}()
num := 10
ToWriter(num) // This should cause a panic
}
func Test_ToString(t *testing.T) {
str := ToString(10)
utils.AssertEqual(t, "10", str)
+12 -11
View File
@@ -4,6 +4,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"github.com/alibabacloud-go/tea/tea"
"net/http"
"reflect"
"strconv"
@@ -42,32 +43,32 @@ type CastError struct {
}
func TeaSDKError(err error) *tea.SDKError {
if(err == nil) {
if err == nil {
return nil
}
if te, ok := err.(*SDKError); ok {
return tea.NewSDKError(map[string]interface{}{
"code": StringValue(te.Code),
"statusCode": IntValue(te.StatusCode),
"message": StringValue(te.Message),
"data": te.Data,
"description": StringValue(te.Description),
"code": StringValue(te.Code),
"statusCode": IntValue(te.StatusCode),
"message": StringValue(te.Message),
"data": te.Data,
"description": StringValue(te.Description),
"accessDeniedDetail": te.AccessDeniedDetail,
})
}
if respErr, ok := err.(ResponseError); ok {
if respErr, ok := err.(ResponseError); ok {
return tea.NewSDKError(map[string]interface{}{
"code": StringValue(respErr.GetCode()),
"code": StringValue(respErr.GetCode()),
"statusCode": IntValue(respErr.GetStatusCode()),
"message": respErr.Error(),
"message": respErr.Error(),
})
}
if baseErr, ok := err.(BaseError); ok {
if baseErr, ok := err.(BaseError); ok {
return tea.NewSDKError(map[string]interface{}{
"code": StringValue(baseErr.GetCode()),
"code": StringValue(baseErr.GetCode()),
"message": baseErr.Error(),
})
}
+1
View File
@@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"strings"