github.com/cdoern/storage@v1.12.13/images_ffjson.go (about) 1 // Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT. 2 // source: images.go 3 4 package storage 5 6 import ( 7 "bytes" 8 "encoding/json" 9 "fmt" 10 "github.com/opencontainers/go-digest" 11 fflib "github.com/pquerna/ffjson/fflib/v1" 12 ) 13 14 // MarshalJSON marshal bytes to json - template 15 func (j *Image) MarshalJSON() ([]byte, error) { 16 var buf fflib.Buffer 17 if j == nil { 18 buf.WriteString("null") 19 return buf.Bytes(), nil 20 } 21 err := j.MarshalJSONBuf(&buf) 22 if err != nil { 23 return nil, err 24 } 25 return buf.Bytes(), nil 26 } 27 28 // MarshalJSONBuf marshal buff to json - template 29 func (j *Image) MarshalJSONBuf(buf fflib.EncodingBuffer) error { 30 if j == nil { 31 buf.WriteString("null") 32 return nil 33 } 34 var err error 35 var obj []byte 36 _ = obj 37 _ = err 38 buf.WriteString(`{ "id":`) 39 fflib.WriteJsonString(buf, string(j.ID)) 40 buf.WriteByte(',') 41 if len(j.Digest) != 0 { 42 buf.WriteString(`"digest":`) 43 fflib.WriteJsonString(buf, string(j.Digest)) 44 buf.WriteByte(',') 45 } 46 if len(j.Names) != 0 { 47 buf.WriteString(`"names":`) 48 if j.Names != nil { 49 buf.WriteString(`[`) 50 for i, v := range j.Names { 51 if i != 0 { 52 buf.WriteString(`,`) 53 } 54 fflib.WriteJsonString(buf, string(v)) 55 } 56 buf.WriteString(`]`) 57 } else { 58 buf.WriteString(`null`) 59 } 60 buf.WriteByte(',') 61 } 62 if len(j.TopLayer) != 0 { 63 buf.WriteString(`"layer":`) 64 fflib.WriteJsonString(buf, string(j.TopLayer)) 65 buf.WriteByte(',') 66 } 67 if len(j.MappedTopLayers) != 0 { 68 buf.WriteString(`"mapped-layers":`) 69 if j.MappedTopLayers != nil { 70 buf.WriteString(`[`) 71 for i, v := range j.MappedTopLayers { 72 if i != 0 { 73 buf.WriteString(`,`) 74 } 75 fflib.WriteJsonString(buf, string(v)) 76 } 77 buf.WriteString(`]`) 78 } else { 79 buf.WriteString(`null`) 80 } 81 buf.WriteByte(',') 82 } 83 if len(j.Metadata) != 0 { 84 buf.WriteString(`"metadata":`) 85 fflib.WriteJsonString(buf, string(j.Metadata)) 86 buf.WriteByte(',') 87 } 88 if len(j.BigDataNames) != 0 { 89 buf.WriteString(`"big-data-names":`) 90 if j.BigDataNames != nil { 91 buf.WriteString(`[`) 92 for i, v := range j.BigDataNames { 93 if i != 0 { 94 buf.WriteString(`,`) 95 } 96 fflib.WriteJsonString(buf, string(v)) 97 } 98 buf.WriteString(`]`) 99 } else { 100 buf.WriteString(`null`) 101 } 102 buf.WriteByte(',') 103 } 104 if len(j.BigDataSizes) != 0 { 105 if j.BigDataSizes == nil { 106 buf.WriteString(`"big-data-sizes":null`) 107 } else { 108 buf.WriteString(`"big-data-sizes":{ `) 109 for key, value := range j.BigDataSizes { 110 fflib.WriteJsonString(buf, key) 111 buf.WriteString(`:`) 112 fflib.FormatBits2(buf, uint64(value), 10, value < 0) 113 buf.WriteByte(',') 114 } 115 buf.Rewind(1) 116 buf.WriteByte('}') 117 } 118 buf.WriteByte(',') 119 } 120 if len(j.BigDataDigests) != 0 { 121 if j.BigDataDigests == nil { 122 buf.WriteString(`"big-data-digests":null`) 123 } else { 124 buf.WriteString(`"big-data-digests":{ `) 125 for key, value := range j.BigDataDigests { 126 fflib.WriteJsonString(buf, key) 127 buf.WriteString(`:`) 128 fflib.WriteJsonString(buf, string(value)) 129 buf.WriteByte(',') 130 } 131 buf.Rewind(1) 132 buf.WriteByte('}') 133 } 134 buf.WriteByte(',') 135 } 136 if true { 137 buf.WriteString(`"created":`) 138 139 { 140 141 obj, err = j.Created.MarshalJSON() 142 if err != nil { 143 return err 144 } 145 buf.Write(obj) 146 147 } 148 buf.WriteByte(',') 149 } 150 if len(j.Flags) != 0 { 151 buf.WriteString(`"flags":`) 152 /* Falling back. type=map[string]interface {} kind=map */ 153 err = buf.Encode(j.Flags) 154 if err != nil { 155 return err 156 } 157 buf.WriteByte(',') 158 } 159 buf.Rewind(1) 160 buf.WriteByte('}') 161 return nil 162 } 163 164 const ( 165 ffjtImagebase = iota 166 ffjtImagenosuchkey 167 168 ffjtImageID 169 170 ffjtImageDigest 171 172 ffjtImageNames 173 174 ffjtImageTopLayer 175 176 ffjtImageMappedTopLayers 177 178 ffjtImageMetadata 179 180 ffjtImageBigDataNames 181 182 ffjtImageBigDataSizes 183 184 ffjtImageBigDataDigests 185 186 ffjtImageCreated 187 188 ffjtImageFlags 189 ) 190 191 var ffjKeyImageID = []byte("id") 192 193 var ffjKeyImageDigest = []byte("digest") 194 195 var ffjKeyImageNames = []byte("names") 196 197 var ffjKeyImageTopLayer = []byte("layer") 198 199 var ffjKeyImageMappedTopLayers = []byte("mapped-layers") 200 201 var ffjKeyImageMetadata = []byte("metadata") 202 203 var ffjKeyImageBigDataNames = []byte("big-data-names") 204 205 var ffjKeyImageBigDataSizes = []byte("big-data-sizes") 206 207 var ffjKeyImageBigDataDigests = []byte("big-data-digests") 208 209 var ffjKeyImageCreated = []byte("created") 210 211 var ffjKeyImageFlags = []byte("flags") 212 213 // UnmarshalJSON umarshall json - template of ffjson 214 func (j *Image) UnmarshalJSON(input []byte) error { 215 fs := fflib.NewFFLexer(input) 216 return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) 217 } 218 219 // UnmarshalJSONFFLexer fast json unmarshall - template ffjson 220 func (j *Image) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { 221 var err error 222 currentKey := ffjtImagebase 223 _ = currentKey 224 tok := fflib.FFTok_init 225 wantedTok := fflib.FFTok_init 226 227 mainparse: 228 for { 229 tok = fs.Scan() 230 // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) 231 if tok == fflib.FFTok_error { 232 goto tokerror 233 } 234 235 switch state { 236 237 case fflib.FFParse_map_start: 238 if tok != fflib.FFTok_left_bracket { 239 wantedTok = fflib.FFTok_left_bracket 240 goto wrongtokenerror 241 } 242 state = fflib.FFParse_want_key 243 continue 244 245 case fflib.FFParse_after_value: 246 if tok == fflib.FFTok_comma { 247 state = fflib.FFParse_want_key 248 } else if tok == fflib.FFTok_right_bracket { 249 goto done 250 } else { 251 wantedTok = fflib.FFTok_comma 252 goto wrongtokenerror 253 } 254 255 case fflib.FFParse_want_key: 256 // json {} ended. goto exit. woo. 257 if tok == fflib.FFTok_right_bracket { 258 goto done 259 } 260 if tok != fflib.FFTok_string { 261 wantedTok = fflib.FFTok_string 262 goto wrongtokenerror 263 } 264 265 kn := fs.Output.Bytes() 266 if len(kn) <= 0 { 267 // "" case. hrm. 268 currentKey = ffjtImagenosuchkey 269 state = fflib.FFParse_want_colon 270 goto mainparse 271 } else { 272 switch kn[0] { 273 274 case 'b': 275 276 if bytes.Equal(ffjKeyImageBigDataNames, kn) { 277 currentKey = ffjtImageBigDataNames 278 state = fflib.FFParse_want_colon 279 goto mainparse 280 281 } else if bytes.Equal(ffjKeyImageBigDataSizes, kn) { 282 currentKey = ffjtImageBigDataSizes 283 state = fflib.FFParse_want_colon 284 goto mainparse 285 286 } else if bytes.Equal(ffjKeyImageBigDataDigests, kn) { 287 currentKey = ffjtImageBigDataDigests 288 state = fflib.FFParse_want_colon 289 goto mainparse 290 } 291 292 case 'c': 293 294 if bytes.Equal(ffjKeyImageCreated, kn) { 295 currentKey = ffjtImageCreated 296 state = fflib.FFParse_want_colon 297 goto mainparse 298 } 299 300 case 'd': 301 302 if bytes.Equal(ffjKeyImageDigest, kn) { 303 currentKey = ffjtImageDigest 304 state = fflib.FFParse_want_colon 305 goto mainparse 306 } 307 308 case 'f': 309 310 if bytes.Equal(ffjKeyImageFlags, kn) { 311 currentKey = ffjtImageFlags 312 state = fflib.FFParse_want_colon 313 goto mainparse 314 } 315 316 case 'i': 317 318 if bytes.Equal(ffjKeyImageID, kn) { 319 currentKey = ffjtImageID 320 state = fflib.FFParse_want_colon 321 goto mainparse 322 } 323 324 case 'l': 325 326 if bytes.Equal(ffjKeyImageTopLayer, kn) { 327 currentKey = ffjtImageTopLayer 328 state = fflib.FFParse_want_colon 329 goto mainparse 330 } 331 332 case 'm': 333 334 if bytes.Equal(ffjKeyImageMappedTopLayers, kn) { 335 currentKey = ffjtImageMappedTopLayers 336 state = fflib.FFParse_want_colon 337 goto mainparse 338 339 } else if bytes.Equal(ffjKeyImageMetadata, kn) { 340 currentKey = ffjtImageMetadata 341 state = fflib.FFParse_want_colon 342 goto mainparse 343 } 344 345 case 'n': 346 347 if bytes.Equal(ffjKeyImageNames, kn) { 348 currentKey = ffjtImageNames 349 state = fflib.FFParse_want_colon 350 goto mainparse 351 } 352 353 } 354 355 if fflib.EqualFoldRight(ffjKeyImageFlags, kn) { 356 currentKey = ffjtImageFlags 357 state = fflib.FFParse_want_colon 358 goto mainparse 359 } 360 361 if fflib.SimpleLetterEqualFold(ffjKeyImageCreated, kn) { 362 currentKey = ffjtImageCreated 363 state = fflib.FFParse_want_colon 364 goto mainparse 365 } 366 367 if fflib.EqualFoldRight(ffjKeyImageBigDataDigests, kn) { 368 currentKey = ffjtImageBigDataDigests 369 state = fflib.FFParse_want_colon 370 goto mainparse 371 } 372 373 if fflib.EqualFoldRight(ffjKeyImageBigDataSizes, kn) { 374 currentKey = ffjtImageBigDataSizes 375 state = fflib.FFParse_want_colon 376 goto mainparse 377 } 378 379 if fflib.EqualFoldRight(ffjKeyImageBigDataNames, kn) { 380 currentKey = ffjtImageBigDataNames 381 state = fflib.FFParse_want_colon 382 goto mainparse 383 } 384 385 if fflib.SimpleLetterEqualFold(ffjKeyImageMetadata, kn) { 386 currentKey = ffjtImageMetadata 387 state = fflib.FFParse_want_colon 388 goto mainparse 389 } 390 391 if fflib.EqualFoldRight(ffjKeyImageMappedTopLayers, kn) { 392 currentKey = ffjtImageMappedTopLayers 393 state = fflib.FFParse_want_colon 394 goto mainparse 395 } 396 397 if fflib.SimpleLetterEqualFold(ffjKeyImageTopLayer, kn) { 398 currentKey = ffjtImageTopLayer 399 state = fflib.FFParse_want_colon 400 goto mainparse 401 } 402 403 if fflib.EqualFoldRight(ffjKeyImageNames, kn) { 404 currentKey = ffjtImageNames 405 state = fflib.FFParse_want_colon 406 goto mainparse 407 } 408 409 if fflib.EqualFoldRight(ffjKeyImageDigest, kn) { 410 currentKey = ffjtImageDigest 411 state = fflib.FFParse_want_colon 412 goto mainparse 413 } 414 415 if fflib.SimpleLetterEqualFold(ffjKeyImageID, kn) { 416 currentKey = ffjtImageID 417 state = fflib.FFParse_want_colon 418 goto mainparse 419 } 420 421 currentKey = ffjtImagenosuchkey 422 state = fflib.FFParse_want_colon 423 goto mainparse 424 } 425 426 case fflib.FFParse_want_colon: 427 if tok != fflib.FFTok_colon { 428 wantedTok = fflib.FFTok_colon 429 goto wrongtokenerror 430 } 431 state = fflib.FFParse_want_value 432 continue 433 case fflib.FFParse_want_value: 434 435 if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { 436 switch currentKey { 437 438 case ffjtImageID: 439 goto handle_ID 440 441 case ffjtImageDigest: 442 goto handle_Digest 443 444 case ffjtImageNames: 445 goto handle_Names 446 447 case ffjtImageTopLayer: 448 goto handle_TopLayer 449 450 case ffjtImageMappedTopLayers: 451 goto handle_MappedTopLayers 452 453 case ffjtImageMetadata: 454 goto handle_Metadata 455 456 case ffjtImageBigDataNames: 457 goto handle_BigDataNames 458 459 case ffjtImageBigDataSizes: 460 goto handle_BigDataSizes 461 462 case ffjtImageBigDataDigests: 463 goto handle_BigDataDigests 464 465 case ffjtImageCreated: 466 goto handle_Created 467 468 case ffjtImageFlags: 469 goto handle_Flags 470 471 case ffjtImagenosuchkey: 472 err = fs.SkipField(tok) 473 if err != nil { 474 return fs.WrapErr(err) 475 } 476 state = fflib.FFParse_after_value 477 goto mainparse 478 } 479 } else { 480 goto wantedvalue 481 } 482 } 483 } 484 485 handle_ID: 486 487 /* handler: j.ID type=string kind=string quoted=false*/ 488 489 { 490 491 { 492 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 493 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 494 } 495 } 496 497 if tok == fflib.FFTok_null { 498 499 } else { 500 501 outBuf := fs.Output.Bytes() 502 503 j.ID = string(string(outBuf)) 504 505 } 506 } 507 508 state = fflib.FFParse_after_value 509 goto mainparse 510 511 handle_Digest: 512 513 /* handler: j.Digest type=digest.Digest kind=string quoted=false*/ 514 515 { 516 517 { 518 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 519 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for Digest", tok)) 520 } 521 } 522 523 if tok == fflib.FFTok_null { 524 525 } else { 526 527 outBuf := fs.Output.Bytes() 528 529 j.Digest = digest.Digest(string(outBuf)) 530 531 } 532 } 533 534 state = fflib.FFParse_after_value 535 goto mainparse 536 537 handle_Names: 538 539 /* handler: j.Names type=[]string kind=slice quoted=false*/ 540 541 { 542 543 { 544 if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { 545 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) 546 } 547 } 548 549 if tok == fflib.FFTok_null { 550 j.Names = nil 551 } else { 552 553 j.Names = []string{} 554 555 wantVal := true 556 557 for { 558 559 var tmpJNames string 560 561 tok = fs.Scan() 562 if tok == fflib.FFTok_error { 563 goto tokerror 564 } 565 if tok == fflib.FFTok_right_brace { 566 break 567 } 568 569 if tok == fflib.FFTok_comma { 570 if wantVal == true { 571 // TODO(pquerna): this isn't an ideal error message, this handles 572 // things like [,,,] as an array value. 573 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 574 } 575 continue 576 } else { 577 wantVal = true 578 } 579 580 /* handler: tmpJNames type=string kind=string quoted=false*/ 581 582 { 583 584 { 585 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 586 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 587 } 588 } 589 590 if tok == fflib.FFTok_null { 591 592 } else { 593 594 outBuf := fs.Output.Bytes() 595 596 tmpJNames = string(string(outBuf)) 597 598 } 599 } 600 601 j.Names = append(j.Names, tmpJNames) 602 603 wantVal = false 604 } 605 } 606 } 607 608 state = fflib.FFParse_after_value 609 goto mainparse 610 611 handle_TopLayer: 612 613 /* handler: j.TopLayer type=string kind=string quoted=false*/ 614 615 { 616 617 { 618 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 619 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 620 } 621 } 622 623 if tok == fflib.FFTok_null { 624 625 } else { 626 627 outBuf := fs.Output.Bytes() 628 629 j.TopLayer = string(string(outBuf)) 630 631 } 632 } 633 634 state = fflib.FFParse_after_value 635 goto mainparse 636 637 handle_MappedTopLayers: 638 639 /* handler: j.MappedTopLayers type=[]string kind=slice quoted=false*/ 640 641 { 642 643 { 644 if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { 645 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) 646 } 647 } 648 649 if tok == fflib.FFTok_null { 650 j.MappedTopLayers = nil 651 } else { 652 653 j.MappedTopLayers = []string{} 654 655 wantVal := true 656 657 for { 658 659 var tmpJMappedTopLayers string 660 661 tok = fs.Scan() 662 if tok == fflib.FFTok_error { 663 goto tokerror 664 } 665 if tok == fflib.FFTok_right_brace { 666 break 667 } 668 669 if tok == fflib.FFTok_comma { 670 if wantVal == true { 671 // TODO(pquerna): this isn't an ideal error message, this handles 672 // things like [,,,] as an array value. 673 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 674 } 675 continue 676 } else { 677 wantVal = true 678 } 679 680 /* handler: tmpJMappedTopLayers type=string kind=string quoted=false*/ 681 682 { 683 684 { 685 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 686 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 687 } 688 } 689 690 if tok == fflib.FFTok_null { 691 692 } else { 693 694 outBuf := fs.Output.Bytes() 695 696 tmpJMappedTopLayers = string(string(outBuf)) 697 698 } 699 } 700 701 j.MappedTopLayers = append(j.MappedTopLayers, tmpJMappedTopLayers) 702 703 wantVal = false 704 } 705 } 706 } 707 708 state = fflib.FFParse_after_value 709 goto mainparse 710 711 handle_Metadata: 712 713 /* handler: j.Metadata type=string kind=string quoted=false*/ 714 715 { 716 717 { 718 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 719 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 720 } 721 } 722 723 if tok == fflib.FFTok_null { 724 725 } else { 726 727 outBuf := fs.Output.Bytes() 728 729 j.Metadata = string(string(outBuf)) 730 731 } 732 } 733 734 state = fflib.FFParse_after_value 735 goto mainparse 736 737 handle_BigDataNames: 738 739 /* handler: j.BigDataNames type=[]string kind=slice quoted=false*/ 740 741 { 742 743 { 744 if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { 745 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) 746 } 747 } 748 749 if tok == fflib.FFTok_null { 750 j.BigDataNames = nil 751 } else { 752 753 j.BigDataNames = []string{} 754 755 wantVal := true 756 757 for { 758 759 var tmpJBigDataNames string 760 761 tok = fs.Scan() 762 if tok == fflib.FFTok_error { 763 goto tokerror 764 } 765 if tok == fflib.FFTok_right_brace { 766 break 767 } 768 769 if tok == fflib.FFTok_comma { 770 if wantVal == true { 771 // TODO(pquerna): this isn't an ideal error message, this handles 772 // things like [,,,] as an array value. 773 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 774 } 775 continue 776 } else { 777 wantVal = true 778 } 779 780 /* handler: tmpJBigDataNames type=string kind=string quoted=false*/ 781 782 { 783 784 { 785 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 786 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 787 } 788 } 789 790 if tok == fflib.FFTok_null { 791 792 } else { 793 794 outBuf := fs.Output.Bytes() 795 796 tmpJBigDataNames = string(string(outBuf)) 797 798 } 799 } 800 801 j.BigDataNames = append(j.BigDataNames, tmpJBigDataNames) 802 803 wantVal = false 804 } 805 } 806 } 807 808 state = fflib.FFParse_after_value 809 goto mainparse 810 811 handle_BigDataSizes: 812 813 /* handler: j.BigDataSizes type=map[string]int64 kind=map quoted=false*/ 814 815 { 816 817 { 818 if tok != fflib.FFTok_left_bracket && tok != fflib.FFTok_null { 819 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) 820 } 821 } 822 823 if tok == fflib.FFTok_null { 824 j.BigDataSizes = nil 825 } else { 826 827 j.BigDataSizes = make(map[string]int64, 0) 828 829 wantVal := true 830 831 for { 832 833 var k string 834 835 var tmpJBigDataSizes int64 836 837 tok = fs.Scan() 838 if tok == fflib.FFTok_error { 839 goto tokerror 840 } 841 if tok == fflib.FFTok_right_bracket { 842 break 843 } 844 845 if tok == fflib.FFTok_comma { 846 if wantVal == true { 847 // TODO(pquerna): this isn't an ideal error message, this handles 848 // things like [,,,] as an array value. 849 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 850 } 851 continue 852 } else { 853 wantVal = true 854 } 855 856 /* handler: k type=string kind=string quoted=false*/ 857 858 { 859 860 { 861 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 862 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 863 } 864 } 865 866 if tok == fflib.FFTok_null { 867 868 } else { 869 870 outBuf := fs.Output.Bytes() 871 872 k = string(string(outBuf)) 873 874 } 875 } 876 877 // Expect ':' after key 878 tok = fs.Scan() 879 if tok != fflib.FFTok_colon { 880 return fs.WrapErr(fmt.Errorf("wanted colon token, but got token: %v", tok)) 881 } 882 883 tok = fs.Scan() 884 /* handler: tmpJBigDataSizes type=int64 kind=int64 quoted=false*/ 885 886 { 887 if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { 888 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int64", tok)) 889 } 890 } 891 892 { 893 894 if tok == fflib.FFTok_null { 895 896 } else { 897 898 tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) 899 900 if err != nil { 901 return fs.WrapErr(err) 902 } 903 904 tmpJBigDataSizes = int64(tval) 905 906 } 907 } 908 909 j.BigDataSizes[k] = tmpJBigDataSizes 910 911 wantVal = false 912 } 913 914 } 915 } 916 917 state = fflib.FFParse_after_value 918 goto mainparse 919 920 handle_BigDataDigests: 921 922 /* handler: j.BigDataDigests type=map[string]digest.Digest kind=map quoted=false*/ 923 924 { 925 926 { 927 if tok != fflib.FFTok_left_bracket && tok != fflib.FFTok_null { 928 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) 929 } 930 } 931 932 if tok == fflib.FFTok_null { 933 j.BigDataDigests = nil 934 } else { 935 936 j.BigDataDigests = make(map[string]digest.Digest, 0) 937 938 wantVal := true 939 940 for { 941 942 var k string 943 944 var tmpJBigDataDigests digest.Digest 945 946 tok = fs.Scan() 947 if tok == fflib.FFTok_error { 948 goto tokerror 949 } 950 if tok == fflib.FFTok_right_bracket { 951 break 952 } 953 954 if tok == fflib.FFTok_comma { 955 if wantVal == true { 956 // TODO(pquerna): this isn't an ideal error message, this handles 957 // things like [,,,] as an array value. 958 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 959 } 960 continue 961 } else { 962 wantVal = true 963 } 964 965 /* handler: k type=string kind=string quoted=false*/ 966 967 { 968 969 { 970 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 971 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 972 } 973 } 974 975 if tok == fflib.FFTok_null { 976 977 } else { 978 979 outBuf := fs.Output.Bytes() 980 981 k = string(string(outBuf)) 982 983 } 984 } 985 986 // Expect ':' after key 987 tok = fs.Scan() 988 if tok != fflib.FFTok_colon { 989 return fs.WrapErr(fmt.Errorf("wanted colon token, but got token: %v", tok)) 990 } 991 992 tok = fs.Scan() 993 /* handler: tmpJBigDataDigests type=digest.Digest kind=string quoted=false*/ 994 995 { 996 997 { 998 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 999 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for Digest", tok)) 1000 } 1001 } 1002 1003 if tok == fflib.FFTok_null { 1004 1005 } else { 1006 1007 outBuf := fs.Output.Bytes() 1008 1009 tmpJBigDataDigests = digest.Digest(string(outBuf)) 1010 1011 } 1012 } 1013 1014 j.BigDataDigests[k] = tmpJBigDataDigests 1015 1016 wantVal = false 1017 } 1018 1019 } 1020 } 1021 1022 state = fflib.FFParse_after_value 1023 goto mainparse 1024 1025 handle_Created: 1026 1027 /* handler: j.Created type=time.Time kind=struct quoted=false*/ 1028 1029 { 1030 if tok == fflib.FFTok_null { 1031 1032 } else { 1033 1034 tbuf, err := fs.CaptureField(tok) 1035 if err != nil { 1036 return fs.WrapErr(err) 1037 } 1038 1039 err = j.Created.UnmarshalJSON(tbuf) 1040 if err != nil { 1041 return fs.WrapErr(err) 1042 } 1043 } 1044 state = fflib.FFParse_after_value 1045 } 1046 1047 state = fflib.FFParse_after_value 1048 goto mainparse 1049 1050 handle_Flags: 1051 1052 /* handler: j.Flags type=map[string]interface {} kind=map quoted=false*/ 1053 1054 { 1055 1056 { 1057 if tok != fflib.FFTok_left_bracket && tok != fflib.FFTok_null { 1058 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) 1059 } 1060 } 1061 1062 if tok == fflib.FFTok_null { 1063 j.Flags = nil 1064 } else { 1065 1066 j.Flags = make(map[string]interface{}, 0) 1067 1068 wantVal := true 1069 1070 for { 1071 1072 var k string 1073 1074 var tmpJFlags interface{} 1075 1076 tok = fs.Scan() 1077 if tok == fflib.FFTok_error { 1078 goto tokerror 1079 } 1080 if tok == fflib.FFTok_right_bracket { 1081 break 1082 } 1083 1084 if tok == fflib.FFTok_comma { 1085 if wantVal == true { 1086 // TODO(pquerna): this isn't an ideal error message, this handles 1087 // things like [,,,] as an array value. 1088 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 1089 } 1090 continue 1091 } else { 1092 wantVal = true 1093 } 1094 1095 /* handler: k type=string kind=string quoted=false*/ 1096 1097 { 1098 1099 { 1100 if tok != fflib.FFTok_string && tok != fflib.FFTok_null { 1101 return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) 1102 } 1103 } 1104 1105 if tok == fflib.FFTok_null { 1106 1107 } else { 1108 1109 outBuf := fs.Output.Bytes() 1110 1111 k = string(string(outBuf)) 1112 1113 } 1114 } 1115 1116 // Expect ':' after key 1117 tok = fs.Scan() 1118 if tok != fflib.FFTok_colon { 1119 return fs.WrapErr(fmt.Errorf("wanted colon token, but got token: %v", tok)) 1120 } 1121 1122 tok = fs.Scan() 1123 /* handler: tmpJFlags type=interface {} kind=interface quoted=false*/ 1124 1125 { 1126 /* Falling back. type=interface {} kind=interface */ 1127 tbuf, err := fs.CaptureField(tok) 1128 if err != nil { 1129 return fs.WrapErr(err) 1130 } 1131 1132 err = json.Unmarshal(tbuf, &tmpJFlags) 1133 if err != nil { 1134 return fs.WrapErr(err) 1135 } 1136 } 1137 1138 j.Flags[k] = tmpJFlags 1139 1140 wantVal = false 1141 } 1142 1143 } 1144 } 1145 1146 state = fflib.FFParse_after_value 1147 goto mainparse 1148 1149 wantedvalue: 1150 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 1151 wrongtokenerror: 1152 return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) 1153 tokerror: 1154 if fs.BigError != nil { 1155 return fs.WrapErr(fs.BigError) 1156 } 1157 err = fs.Error.ToError() 1158 if err != nil { 1159 return fs.WrapErr(err) 1160 } 1161 panic("ffjson-generated: unreachable, please report bug.") 1162 done: 1163 1164 return nil 1165 } 1166 1167 // MarshalJSON marshal bytes to json - template 1168 func (j *imageStore) MarshalJSON() ([]byte, error) { 1169 var buf fflib.Buffer 1170 if j == nil { 1171 buf.WriteString("null") 1172 return buf.Bytes(), nil 1173 } 1174 err := j.MarshalJSONBuf(&buf) 1175 if err != nil { 1176 return nil, err 1177 } 1178 return buf.Bytes(), nil 1179 } 1180 1181 // MarshalJSONBuf marshal buff to json - template 1182 func (j *imageStore) MarshalJSONBuf(buf fflib.EncodingBuffer) error { 1183 if j == nil { 1184 buf.WriteString("null") 1185 return nil 1186 } 1187 var err error 1188 var obj []byte 1189 _ = obj 1190 _ = err 1191 buf.WriteString(`{}`) 1192 return nil 1193 } 1194 1195 const ( 1196 ffjtimageStorebase = iota 1197 ffjtimageStorenosuchkey 1198 ) 1199 1200 // UnmarshalJSON umarshall json - template of ffjson 1201 func (j *imageStore) UnmarshalJSON(input []byte) error { 1202 fs := fflib.NewFFLexer(input) 1203 return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) 1204 } 1205 1206 // UnmarshalJSONFFLexer fast json unmarshall - template ffjson 1207 func (j *imageStore) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { 1208 var err error 1209 currentKey := ffjtimageStorebase 1210 _ = currentKey 1211 tok := fflib.FFTok_init 1212 wantedTok := fflib.FFTok_init 1213 1214 mainparse: 1215 for { 1216 tok = fs.Scan() 1217 // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) 1218 if tok == fflib.FFTok_error { 1219 goto tokerror 1220 } 1221 1222 switch state { 1223 1224 case fflib.FFParse_map_start: 1225 if tok != fflib.FFTok_left_bracket { 1226 wantedTok = fflib.FFTok_left_bracket 1227 goto wrongtokenerror 1228 } 1229 state = fflib.FFParse_want_key 1230 continue 1231 1232 case fflib.FFParse_after_value: 1233 if tok == fflib.FFTok_comma { 1234 state = fflib.FFParse_want_key 1235 } else if tok == fflib.FFTok_right_bracket { 1236 goto done 1237 } else { 1238 wantedTok = fflib.FFTok_comma 1239 goto wrongtokenerror 1240 } 1241 1242 case fflib.FFParse_want_key: 1243 // json {} ended. goto exit. woo. 1244 if tok == fflib.FFTok_right_bracket { 1245 goto done 1246 } 1247 if tok != fflib.FFTok_string { 1248 wantedTok = fflib.FFTok_string 1249 goto wrongtokenerror 1250 } 1251 1252 kn := fs.Output.Bytes() 1253 if len(kn) <= 0 { 1254 // "" case. hrm. 1255 currentKey = ffjtimageStorenosuchkey 1256 state = fflib.FFParse_want_colon 1257 goto mainparse 1258 } else { 1259 switch kn[0] { 1260 1261 } 1262 1263 currentKey = ffjtimageStorenosuchkey 1264 state = fflib.FFParse_want_colon 1265 goto mainparse 1266 } 1267 1268 case fflib.FFParse_want_colon: 1269 if tok != fflib.FFTok_colon { 1270 wantedTok = fflib.FFTok_colon 1271 goto wrongtokenerror 1272 } 1273 state = fflib.FFParse_want_value 1274 continue 1275 case fflib.FFParse_want_value: 1276 1277 if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { 1278 switch currentKey { 1279 1280 case ffjtimageStorenosuchkey: 1281 err = fs.SkipField(tok) 1282 if err != nil { 1283 return fs.WrapErr(err) 1284 } 1285 state = fflib.FFParse_after_value 1286 goto mainparse 1287 } 1288 } else { 1289 goto wantedvalue 1290 } 1291 } 1292 } 1293 1294 wantedvalue: 1295 return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) 1296 wrongtokenerror: 1297 return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) 1298 tokerror: 1299 if fs.BigError != nil { 1300 return fs.WrapErr(fs.BigError) 1301 } 1302 err = fs.Error.ToError() 1303 if err != nil { 1304 return fs.WrapErr(err) 1305 } 1306 panic("ffjson-generated: unreachable, please report bug.") 1307 done: 1308 1309 return nil 1310 }