// Code generated by ffjson . DO NOT EDIT. // source: types.go package oembed import ( "bytes" "errors" "fmt" fflib "github.com/pquerna/ffjson/fflib/v1" ) // MarshalJSON marshal bytes to json - template func (j *Endpoint) MarshalJSON() ([]byte, error) { var buf fflib.Buffer if j == nil { buf.WriteString("null") return buf.Bytes(), nil } err := j.MarshalJSONBuf(&buf) if err != nil { return nil, err } return buf.Bytes(), nil } // MarshalJSONBuf marshal buff to json - template func (j *Endpoint) MarshalJSONBuf(buf fflib.EncodingBuffer) error { if j == nil { buf.WriteString("null") return nil } var err error var obj []byte _ = obj _ = err buf.WriteString(`{ `) if len(j.Schemes) != 0 { buf.WriteString(`"schemes":`) if j.Schemes != nil { buf.WriteString(`[`) for i, v := range j.Schemes { if i != 0 { buf.WriteString(`,`) } fflib.WriteJsonString(buf, string(v)) } buf.WriteString(`]`) } else { buf.WriteString(`null`) } buf.WriteByte(',') } buf.WriteString(`"url":`) fflib.WriteJsonString(buf, string(j.URL)) buf.WriteByte(',') if j.Discovery != false { if j.Discovery { buf.WriteString(`"discovery":true`) } else { buf.WriteString(`"discovery":false`) } buf.WriteByte(',') } if len(j.Formats) != 0 { buf.WriteString(`"formats":`) if j.Formats != nil { buf.WriteString(`[`) for i, v := range j.Formats { if i != 0 { buf.WriteString(`,`) } fflib.WriteJsonString(buf, string(v)) } buf.WriteString(`]`) } else { buf.WriteString(`null`) } buf.WriteByte(',') } buf.Rewind(1) buf.WriteByte('}') return nil } const ( ffjtEndpointbase = iota ffjtEndpointnosuchkey ffjtEndpointSchemes ffjtEndpointURL ffjtEndpointDiscovery ffjtEndpointFormats ) var ffjKeyEndpointSchemes = []byte("schemes") var ffjKeyEndpointURL = []byte("url") var ffjKeyEndpointDiscovery = []byte("discovery") var ffjKeyEndpointFormats = []byte("formats") // UnmarshalJSON umarshall json - template of ffjson func (j *Endpoint) UnmarshalJSON(input []byte) error { fs := fflib.NewFFLexer(input) return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } // UnmarshalJSONFFLexer fast json unmarshall - template ffjson func (j *Endpoint) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { var err error currentKey := ffjtEndpointbase _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init mainparse: for { tok = fs.Scan() // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) if tok == fflib.FFTok_error { goto tokerror } switch state { case fflib.FFParse_map_start: if tok != fflib.FFTok_left_bracket { wantedTok = fflib.FFTok_left_bracket goto wrongtokenerror } state = fflib.FFParse_want_key continue case fflib.FFParse_after_value: if tok == fflib.FFTok_comma { state = fflib.FFParse_want_key } else if tok == fflib.FFTok_right_bracket { goto done } else { wantedTok = fflib.FFTok_comma goto wrongtokenerror } case fflib.FFParse_want_key: // json {} ended. goto exit. woo. if tok == fflib.FFTok_right_bracket { goto done } if tok != fflib.FFTok_string { wantedTok = fflib.FFTok_string goto wrongtokenerror } kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. currentKey = ffjtEndpointnosuchkey state = fflib.FFParse_want_colon goto mainparse } else { switch kn[0] { case 'd': if bytes.Equal(ffjKeyEndpointDiscovery, kn) { currentKey = ffjtEndpointDiscovery state = fflib.FFParse_want_colon goto mainparse } case 'f': if bytes.Equal(ffjKeyEndpointFormats, kn) { currentKey = ffjtEndpointFormats state = fflib.FFParse_want_colon goto mainparse } case 's': if bytes.Equal(ffjKeyEndpointSchemes, kn) { currentKey = ffjtEndpointSchemes state = fflib.FFParse_want_colon goto mainparse } case 'u': if bytes.Equal(ffjKeyEndpointURL, kn) { currentKey = ffjtEndpointURL state = fflib.FFParse_want_colon goto mainparse } } if fflib.EqualFoldRight(ffjKeyEndpointFormats, kn) { currentKey = ffjtEndpointFormats state = fflib.FFParse_want_colon goto mainparse } if fflib.EqualFoldRight(ffjKeyEndpointDiscovery, kn) { currentKey = ffjtEndpointDiscovery state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyEndpointURL, kn) { currentKey = ffjtEndpointURL state = fflib.FFParse_want_colon goto mainparse } if fflib.EqualFoldRight(ffjKeyEndpointSchemes, kn) { currentKey = ffjtEndpointSchemes state = fflib.FFParse_want_colon goto mainparse } currentKey = ffjtEndpointnosuchkey state = fflib.FFParse_want_colon goto mainparse } case fflib.FFParse_want_colon: if tok != fflib.FFTok_colon { wantedTok = fflib.FFTok_colon goto wrongtokenerror } state = fflib.FFParse_want_value continue case fflib.FFParse_want_value: 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 { switch currentKey { case ffjtEndpointSchemes: goto handle_Schemes case ffjtEndpointURL: goto handle_URL case ffjtEndpointDiscovery: goto handle_Discovery case ffjtEndpointFormats: goto handle_Formats case ffjtEndpointnosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) } state = fflib.FFParse_after_value goto mainparse } } else { goto wantedvalue } } } handle_Schemes: /* handler: j.Schemes type=[]string kind=slice quoted=false*/ { { if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) } } if tok == fflib.FFTok_null { j.Schemes = nil } else { j.Schemes = []string{} wantVal := true for { var tmpJSchemes string tok = fs.Scan() if tok == fflib.FFTok_error { goto tokerror } if tok == fflib.FFTok_right_brace { break } if tok == fflib.FFTok_comma { if wantVal == true { // TODO(pquerna): this isn't an ideal error message, this handles // things like [,,,] as an array value. return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) } continue } else { wantVal = true } /* handler: tmpJSchemes type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() tmpJSchemes = string(string(outBuf)) } } j.Schemes = append(j.Schemes, tmpJSchemes) wantVal = false } } } state = fflib.FFParse_after_value goto mainparse handle_URL: /* handler: j.URL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.URL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Discovery: /* handler: j.Discovery type=bool kind=bool quoted=false*/ { if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) } } { if tok == fflib.FFTok_null { } else { tmpb := fs.Output.Bytes() if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { j.Discovery = true } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { j.Discovery = false } else { err = errors.New("unexpected bytes for true/false value") return fs.WrapErr(err) } } } state = fflib.FFParse_after_value goto mainparse handle_Formats: /* handler: j.Formats type=[]string kind=slice quoted=false*/ { { if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) } } if tok == fflib.FFTok_null { j.Formats = nil } else { j.Formats = []string{} wantVal := true for { var tmpJFormats string tok = fs.Scan() if tok == fflib.FFTok_error { goto tokerror } if tok == fflib.FFTok_right_brace { break } if tok == fflib.FFTok_comma { if wantVal == true { // TODO(pquerna): this isn't an ideal error message, this handles // things like [,,,] as an array value. return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) } continue } else { wantVal = true } /* handler: tmpJFormats type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() tmpJFormats = string(string(outBuf)) } } j.Formats = append(j.Formats, tmpJFormats) wantVal = false } } } state = fflib.FFParse_after_value goto mainparse wantedvalue: return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) wrongtokenerror: return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) tokerror: if fs.BigError != nil { return fs.WrapErr(fs.BigError) } err = fs.Error.ToError() if err != nil { return fs.WrapErr(err) } panic("ffjson-generated: unreachable, please report bug.") done: return nil } // MarshalJSON marshal bytes to json - template func (j *Photo) MarshalJSON() ([]byte, error) { var buf fflib.Buffer if j == nil { buf.WriteString("null") return buf.Bytes(), nil } err := j.MarshalJSONBuf(&buf) if err != nil { return nil, err } return buf.Bytes(), nil } // MarshalJSONBuf marshal buff to json - template func (j *Photo) MarshalJSONBuf(buf fflib.EncodingBuffer) error { if j == nil { buf.WriteString("null") return nil } var err error var obj []byte _ = obj _ = err buf.WriteString(`{"url":`) fflib.WriteJsonString(buf, string(j.URL)) buf.WriteString(`,"width":`) fflib.FormatBits2(buf, uint64(j.Width), 10, j.Width < 0) buf.WriteString(`,"height":`) fflib.FormatBits2(buf, uint64(j.Height), 10, j.Height < 0) buf.WriteByte('}') return nil } const ( ffjtPhotobase = iota ffjtPhotonosuchkey ffjtPhotoURL ffjtPhotoWidth ffjtPhotoHeight ) var ffjKeyPhotoURL = []byte("url") var ffjKeyPhotoWidth = []byte("width") var ffjKeyPhotoHeight = []byte("height") // UnmarshalJSON umarshall json - template of ffjson func (j *Photo) UnmarshalJSON(input []byte) error { fs := fflib.NewFFLexer(input) return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } // UnmarshalJSONFFLexer fast json unmarshall - template ffjson func (j *Photo) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { var err error currentKey := ffjtPhotobase _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init mainparse: for { tok = fs.Scan() // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) if tok == fflib.FFTok_error { goto tokerror } switch state { case fflib.FFParse_map_start: if tok != fflib.FFTok_left_bracket { wantedTok = fflib.FFTok_left_bracket goto wrongtokenerror } state = fflib.FFParse_want_key continue case fflib.FFParse_after_value: if tok == fflib.FFTok_comma { state = fflib.FFParse_want_key } else if tok == fflib.FFTok_right_bracket { goto done } else { wantedTok = fflib.FFTok_comma goto wrongtokenerror } case fflib.FFParse_want_key: // json {} ended. goto exit. woo. if tok == fflib.FFTok_right_bracket { goto done } if tok != fflib.FFTok_string { wantedTok = fflib.FFTok_string goto wrongtokenerror } kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. currentKey = ffjtPhotonosuchkey state = fflib.FFParse_want_colon goto mainparse } else { switch kn[0] { case 'h': if bytes.Equal(ffjKeyPhotoHeight, kn) { currentKey = ffjtPhotoHeight state = fflib.FFParse_want_colon goto mainparse } case 'u': if bytes.Equal(ffjKeyPhotoURL, kn) { currentKey = ffjtPhotoURL state = fflib.FFParse_want_colon goto mainparse } case 'w': if bytes.Equal(ffjKeyPhotoWidth, kn) { currentKey = ffjtPhotoWidth state = fflib.FFParse_want_colon goto mainparse } } if fflib.SimpleLetterEqualFold(ffjKeyPhotoHeight, kn) { currentKey = ffjtPhotoHeight state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyPhotoWidth, kn) { currentKey = ffjtPhotoWidth state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyPhotoURL, kn) { currentKey = ffjtPhotoURL state = fflib.FFParse_want_colon goto mainparse } currentKey = ffjtPhotonosuchkey state = fflib.FFParse_want_colon goto mainparse } case fflib.FFParse_want_colon: if tok != fflib.FFTok_colon { wantedTok = fflib.FFTok_colon goto wrongtokenerror } state = fflib.FFParse_want_value continue case fflib.FFParse_want_value: 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 { switch currentKey { case ffjtPhotoURL: goto handle_URL case ffjtPhotoWidth: goto handle_Width case ffjtPhotoHeight: goto handle_Height case ffjtPhotonosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) } state = fflib.FFParse_after_value goto mainparse } } else { goto wantedvalue } } } handle_URL: /* handler: j.URL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.URL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Width: /* handler: j.Width type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.Width = int(tval) } } state = fflib.FFParse_after_value goto mainparse handle_Height: /* handler: j.Height type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.Height = int(tval) } } state = fflib.FFParse_after_value goto mainparse wantedvalue: return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) wrongtokenerror: return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) tokerror: if fs.BigError != nil { return fs.WrapErr(fs.BigError) } err = fs.Error.ToError() if err != nil { return fs.WrapErr(err) } panic("ffjson-generated: unreachable, please report bug.") done: return nil } // MarshalJSON marshal bytes to json - template func (j *Provider) MarshalJSON() ([]byte, error) { var buf fflib.Buffer if j == nil { buf.WriteString("null") return buf.Bytes(), nil } err := j.MarshalJSONBuf(&buf) if err != nil { return nil, err } return buf.Bytes(), nil } // MarshalJSONBuf marshal buff to json - template func (j *Provider) MarshalJSONBuf(buf fflib.EncodingBuffer) error { if j == nil { buf.WriteString("null") return nil } var err error var obj []byte _ = obj _ = err buf.WriteString(`{"provider_name":`) fflib.WriteJsonString(buf, string(j.Name)) buf.WriteString(`,"provider_url":`) fflib.WriteJsonString(buf, string(j.URL)) buf.WriteString(`,"endpoints":`) if j.Endpoints != nil { buf.WriteString(`[`) for i, v := range j.Endpoints { if i != 0 { buf.WriteString(`,`) } { err = v.MarshalJSONBuf(buf) if err != nil { return err } } } buf.WriteString(`]`) } else { buf.WriteString(`null`) } buf.WriteByte('}') return nil } const ( ffjtProviderbase = iota ffjtProvidernosuchkey ffjtProviderName ffjtProviderURL ffjtProviderEndpoints ) var ffjKeyProviderName = []byte("provider_name") var ffjKeyProviderURL = []byte("provider_url") var ffjKeyProviderEndpoints = []byte("endpoints") // UnmarshalJSON umarshall json - template of ffjson func (j *Provider) UnmarshalJSON(input []byte) error { fs := fflib.NewFFLexer(input) return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } // UnmarshalJSONFFLexer fast json unmarshall - template ffjson func (j *Provider) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { var err error currentKey := ffjtProviderbase _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init mainparse: for { tok = fs.Scan() // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) if tok == fflib.FFTok_error { goto tokerror } switch state { case fflib.FFParse_map_start: if tok != fflib.FFTok_left_bracket { wantedTok = fflib.FFTok_left_bracket goto wrongtokenerror } state = fflib.FFParse_want_key continue case fflib.FFParse_after_value: if tok == fflib.FFTok_comma { state = fflib.FFParse_want_key } else if tok == fflib.FFTok_right_bracket { goto done } else { wantedTok = fflib.FFTok_comma goto wrongtokenerror } case fflib.FFParse_want_key: // json {} ended. goto exit. woo. if tok == fflib.FFTok_right_bracket { goto done } if tok != fflib.FFTok_string { wantedTok = fflib.FFTok_string goto wrongtokenerror } kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. currentKey = ffjtProvidernosuchkey state = fflib.FFParse_want_colon goto mainparse } else { switch kn[0] { case 'e': if bytes.Equal(ffjKeyProviderEndpoints, kn) { currentKey = ffjtProviderEndpoints state = fflib.FFParse_want_colon goto mainparse } case 'p': if bytes.Equal(ffjKeyProviderName, kn) { currentKey = ffjtProviderName state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyProviderURL, kn) { currentKey = ffjtProviderURL state = fflib.FFParse_want_colon goto mainparse } } if fflib.EqualFoldRight(ffjKeyProviderEndpoints, kn) { currentKey = ffjtProviderEndpoints state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyProviderURL, kn) { currentKey = ffjtProviderURL state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyProviderName, kn) { currentKey = ffjtProviderName state = fflib.FFParse_want_colon goto mainparse } currentKey = ffjtProvidernosuchkey state = fflib.FFParse_want_colon goto mainparse } case fflib.FFParse_want_colon: if tok != fflib.FFTok_colon { wantedTok = fflib.FFTok_colon goto wrongtokenerror } state = fflib.FFParse_want_value continue case fflib.FFParse_want_value: 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 { switch currentKey { case ffjtProviderName: goto handle_Name case ffjtProviderURL: goto handle_URL case ffjtProviderEndpoints: goto handle_Endpoints case ffjtProvidernosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) } state = fflib.FFParse_after_value goto mainparse } } else { goto wantedvalue } } } handle_Name: /* handler: j.Name type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.Name = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_URL: /* handler: j.URL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.URL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Endpoints: /* handler: j.Endpoints type=[]oembed.Endpoint kind=slice quoted=false*/ { { if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) } } if tok == fflib.FFTok_null { j.Endpoints = nil } else { j.Endpoints = []Endpoint{} wantVal := true for { var tmpJEndpoints Endpoint tok = fs.Scan() if tok == fflib.FFTok_error { goto tokerror } if tok == fflib.FFTok_right_brace { break } if tok == fflib.FFTok_comma { if wantVal == true { // TODO(pquerna): this isn't an ideal error message, this handles // things like [,,,] as an array value. return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) } continue } else { wantVal = true } /* handler: tmpJEndpoints type=oembed.Endpoint kind=struct quoted=false*/ { if tok == fflib.FFTok_null { } else { err = tmpJEndpoints.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) if err != nil { return err } } state = fflib.FFParse_after_value } j.Endpoints = append(j.Endpoints, tmpJEndpoints) wantVal = false } } } state = fflib.FFParse_after_value goto mainparse wantedvalue: return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) wrongtokenerror: return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) tokerror: if fs.BigError != nil { return fs.WrapErr(fs.BigError) } err = fs.Error.ToError() if err != nil { return fs.WrapErr(err) } panic("ffjson-generated: unreachable, please report bug.") done: return nil } // MarshalJSON marshal bytes to json - template func (j *Response) MarshalJSON() ([]byte, error) { var buf fflib.Buffer if j == nil { buf.WriteString("null") return buf.Bytes(), nil } err := j.MarshalJSONBuf(&buf) if err != nil { return nil, err } return buf.Bytes(), nil } // MarshalJSONBuf marshal buff to json - template func (j *Response) MarshalJSONBuf(buf fflib.EncodingBuffer) error { if j == nil { buf.WriteString("null") return nil } var err error var obj []byte _ = obj _ = err buf.WriteString(`{ "type":`) fflib.WriteJsonString(buf, string(j.Type)) buf.WriteString(`,"version":`) fflib.WriteJsonString(buf, string(j.Version)) buf.WriteByte(',') if len(j.Title) != 0 { buf.WriteString(`"title":`) fflib.WriteJsonString(buf, string(j.Title)) buf.WriteByte(',') } if len(j.AuthorName) != 0 { buf.WriteString(`"author_name":`) fflib.WriteJsonString(buf, string(j.AuthorName)) buf.WriteByte(',') } if len(j.AuthorURL) != 0 { buf.WriteString(`"author_url":`) fflib.WriteJsonString(buf, string(j.AuthorURL)) buf.WriteByte(',') } if len(j.ProviderName) != 0 { buf.WriteString(`"provider_name":`) fflib.WriteJsonString(buf, string(j.ProviderName)) buf.WriteByte(',') } if len(j.ProviderURL) != 0 { buf.WriteString(`"provider_url":`) fflib.WriteJsonString(buf, string(j.ProviderURL)) buf.WriteByte(',') } if j.CacheAge != 0 { buf.WriteString(`"cache_age":`) fflib.FormatBits2(buf, uint64(j.CacheAge), 10, j.CacheAge < 0) buf.WriteByte(',') } if len(j.ThumbnailURL) != 0 { buf.WriteString(`"thumbnail_url":`) fflib.WriteJsonString(buf, string(j.ThumbnailURL)) buf.WriteByte(',') } if j.ThumbnailWidth != 0 { buf.WriteString(`"thumbnail_width":`) fflib.FormatBits2(buf, uint64(j.ThumbnailWidth), 10, j.ThumbnailWidth < 0) buf.WriteByte(',') } if j.ThumbnailHeight != 0 { buf.WriteString(`"thumbnail_height":`) fflib.FormatBits2(buf, uint64(j.ThumbnailHeight), 10, j.ThumbnailHeight < 0) buf.WriteByte(',') } if len(j.URL) != 0 { buf.WriteString(`"url":`) fflib.WriteJsonString(buf, string(j.URL)) buf.WriteByte(',') } buf.Rewind(1) buf.WriteByte('}') return nil } const ( ffjtResponsebase = iota ffjtResponsenosuchkey ffjtResponseType ffjtResponseVersion ffjtResponseTitle ffjtResponseAuthorName ffjtResponseAuthorURL ffjtResponseProviderName ffjtResponseProviderURL ffjtResponseCacheAge ffjtResponseThumbnailURL ffjtResponseThumbnailWidth ffjtResponseThumbnailHeight ffjtResponseURL ) var ffjKeyResponseType = []byte("type") var ffjKeyResponseVersion = []byte("version") var ffjKeyResponseTitle = []byte("title") var ffjKeyResponseAuthorName = []byte("author_name") var ffjKeyResponseAuthorURL = []byte("author_url") var ffjKeyResponseProviderName = []byte("provider_name") var ffjKeyResponseProviderURL = []byte("provider_url") var ffjKeyResponseCacheAge = []byte("cache_age") var ffjKeyResponseThumbnailURL = []byte("thumbnail_url") var ffjKeyResponseThumbnailWidth = []byte("thumbnail_width") var ffjKeyResponseThumbnailHeight = []byte("thumbnail_height") var ffjKeyResponseURL = []byte("url") // UnmarshalJSON umarshall json - template of ffjson func (j *Response) UnmarshalJSON(input []byte) error { fs := fflib.NewFFLexer(input) return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } // UnmarshalJSONFFLexer fast json unmarshall - template ffjson func (j *Response) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { var err error currentKey := ffjtResponsebase _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init mainparse: for { tok = fs.Scan() // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) if tok == fflib.FFTok_error { goto tokerror } switch state { case fflib.FFParse_map_start: if tok != fflib.FFTok_left_bracket { wantedTok = fflib.FFTok_left_bracket goto wrongtokenerror } state = fflib.FFParse_want_key continue case fflib.FFParse_after_value: if tok == fflib.FFTok_comma { state = fflib.FFParse_want_key } else if tok == fflib.FFTok_right_bracket { goto done } else { wantedTok = fflib.FFTok_comma goto wrongtokenerror } case fflib.FFParse_want_key: // json {} ended. goto exit. woo. if tok == fflib.FFTok_right_bracket { goto done } if tok != fflib.FFTok_string { wantedTok = fflib.FFTok_string goto wrongtokenerror } kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. currentKey = ffjtResponsenosuchkey state = fflib.FFParse_want_colon goto mainparse } else { switch kn[0] { case 'a': if bytes.Equal(ffjKeyResponseAuthorName, kn) { currentKey = ffjtResponseAuthorName state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyResponseAuthorURL, kn) { currentKey = ffjtResponseAuthorURL state = fflib.FFParse_want_colon goto mainparse } case 'c': if bytes.Equal(ffjKeyResponseCacheAge, kn) { currentKey = ffjtResponseCacheAge state = fflib.FFParse_want_colon goto mainparse } case 'p': if bytes.Equal(ffjKeyResponseProviderName, kn) { currentKey = ffjtResponseProviderName state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyResponseProviderURL, kn) { currentKey = ffjtResponseProviderURL state = fflib.FFParse_want_colon goto mainparse } case 't': if bytes.Equal(ffjKeyResponseType, kn) { currentKey = ffjtResponseType state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyResponseTitle, kn) { currentKey = ffjtResponseTitle state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyResponseThumbnailURL, kn) { currentKey = ffjtResponseThumbnailURL state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyResponseThumbnailWidth, kn) { currentKey = ffjtResponseThumbnailWidth state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyResponseThumbnailHeight, kn) { currentKey = ffjtResponseThumbnailHeight state = fflib.FFParse_want_colon goto mainparse } case 'u': if bytes.Equal(ffjKeyResponseURL, kn) { currentKey = ffjtResponseURL state = fflib.FFParse_want_colon goto mainparse } case 'v': if bytes.Equal(ffjKeyResponseVersion, kn) { currentKey = ffjtResponseVersion state = fflib.FFParse_want_colon goto mainparse } } if fflib.SimpleLetterEqualFold(ffjKeyResponseURL, kn) { currentKey = ffjtResponseURL state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseThumbnailHeight, kn) { currentKey = ffjtResponseThumbnailHeight state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseThumbnailWidth, kn) { currentKey = ffjtResponseThumbnailWidth state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseThumbnailURL, kn) { currentKey = ffjtResponseThumbnailURL state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseCacheAge, kn) { currentKey = ffjtResponseCacheAge state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseProviderURL, kn) { currentKey = ffjtResponseProviderURL state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseProviderName, kn) { currentKey = ffjtResponseProviderName state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseAuthorURL, kn) { currentKey = ffjtResponseAuthorURL state = fflib.FFParse_want_colon goto mainparse } if fflib.AsciiEqualFold(ffjKeyResponseAuthorName, kn) { currentKey = ffjtResponseAuthorName state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyResponseTitle, kn) { currentKey = ffjtResponseTitle state = fflib.FFParse_want_colon goto mainparse } if fflib.EqualFoldRight(ffjKeyResponseVersion, kn) { currentKey = ffjtResponseVersion state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyResponseType, kn) { currentKey = ffjtResponseType state = fflib.FFParse_want_colon goto mainparse } currentKey = ffjtResponsenosuchkey state = fflib.FFParse_want_colon goto mainparse } case fflib.FFParse_want_colon: if tok != fflib.FFTok_colon { wantedTok = fflib.FFTok_colon goto wrongtokenerror } state = fflib.FFParse_want_value continue case fflib.FFParse_want_value: 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 { switch currentKey { case ffjtResponseType: goto handle_Type case ffjtResponseVersion: goto handle_Version case ffjtResponseTitle: goto handle_Title case ffjtResponseAuthorName: goto handle_AuthorName case ffjtResponseAuthorURL: goto handle_AuthorURL case ffjtResponseProviderName: goto handle_ProviderName case ffjtResponseProviderURL: goto handle_ProviderURL case ffjtResponseCacheAge: goto handle_CacheAge case ffjtResponseThumbnailURL: goto handle_ThumbnailURL case ffjtResponseThumbnailWidth: goto handle_ThumbnailWidth case ffjtResponseThumbnailHeight: goto handle_ThumbnailHeight case ffjtResponseURL: goto handle_URL case ffjtResponsenosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) } state = fflib.FFParse_after_value goto mainparse } } else { goto wantedvalue } } } handle_Type: /* handler: j.Type type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.Type = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Version: /* handler: j.Version type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.Version = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Title: /* handler: j.Title type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.Title = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_AuthorName: /* handler: j.AuthorName type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.AuthorName = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_AuthorURL: /* handler: j.AuthorURL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.AuthorURL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_ProviderName: /* handler: j.ProviderName type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.ProviderName = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_ProviderURL: /* handler: j.ProviderURL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.ProviderURL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_CacheAge: /* handler: j.CacheAge type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.CacheAge = int(tval) } } state = fflib.FFParse_after_value goto mainparse handle_ThumbnailURL: /* handler: j.ThumbnailURL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.ThumbnailURL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_ThumbnailWidth: /* handler: j.ThumbnailWidth type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.ThumbnailWidth = int(tval) } } state = fflib.FFParse_after_value goto mainparse handle_ThumbnailHeight: /* handler: j.ThumbnailHeight type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.ThumbnailHeight = int(tval) } } state = fflib.FFParse_after_value goto mainparse handle_URL: /* handler: j.URL type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.URL = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse wantedvalue: return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) wrongtokenerror: return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) tokerror: if fs.BigError != nil { return fs.WrapErr(fs.BigError) } err = fs.Error.ToError() if err != nil { return fs.WrapErr(err) } panic("ffjson-generated: unreachable, please report bug.") done: return nil } // MarshalJSON marshal bytes to json - template func (j *Rich) MarshalJSON() ([]byte, error) { var buf fflib.Buffer if j == nil { buf.WriteString("null") return buf.Bytes(), nil } err := j.MarshalJSONBuf(&buf) if err != nil { return nil, err } return buf.Bytes(), nil } // MarshalJSONBuf marshal buff to json - template func (j *Rich) MarshalJSONBuf(buf fflib.EncodingBuffer) error { if j == nil { buf.WriteString("null") return nil } var err error var obj []byte _ = obj _ = err buf.WriteString(`{"html":`) fflib.WriteJsonString(buf, string(j.HTML)) buf.WriteString(`,"width":`) fflib.FormatBits2(buf, uint64(j.Width), 10, j.Width < 0) buf.WriteString(`,"height":`) fflib.FormatBits2(buf, uint64(j.Height), 10, j.Height < 0) buf.WriteByte('}') return nil } const ( ffjtRichbase = iota ffjtRichnosuchkey ffjtRichHTML ffjtRichWidth ffjtRichHeight ) var ffjKeyRichHTML = []byte("html") var ffjKeyRichWidth = []byte("width") var ffjKeyRichHeight = []byte("height") // UnmarshalJSON umarshall json - template of ffjson func (j *Rich) UnmarshalJSON(input []byte) error { fs := fflib.NewFFLexer(input) return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } // UnmarshalJSONFFLexer fast json unmarshall - template ffjson func (j *Rich) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { var err error currentKey := ffjtRichbase _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init mainparse: for { tok = fs.Scan() // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) if tok == fflib.FFTok_error { goto tokerror } switch state { case fflib.FFParse_map_start: if tok != fflib.FFTok_left_bracket { wantedTok = fflib.FFTok_left_bracket goto wrongtokenerror } state = fflib.FFParse_want_key continue case fflib.FFParse_after_value: if tok == fflib.FFTok_comma { state = fflib.FFParse_want_key } else if tok == fflib.FFTok_right_bracket { goto done } else { wantedTok = fflib.FFTok_comma goto wrongtokenerror } case fflib.FFParse_want_key: // json {} ended. goto exit. woo. if tok == fflib.FFTok_right_bracket { goto done } if tok != fflib.FFTok_string { wantedTok = fflib.FFTok_string goto wrongtokenerror } kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. currentKey = ffjtRichnosuchkey state = fflib.FFParse_want_colon goto mainparse } else { switch kn[0] { case 'h': if bytes.Equal(ffjKeyRichHTML, kn) { currentKey = ffjtRichHTML state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyRichHeight, kn) { currentKey = ffjtRichHeight state = fflib.FFParse_want_colon goto mainparse } case 'w': if bytes.Equal(ffjKeyRichWidth, kn) { currentKey = ffjtRichWidth state = fflib.FFParse_want_colon goto mainparse } } if fflib.SimpleLetterEqualFold(ffjKeyRichHeight, kn) { currentKey = ffjtRichHeight state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyRichWidth, kn) { currentKey = ffjtRichWidth state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyRichHTML, kn) { currentKey = ffjtRichHTML state = fflib.FFParse_want_colon goto mainparse } currentKey = ffjtRichnosuchkey state = fflib.FFParse_want_colon goto mainparse } case fflib.FFParse_want_colon: if tok != fflib.FFTok_colon { wantedTok = fflib.FFTok_colon goto wrongtokenerror } state = fflib.FFParse_want_value continue case fflib.FFParse_want_value: 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 { switch currentKey { case ffjtRichHTML: goto handle_HTML case ffjtRichWidth: goto handle_Width case ffjtRichHeight: goto handle_Height case ffjtRichnosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) } state = fflib.FFParse_after_value goto mainparse } } else { goto wantedvalue } } } handle_HTML: /* handler: j.HTML type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.HTML = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Width: /* handler: j.Width type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.Width = int(tval) } } state = fflib.FFParse_after_value goto mainparse handle_Height: /* handler: j.Height type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.Height = int(tval) } } state = fflib.FFParse_after_value goto mainparse wantedvalue: return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) wrongtokenerror: return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) tokerror: if fs.BigError != nil { return fs.WrapErr(fs.BigError) } err = fs.Error.ToError() if err != nil { return fs.WrapErr(err) } panic("ffjson-generated: unreachable, please report bug.") done: return nil } // MarshalJSON marshal bytes to json - template func (j *Video) MarshalJSON() ([]byte, error) { var buf fflib.Buffer if j == nil { buf.WriteString("null") return buf.Bytes(), nil } err := j.MarshalJSONBuf(&buf) if err != nil { return nil, err } return buf.Bytes(), nil } // MarshalJSONBuf marshal buff to json - template func (j *Video) MarshalJSONBuf(buf fflib.EncodingBuffer) error { if j == nil { buf.WriteString("null") return nil } var err error var obj []byte _ = obj _ = err buf.WriteString(`{"html":`) fflib.WriteJsonString(buf, string(j.HTML)) buf.WriteString(`,"width":`) fflib.FormatBits2(buf, uint64(j.Width), 10, j.Width < 0) buf.WriteString(`,"height":`) fflib.FormatBits2(buf, uint64(j.Height), 10, j.Height < 0) buf.WriteByte('}') return nil } const ( ffjtVideobase = iota ffjtVideonosuchkey ffjtVideoHTML ffjtVideoWidth ffjtVideoHeight ) var ffjKeyVideoHTML = []byte("html") var ffjKeyVideoWidth = []byte("width") var ffjKeyVideoHeight = []byte("height") // UnmarshalJSON umarshall json - template of ffjson func (j *Video) UnmarshalJSON(input []byte) error { fs := fflib.NewFFLexer(input) return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } // UnmarshalJSONFFLexer fast json unmarshall - template ffjson func (j *Video) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { var err error currentKey := ffjtVideobase _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init mainparse: for { tok = fs.Scan() // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) if tok == fflib.FFTok_error { goto tokerror } switch state { case fflib.FFParse_map_start: if tok != fflib.FFTok_left_bracket { wantedTok = fflib.FFTok_left_bracket goto wrongtokenerror } state = fflib.FFParse_want_key continue case fflib.FFParse_after_value: if tok == fflib.FFTok_comma { state = fflib.FFParse_want_key } else if tok == fflib.FFTok_right_bracket { goto done } else { wantedTok = fflib.FFTok_comma goto wrongtokenerror } case fflib.FFParse_want_key: // json {} ended. goto exit. woo. if tok == fflib.FFTok_right_bracket { goto done } if tok != fflib.FFTok_string { wantedTok = fflib.FFTok_string goto wrongtokenerror } kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. currentKey = ffjtVideonosuchkey state = fflib.FFParse_want_colon goto mainparse } else { switch kn[0] { case 'h': if bytes.Equal(ffjKeyVideoHTML, kn) { currentKey = ffjtVideoHTML state = fflib.FFParse_want_colon goto mainparse } else if bytes.Equal(ffjKeyVideoHeight, kn) { currentKey = ffjtVideoHeight state = fflib.FFParse_want_colon goto mainparse } case 'w': if bytes.Equal(ffjKeyVideoWidth, kn) { currentKey = ffjtVideoWidth state = fflib.FFParse_want_colon goto mainparse } } if fflib.SimpleLetterEqualFold(ffjKeyVideoHeight, kn) { currentKey = ffjtVideoHeight state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyVideoWidth, kn) { currentKey = ffjtVideoWidth state = fflib.FFParse_want_colon goto mainparse } if fflib.SimpleLetterEqualFold(ffjKeyVideoHTML, kn) { currentKey = ffjtVideoHTML state = fflib.FFParse_want_colon goto mainparse } currentKey = ffjtVideonosuchkey state = fflib.FFParse_want_colon goto mainparse } case fflib.FFParse_want_colon: if tok != fflib.FFTok_colon { wantedTok = fflib.FFTok_colon goto wrongtokenerror } state = fflib.FFParse_want_value continue case fflib.FFParse_want_value: 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 { switch currentKey { case ffjtVideoHTML: goto handle_HTML case ffjtVideoWidth: goto handle_Width case ffjtVideoHeight: goto handle_Height case ffjtVideonosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) } state = fflib.FFParse_after_value goto mainparse } } else { goto wantedvalue } } } handle_HTML: /* handler: j.HTML type=string kind=string quoted=false*/ { { if tok != fflib.FFTok_string && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) } } if tok == fflib.FFTok_null { } else { outBuf := fs.Output.Bytes() j.HTML = string(string(outBuf)) } } state = fflib.FFParse_after_value goto mainparse handle_Width: /* handler: j.Width type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.Width = int(tval) } } state = fflib.FFParse_after_value goto mainparse handle_Height: /* handler: j.Height type=int kind=int quoted=false*/ { if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) } } { if tok == fflib.FFTok_null { } else { tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) if err != nil { return fs.WrapErr(err) } j.Height = int(tval) } } state = fflib.FFParse_after_value goto mainparse wantedvalue: return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) wrongtokenerror: return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) tokerror: if fs.BigError != nil { return fs.WrapErr(fs.BigError) } err = fs.Error.ToError() if err != nil { return fs.WrapErr(err) } panic("ffjson-generated: unreachable, please report bug.") done: return nil }