github.com/qiniu/go-sdk/v7@v7.27.0/internal/api-generator/types.go (about)

     1  package main
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	"github.com/dave/jennifer/jen"
     9  )
    10  
    11  type (
    12  	MethodName            string
    13  	ServiceName           string
    14  	StringLikeType        string
    15  	MultipartFormDataType string
    16  	OptionalType          string
    17  	Authorization         string
    18  	Idempotent            string
    19  	EncodeType            string
    20  	ServiceBucketType     string
    21  	ServiceObjectType     string
    22  )
    23  
    24  const (
    25  	MethodNameGET    MethodName = http.MethodGet
    26  	MethodNamePOST   MethodName = http.MethodPost
    27  	MethodNamePUT    MethodName = http.MethodPut
    28  	MethodNamePATCH  MethodName = http.MethodPatch
    29  	MethodNameDELETE MethodName = http.MethodDelete
    30  
    31  	ServiceNameUp     ServiceName = "up"
    32  	ServiceNameIo     ServiceName = "io"
    33  	ServiceNameRs     ServiceName = "rs"
    34  	ServiceNameRsf    ServiceName = "rsf"
    35  	ServiceNameApi    ServiceName = "api"
    36  	ServiceNameBucket ServiceName = "uc"
    37  
    38  	StringLikeTypeString  StringLikeType = "string"
    39  	StringLikeTypeInteger StringLikeType = "integer"
    40  	StringLikeTypeFloat   StringLikeType = "float"
    41  	StringLikeTypeBoolean StringLikeType = "boolean"
    42  
    43  	MultipartFormDataTypeString      MultipartFormDataType = "string"
    44  	MultipartFormDataTypeInteger     MultipartFormDataType = "integer"
    45  	MultipartFormDataTypeUploadToken MultipartFormDataType = "upload_token"
    46  	MultipartFormDataTypeBinaryData  MultipartFormDataType = "binary_data"
    47  
    48  	OptionalTypeRequired  OptionalType = ""
    49  	OptionalTypeOmitEmpty OptionalType = "omitempty"
    50  	OptionalTypeKeepEmpty OptionalType = "keepempty"
    51  	OptionalTypeNullable  OptionalType = "nullable"
    52  
    53  	AuthorizationNone    Authorization = ""
    54  	AuthorizationQbox    Authorization = "Qbox"
    55  	AuthorizationQiniu   Authorization = "Qiniu"
    56  	AuthorizationUpToken Authorization = "UploadToken"
    57  
    58  	IdempotentAlways  Idempotent = "always"
    59  	IdempotentDefault Idempotent = "default"
    60  	IdempotentNever   Idempotent = "never"
    61  
    62  	EncodeTypeNone                EncodeType = "none"
    63  	EncodeTypeUrlsafeBase64       EncodeType = "url_safe_base64"
    64  	EncodeTypeUrlsafeBase64OrNone EncodeType = "url_safe_base64_or_none"
    65  
    66  	ServiceBucketTypeNone        = ""
    67  	ServiceBucketTypePlainText   = "plain_text"
    68  	ServiceBucketTypeEntry       = "entry"
    69  	ServiceBucketTypeUploadToken = "upload_token"
    70  
    71  	ServiceObjectTypeNone      = ""
    72  	ServiceObjectTypePlainText = "plain_text"
    73  	ServiceObjectTypeEntry     = "entry"
    74  )
    75  
    76  func (s MethodName) ToString() (string, error) {
    77  	switch s {
    78  	case MethodNameGET, MethodNamePOST, MethodNamePUT, MethodNameDELETE:
    79  		return string(s), nil
    80  	case "get":
    81  		return string(MethodNameGET), nil
    82  	case "post":
    83  		return string(MethodNamePOST), nil
    84  	case "put":
    85  		return string(MethodNamePUT), nil
    86  	case "patch":
    87  		return string(MethodNamePATCH), nil
    88  	case "delete":
    89  		return string(MethodNameDELETE), nil
    90  	default:
    91  		return "", errors.New("unknown method")
    92  	}
    93  }
    94  
    95  func (s ServiceName) ToServiceName() (*jen.Statement, error) {
    96  	switch s {
    97  	case ServiceNameUp:
    98  		return jen.Qual(PackageNameRegion, "ServiceUp"), nil
    99  	case ServiceNameIo:
   100  		return jen.Qual(PackageNameRegion, "ServiceIo"), nil
   101  	case ServiceNameRs:
   102  		return jen.Qual(PackageNameRegion, "ServiceRs"), nil
   103  	case ServiceNameRsf:
   104  		return jen.Qual(PackageNameRegion, "ServiceRsf"), nil
   105  	case ServiceNameApi:
   106  		return jen.Qual(PackageNameRegion, "ServiceApi"), nil
   107  	case ServiceNameBucket:
   108  		return jen.Qual(PackageNameRegion, "ServiceBucket"), nil
   109  	default:
   110  		return nil, errors.New("unknown type")
   111  	}
   112  }
   113  
   114  func (t *StringLikeType) ToStringLikeType() StringLikeType {
   115  	if t == nil {
   116  		return StringLikeTypeString
   117  	}
   118  	switch *t {
   119  	case StringLikeTypeString, StringLikeTypeInteger, StringLikeTypeFloat, StringLikeTypeBoolean:
   120  		return *t
   121  	case "":
   122  		return StringLikeTypeString
   123  	default:
   124  		panic(fmt.Sprintf("unknown StringLikeType: %s", *t))
   125  	}
   126  }
   127  
   128  func (t *StringLikeType) AddTypeToStatement(statement *jen.Statement, nilable bool) (*jen.Statement, error) {
   129  	statement = statement.Clone()
   130  	if nilable {
   131  		statement = statement.Op("*")
   132  	}
   133  	switch t.ToStringLikeType() {
   134  	case StringLikeTypeString:
   135  		return statement.String(), nil
   136  	case StringLikeTypeInteger:
   137  		return statement.Int64(), nil
   138  	case StringLikeTypeFloat:
   139  		return statement.Float64(), nil
   140  	case StringLikeTypeBoolean:
   141  		return statement.Bool(), nil
   142  	default:
   143  		return nil, errors.New("unknown type")
   144  	}
   145  }
   146  
   147  func (t *StringLikeType) GenerateConvertCodeToString(id *jen.Statement) (*jen.Statement, error) {
   148  	switch t.ToStringLikeType() {
   149  	case StringLikeTypeString:
   150  		return id.Clone(), nil
   151  	case StringLikeTypeInteger:
   152  		return jen.Qual("strconv", "FormatInt").Call(id.Clone(), jen.Lit(10)), nil
   153  	case StringLikeTypeFloat:
   154  		return jen.Qual("strconv", "FormatFloat").Call(id.Clone(), jen.LitByte('g'), jen.Lit(-1), jen.Lit(64)), nil
   155  	case StringLikeTypeBoolean:
   156  		return jen.Qual("strconv", "FormatBool").Call(id.Clone()), nil
   157  	default:
   158  		return nil, errors.New("unknown type")
   159  	}
   160  }
   161  
   162  func (t *StringLikeType) ZeroValue() (interface{}, error) {
   163  	switch t.ToStringLikeType() {
   164  	case StringLikeTypeString:
   165  		return "", nil
   166  	case StringLikeTypeInteger:
   167  		return 0, nil
   168  	case StringLikeTypeFloat:
   169  		return 0.0, nil
   170  	case StringLikeTypeBoolean:
   171  		return false, nil
   172  	default:
   173  		return nil, errors.New("unknown type")
   174  	}
   175  }
   176  
   177  func (t *MultipartFormDataType) ToMultipartFormDataType() MultipartFormDataType {
   178  	if t == nil {
   179  		return MultipartFormDataTypeString
   180  	}
   181  	switch *t {
   182  	case MultipartFormDataTypeString, MultipartFormDataTypeInteger, MultipartFormDataTypeUploadToken, MultipartFormDataTypeBinaryData:
   183  		return *t
   184  	case "":
   185  		return MultipartFormDataTypeString
   186  	default:
   187  		panic(fmt.Sprintf("unknown StringLikeType: %s", *t))
   188  	}
   189  }
   190  
   191  func (t *MultipartFormDataType) ZeroValue() (interface{}, error) {
   192  	switch t.ToMultipartFormDataType() {
   193  	case MultipartFormDataTypeString:
   194  		return "", nil
   195  	case MultipartFormDataTypeInteger:
   196  		return 0, nil
   197  	case MultipartFormDataTypeUploadToken:
   198  		return nil, nil
   199  	case MultipartFormDataTypeBinaryData:
   200  		return nil, nil
   201  	default:
   202  		return nil, errors.New("unknown type")
   203  	}
   204  }
   205  
   206  func (t *MultipartFormDataType) AddTypeToStatement(statement *jen.Statement, nilable bool) (*jen.Statement, error) {
   207  	statement = statement.Clone()
   208  	switch t.ToMultipartFormDataType() {
   209  	case MultipartFormDataTypeString:
   210  		if nilable {
   211  			statement = statement.Op("*")
   212  		}
   213  		return statement.String(), nil
   214  	case MultipartFormDataTypeInteger:
   215  		if nilable {
   216  			statement = statement.Op("*")
   217  		}
   218  		return statement.Int64(), nil
   219  	case MultipartFormDataTypeUploadToken:
   220  		return statement.Qual(PackageNameUpToken, "Provider"), nil
   221  	case MultipartFormDataTypeBinaryData:
   222  		if nilable {
   223  			statement = statement.Op("*")
   224  		}
   225  		return statement.Qual(PackageNameHTTPClient, "MultipartFormBinaryData"), nil
   226  	default:
   227  		return nil, errors.New("unknown type")
   228  	}
   229  }
   230  
   231  func (t *OptionalType) ToOptionalType() OptionalType {
   232  	if t == nil {
   233  		return OptionalTypeRequired
   234  	}
   235  	switch *t {
   236  	case OptionalTypeRequired, OptionalTypeOmitEmpty, OptionalTypeKeepEmpty, OptionalTypeNullable:
   237  		return *t
   238  	default:
   239  		panic(fmt.Sprintf("unknown OptionalType: %s", *t))
   240  	}
   241  }
   242  
   243  func (t *Authorization) ToAuthorization() Authorization {
   244  	if t == nil {
   245  		return AuthorizationNone
   246  	}
   247  	switch *t {
   248  	case AuthorizationNone, AuthorizationQbox, AuthorizationQiniu, AuthorizationUpToken:
   249  		return *t
   250  	case "qbox":
   251  		return AuthorizationQbox
   252  	case "qiniu":
   253  		return AuthorizationQiniu
   254  	case "upload_token":
   255  		return AuthorizationUpToken
   256  	default:
   257  		panic(fmt.Sprintf("unknown Authorization: %s", *t))
   258  	}
   259  }
   260  
   261  func (t *Idempotent) ToIdempotent() Idempotent {
   262  	if t == nil {
   263  		return IdempotentDefault
   264  	}
   265  	switch *t {
   266  	case IdempotentAlways, IdempotentDefault, IdempotentNever:
   267  		return *t
   268  	case "":
   269  		return IdempotentDefault
   270  	default:
   271  		panic(fmt.Sprintf("unknown Idempotent: %s", *t))
   272  	}
   273  }
   274  
   275  func (t *EncodeType) ToEncodeType() EncodeType {
   276  	if t == nil {
   277  		return EncodeTypeNone
   278  	}
   279  	switch *t {
   280  	case EncodeTypeNone, EncodeTypeUrlsafeBase64, EncodeTypeUrlsafeBase64OrNone:
   281  		return *t
   282  	case "":
   283  		return EncodeTypeNone
   284  	default:
   285  		panic(fmt.Sprintf("unknown EncodeType: %s", *t))
   286  	}
   287  }
   288  
   289  func (t *ServiceBucketType) ToServiceBucketType() ServiceBucketType {
   290  	if t == nil {
   291  		return ServiceBucketTypeNone
   292  	}
   293  	switch *t {
   294  	case ServiceBucketTypeNone, ServiceBucketTypePlainText, ServiceBucketTypeEntry, ServiceBucketTypeUploadToken:
   295  		return *t
   296  	default:
   297  		panic(fmt.Sprintf("unknown ServiceBucketType: %s", *t))
   298  	}
   299  }
   300  
   301  func (t *ServiceObjectType) ToServiceObjectType() ServiceObjectType {
   302  	if t == nil {
   303  		return ServiceObjectTypeNone
   304  	}
   305  	switch *t {
   306  	case ServiceObjectTypeNone, ServiceObjectTypePlainText, ServiceObjectTypeEntry:
   307  		return *t
   308  	default:
   309  		panic(fmt.Sprintf("unknown ServiceObjectType: %s", *t))
   310  	}
   311  }
   312  
   313  func (authorization Authorization) addGetBucketNameFunc(group *jen.Group, structName string) (bool, error) {
   314  	if authorization.ToAuthorization() == AuthorizationUpToken {
   315  		group.Add(jen.Func().
   316  			Params(jen.Id("request").Op("*").Id(structName)).
   317  			Id("getBucketName").
   318  			Params(jen.Id("ctx").Qual("context", "Context")).
   319  			Params(jen.String(), jen.Error()).
   320  			BlockFunc(func(group *jen.Group) {
   321  				group.Add(jen.If(jen.Id("request").Dot("UpToken").Op("!=").Nil()).BlockFunc(func(group *jen.Group) {
   322  					group.If(
   323  						jen.List(jen.Id("putPolicy"), jen.Err()).Op(":=").Id("request").Dot("UpToken").Dot("GetPutPolicy").Call(jen.Id("ctx")),
   324  						jen.Err().Op("!=").Nil(),
   325  					).BlockFunc(func(group *jen.Group) {
   326  						group.Return(jen.Lit(""), jen.Err())
   327  					}).Else().BlockFunc(func(group *jen.Group) {
   328  						group.Return(jen.Id("putPolicy").Dot("GetBucketName").Call())
   329  					})
   330  				}))
   331  				group.Add(jen.Return(jen.Lit(""), jen.Nil()))
   332  			}))
   333  		return true, nil
   334  	}
   335  	return false, nil
   336  }
   337  
   338  func (authorization Authorization) addGetObjectNameFunc(group *jen.Group, structName string) (bool, error) {
   339  	return false, nil
   340  }