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 }