github.com/openflowlabs/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  }