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" "time"
"github.com/alibabacloud-go/debug/debug" "github.com/alibabacloud-go/debug/debug"
"github.com/alibabacloud-go/tea/utils"
util "github.com/alibabacloud-go/tea-utils/v2/service" util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/utils"
"golang.org/x/net/proxy" "golang.org/x/net/proxy"
) )
@@ -202,7 +202,7 @@ func getDaraClient(tag string) *daraClient {
// DoRequest is used send request to server // DoRequest is used send request to server
func DoRequest(request *Request, runtimeObject *RuntimeObject) (response *Response, err error) { func DoRequest(request *Request, runtimeObject *RuntimeObject) (response *Response, err error) {
if(runtimeObject == nil) { if runtimeObject == nil {
runtimeObject = &RuntimeObject{} runtimeObject = &RuntimeObject{}
} }
fieldMap := make(map[string]string) 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 { func ToString(val interface{}) string {
switch v := val.(type) { switch v := val.(type) {
case []byte: case []byte:
+36
View File
@@ -735,6 +735,42 @@ func Test_ToReader(t *testing.T) {
utils.AssertEqual(t, "", string(byt)) 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) { func Test_ToString(t *testing.T) {
str := ToString(10) str := ToString(10)
utils.AssertEqual(t, "10", str) utils.AssertEqual(t, "10", str)
+12 -11
View File
@@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/alibabacloud-go/tea/tea"
"net/http" "net/http"
"reflect" "reflect"
"strconv" "strconv"
@@ -42,32 +43,32 @@ type CastError struct {
} }
func TeaSDKError(err error) *tea.SDKError { func TeaSDKError(err error) *tea.SDKError {
if(err == nil) { if err == nil {
return nil return nil
} }
if te, ok := err.(*SDKError); ok { if te, ok := err.(*SDKError); ok {
return tea.NewSDKError(map[string]interface{}{ return tea.NewSDKError(map[string]interface{}{
"code": StringValue(te.Code), "code": StringValue(te.Code),
"statusCode": IntValue(te.StatusCode), "statusCode": IntValue(te.StatusCode),
"message": StringValue(te.Message), "message": StringValue(te.Message),
"data": te.Data, "data": te.Data,
"description": StringValue(te.Description), "description": StringValue(te.Description),
"accessDeniedDetail": te.AccessDeniedDetail, "accessDeniedDetail": te.AccessDeniedDetail,
}) })
} }
if respErr, ok := err.(ResponseError); ok { if respErr, ok := err.(ResponseError); ok {
return tea.NewSDKError(map[string]interface{}{ return tea.NewSDKError(map[string]interface{}{
"code": StringValue(respErr.GetCode()), "code": StringValue(respErr.GetCode()),
"statusCode": IntValue(respErr.GetStatusCode()), "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{}{ return tea.NewSDKError(map[string]interface{}{
"code": StringValue(baseErr.GetCode()), "code": StringValue(baseErr.GetCode()),
"message": baseErr.Error(), "message": baseErr.Error(),
}) })
} }
+1
View File
@@ -4,6 +4,7 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"strings" "strings"