gitlab.com/evatix-go/core@v1.3.55/coredata/corejson/newResultCreator.go (about) 1 package corejson 2 3 import ( 4 "encoding/json" 5 "errors" 6 7 "gitlab.com/evatix-go/core/constants" 8 "gitlab.com/evatix-go/core/coredata" 9 "gitlab.com/evatix-go/core/errcore" 10 "gitlab.com/evatix-go/core/internal/reflectinternal" 11 ) 12 13 type newResultCreator struct{} 14 15 // UnmarshalUsingBytes 16 // 17 // Aka. alias for DeserializeUsingBytes 18 // 19 // Should be used when Result itself is Serialized 20 // and save to somewhere and then unmarshal or deserialize 21 func (it newResultCreator) UnmarshalUsingBytes( 22 deserializingBytes []byte, 23 ) *Result { 24 return it.DeserializeUsingBytes(deserializingBytes) 25 } 26 27 // DeserializeUsingBytes 28 // 29 // Should be used when Result itself is Serialized 30 // and save to somewhere and then unmarshal or deserialize 31 func (it newResultCreator) DeserializeUsingBytes( 32 deserializingBytes []byte, 33 ) *Result { 34 empty := it.TypeName(resultTypeName) 35 36 err := Deserialize. 37 UsingBytes(deserializingBytes, empty) 38 39 if err == nil { 40 return empty 41 } 42 43 empty.Error = err 44 45 return empty 46 } 47 48 func (it newResultCreator) DeserializeUsingResult( 49 jsonResult *Result, 50 ) *Result { 51 if jsonResult.HasIssuesOrEmpty() { 52 return it.ErrorPtr(jsonResult.Error) 53 } 54 55 empty := it.TypeName(resultTypeName) 56 57 err := Deserialize. 58 UsingBytes( 59 jsonResult.SafeBytes(), 60 empty) 61 62 if err == nil { 63 return empty 64 } 65 66 empty.Error = err 67 68 return empty 69 } 70 71 func (it newResultCreator) UsingBytes( 72 jsonBytes []byte, 73 ) Result { 74 return Result{ 75 Bytes: jsonBytes, 76 } 77 } 78 79 func (it newResultCreator) UsingBytesType( 80 jsonBytes []byte, 81 typeName string, 82 ) Result { 83 return Result{ 84 Bytes: jsonBytes, 85 TypeName: typeName, 86 } 87 } 88 89 func (it newResultCreator) UsingBytesTypePtr( 90 jsonBytes []byte, 91 typeName string, 92 ) *Result { 93 return &Result{ 94 Bytes: jsonBytes, 95 TypeName: typeName, 96 } 97 } 98 99 func (it newResultCreator) UsingTypeBytesPtr( 100 typeName string, 101 jsonBytes []byte, 102 ) *Result { 103 return &Result{ 104 Bytes: jsonBytes, 105 TypeName: typeName, 106 } 107 } 108 109 func (it newResultCreator) UsingBytesPtr( 110 jsonBytes *[]byte, 111 ) *Result { 112 if jsonBytes == nil || *jsonBytes == nil { 113 return &Result{} 114 } 115 116 return &Result{ 117 Bytes: *jsonBytes, 118 } 119 } 120 121 func (it newResultCreator) UsingBytesPtrErrPtr( 122 jsonBytes *[]byte, err error, typeName string, 123 ) *Result { 124 if jsonBytes == nil || *jsonBytes == nil { 125 return &Result{ 126 Error: err, 127 TypeName: typeName, 128 } 129 } 130 131 return &Result{ 132 Bytes: *jsonBytes, 133 Error: err, 134 TypeName: typeName, 135 } 136 } 137 138 func (it newResultCreator) UsingBytesErrPtr( 139 jsonBytes []byte, err error, typeName string, 140 ) *Result { 141 if len(jsonBytes) == 0 { 142 return &Result{ 143 Bytes: []byte{}, 144 Error: err, 145 TypeName: typeName, 146 } 147 } 148 149 return &Result{ 150 Bytes: jsonBytes, 151 Error: err, 152 TypeName: typeName, 153 } 154 } 155 156 func (it newResultCreator) PtrUsingStringPtr( 157 jsonStringPtr *string, 158 typeName string, 159 ) *Result { 160 if jsonStringPtr == nil { 161 return it.PtrUsingBytesPtr( 162 nil, 163 errors.New("json string ptr is nil cannot process further"), 164 typeName) 165 } 166 167 return &Result{ 168 Bytes: []byte(*jsonStringPtr), 169 TypeName: typeName, 170 } 171 } 172 173 func (it newResultCreator) UsingErrorStringPtr( 174 err error, 175 jsonStringPtr *string, 176 typeName string, 177 ) *Result { 178 var errMsg string 179 if err != nil { 180 errMsg = err.Error() 181 } 182 183 if jsonStringPtr == nil { 184 return it.PtrUsingBytesPtr( 185 nil, 186 errors.New("json string ptr is nil cannot process further"+errMsg), 187 typeName) 188 } 189 190 return &Result{ 191 Bytes: []byte(*jsonStringPtr), 192 Error: err, 193 TypeName: typeName, 194 } 195 } 196 197 func (it newResultCreator) Ptr( 198 jsonBytes []byte, 199 err error, 200 typeName string, 201 ) *Result { 202 return &Result{ 203 Bytes: jsonBytes, 204 Error: err, 205 TypeName: typeName, 206 } 207 } 208 209 func (it newResultCreator) UsingJsonBytesTypeError( 210 jsonBytes []byte, 211 err error, 212 typeName string, 213 ) *Result { 214 return &Result{ 215 Bytes: jsonBytes, 216 Error: err, 217 TypeName: typeName, 218 } 219 } 220 221 func (it newResultCreator) UsingJsonBytesError( 222 jsonBytes []byte, 223 err error, 224 ) *Result { 225 return &Result{ 226 Bytes: jsonBytes, 227 Error: err, 228 TypeName: constants.UnknownType, 229 } 230 } 231 232 func (it newResultCreator) UsingTypePlusString( 233 typeName string, 234 jsonString string, 235 ) *Result { 236 return &Result{ 237 Bytes: []byte(jsonString), 238 TypeName: typeName, 239 } 240 } 241 242 func (it newResultCreator) UsingTypePlusStringPtr( 243 typeName string, 244 jsonStringPtr *string, 245 ) *Result { 246 if jsonStringPtr == nil || len(*jsonStringPtr) == 0 { 247 return &Result{ 248 Bytes: []byte{}, 249 } 250 } 251 252 return &Result{ 253 Bytes: []byte(*jsonStringPtr), 254 TypeName: typeName, 255 } 256 } 257 258 func (it newResultCreator) UsingStringWithType( 259 jsonString string, 260 typeName string, 261 ) *Result { 262 return &Result{ 263 Bytes: []byte(jsonString), 264 TypeName: typeName, 265 } 266 } 267 268 func (it newResultCreator) UsingString( 269 jsonString string, 270 ) *Result { 271 return &Result{ 272 Bytes: []byte(jsonString), 273 TypeName: constants.UnknownStringType, 274 } 275 } 276 277 func (it newResultCreator) UsingStringPtr( 278 jsonStringPtr *string, 279 ) *Result { 280 if jsonStringPtr == nil || len(*jsonStringPtr) == 0 { 281 return &Result{ 282 Bytes: []byte{}, 283 } 284 } 285 286 return &Result{ 287 Bytes: []byte(*jsonStringPtr), 288 TypeName: constants.UnknownStringType, 289 } 290 } 291 292 func (it newResultCreator) CreatePtr( 293 jsonBytes []byte, 294 err error, 295 typeName string, 296 ) *Result { 297 return &Result{ 298 Bytes: jsonBytes, 299 Error: err, 300 TypeName: typeName, 301 } 302 } 303 304 func (it newResultCreator) NonPtr( 305 jsonBytes []byte, 306 err error, 307 typeName string, 308 ) Result { 309 return Result{ 310 Bytes: jsonBytes, 311 Error: err, 312 TypeName: typeName, 313 } 314 } 315 316 func (it newResultCreator) Create( 317 jsonBytes []byte, 318 err error, 319 typeName string, 320 ) Result { 321 return Result{ 322 Bytes: jsonBytes, 323 Error: err, 324 TypeName: typeName, 325 } 326 } 327 328 func (it newResultCreator) PtrUsingBytesPtr( 329 jsonBytes *[]byte, 330 err error, 331 typeName string, 332 ) *Result { 333 if err != nil { 334 return &Result{ 335 Bytes: []byte{}, 336 Error: err, 337 TypeName: typeName, 338 } 339 } 340 341 if jsonBytes == nil { 342 return &Result{ 343 Bytes: []byte{}, 344 Error: nil, 345 TypeName: typeName, 346 } 347 } 348 349 return &Result{ 350 Bytes: *jsonBytes, 351 Error: nil, 352 TypeName: typeName, 353 } 354 } 355 356 // CastingAny 357 // 358 // if already in JsonResult then returns it 359 func (it newResultCreator) CastingAny( 360 castingAnyToJsonResultPtr interface{}, 361 ) *Result { 362 return AnyTo.SerializedJsonResult(castingAnyToJsonResultPtr) 363 } 364 365 func (it newResultCreator) Any( 366 anyItem interface{}, 367 ) Result { 368 jsonBytes, err := json.Marshal(anyItem) 369 typeName := reflectinternal.TypeName(anyItem) 370 371 if err != nil { 372 return Result{ 373 Bytes: jsonBytes, 374 Error: errcore.MarshallingFailedType.Error( 375 err.Error(), 376 typeName), 377 TypeName: typeName, 378 } 379 } 380 381 return Result{ 382 Bytes: jsonBytes, 383 Error: err, 384 TypeName: typeName, 385 } 386 } 387 388 func (it newResultCreator) AnyPtr( 389 anyItem interface{}, 390 ) *Result { 391 jsonBytes, err := json.Marshal(anyItem) 392 typeName := reflectinternal.TypeName(anyItem) 393 394 if err != nil { 395 return &Result{ 396 Bytes: jsonBytes, 397 Error: errcore.MarshallingFailedType.Error( 398 err.Error(), 399 typeName), 400 TypeName: typeName, 401 } 402 } 403 404 return &Result{ 405 Bytes: jsonBytes, 406 Error: err, 407 TypeName: typeName, 408 } 409 } 410 411 // UsingBytesError Get created with nil. 412 func (it newResultCreator) UsingBytesError( 413 bytesError *coredata.BytesError, 414 ) Result { 415 if bytesError == nil { 416 return Result{} 417 } 418 419 return Result{ 420 Bytes: bytesError.Bytes, 421 Error: bytesError.Error, 422 } 423 } 424 425 func (it newResultCreator) Error(err error) Result { 426 return Result{ 427 Bytes: nil, 428 Error: err, 429 } 430 } 431 432 func (it newResultCreator) ErrorPtr(err error) *Result { 433 return &Result{ 434 Bytes: nil, 435 Error: err, 436 } 437 } 438 439 func (it newResultCreator) Empty() Result { 440 return Result{} 441 } 442 443 func (it newResultCreator) EmptyPtr() *Result { 444 return &Result{} 445 } 446 447 func (it newResultCreator) TypeName(typeName string) *Result { 448 return &Result{ 449 TypeName: typeName, 450 } 451 } 452 453 func (it newResultCreator) TypeNameBytes(typeName string) *Result { 454 return &Result{ 455 TypeName: typeName, 456 } 457 } 458 459 func (it newResultCreator) Many( 460 anyItems ...interface{}, 461 ) *Result { 462 return it.AnyPtr(anyItems) 463 } 464 465 func (it newResultCreator) Serialize( 466 anyItem interface{}, 467 ) *Result { 468 jsonBytes, err := json.Marshal(anyItem) 469 typeName := reflectinternal.TypeName(anyItem) 470 471 if err != nil { 472 return &Result{ 473 Bytes: jsonBytes, 474 Error: errcore.MarshallingFailedType.Error( 475 err.Error(), 476 typeName), 477 TypeName: typeName, 478 } 479 } 480 481 return &Result{ 482 Bytes: jsonBytes, 483 Error: err, 484 TypeName: typeName, 485 } 486 } 487 488 func (it newResultCreator) Marshal( 489 anyItem interface{}, 490 ) *Result { 491 jsonBytes, err := json.Marshal(anyItem) 492 typeName := reflectinternal.TypeName(anyItem) 493 494 if err != nil { 495 return &Result{ 496 Bytes: jsonBytes, 497 Error: errcore.MarshallingFailedType.Error( 498 err.Error(), 499 typeName), 500 TypeName: typeName, 501 } 502 } 503 504 return &Result{ 505 Bytes: jsonBytes, 506 Error: err, 507 TypeName: typeName, 508 } 509 } 510 511 func (it newResultCreator) UsingSerializer( 512 serializer bytesSerializer, 513 ) *Result { 514 if serializer == nil { 515 return nil 516 } 517 518 allBytes, err := serializer.Serialize() 519 520 return &Result{ 521 Bytes: allBytes, 522 Error: err, 523 TypeName: reflectinternal.TypeName( 524 serializer), 525 } 526 } 527 528 func (it newResultCreator) UsingSerializerFunc( 529 serializerFunc func() ([]byte, error), 530 ) *Result { 531 if serializerFunc == nil { 532 return nil 533 } 534 535 allBytes, err := serializerFunc() 536 537 return &Result{ 538 Bytes: allBytes, 539 Error: err, 540 TypeName: reflectinternal.TypeName(serializerFunc), 541 } 542 } 543 544 func (it newResultCreator) UsingJsoner( 545 jsoner Jsoner, 546 ) *Result { 547 if jsoner == nil { 548 return nil 549 } 550 551 return jsoner.JsonPtr() 552 } 553 554 // AnyToCastingResult 555 // 556 // accepted types (usages anyTo.SerializedJsonResult): 557 // - Result, *Result 558 // - []byte 559 // - string 560 // - jsoner 561 // - bytesSerializer 562 // - anyItem 563 func (it newResultCreator) AnyToCastingResult( 564 anyItem interface{}, 565 ) *Result { 566 return AnyTo.SerializedJsonResult(anyItem) 567 }