Created
May 2, 2016 05:50
-
-
Save kyleconroy/3705feca192b36dcb69b572998bab1c1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package foo | |
type Foo struct { | |
Bar string `json:"bar"` | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// DO NOT EDIT! | |
// Code generated by ffjson <https://github.com/pquerna/ffjson> | |
// source: foo.go | |
// DO NOT EDIT! | |
package foo | |
import ( | |
"bytes" | |
"fmt" | |
fflib "github.com/pquerna/ffjson/fflib/v1" | |
) | |
func (mj *Foo) MarshalJSON() ([]byte, error) { | |
var buf fflib.Buffer | |
if mj == nil { | |
buf.WriteString("null") | |
return buf.Bytes(), nil | |
} | |
err := mj.MarshalJSONBuf(&buf) | |
if err != nil { | |
return nil, err | |
} | |
return buf.Bytes(), nil | |
} | |
func (mj *Foo) MarshalJSONBuf(buf fflib.EncodingBuffer) error { | |
if mj == nil { | |
buf.WriteString("null") | |
return nil | |
} | |
var err error | |
var obj []byte | |
_ = obj | |
_ = err | |
buf.WriteString(`{"bar":`) | |
fflib.WriteJsonString(buf, string(mj.Bar)) | |
buf.WriteByte('}') | |
return nil | |
} | |
const ( | |
ffj_t_Foobase = iota | |
ffj_t_Foono_such_key | |
ffj_t_Foo_Bar | |
) | |
var ffj_key_Foo_Bar = []byte("bar") | |
func (uj *Foo) UnmarshalJSON(input []byte) error { | |
fs := fflib.NewFFLexer(input) | |
return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) | |
} | |
func (uj *Foo) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { | |
var err error = nil | |
currentKey := ffj_t_Foobase | |
_ = 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 = ffj_t_Foono_such_key | |
state = fflib.FFParse_want_colon | |
goto mainparse | |
} else { | |
switch kn[0] { | |
case 'b': | |
if bytes.Equal(ffj_key_Foo_Bar, kn) { | |
currentKey = ffj_t_Foo_Bar | |
state = fflib.FFParse_want_colon | |
goto mainparse | |
} | |
} | |
if fflib.SimpleLetterEqualFold(ffj_key_Foo_Bar, kn) { | |
currentKey = ffj_t_Foo_Bar | |
state = fflib.FFParse_want_colon | |
goto mainparse | |
} | |
currentKey = ffj_t_Foono_such_key | |
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 ffj_t_Foo_Bar: | |
goto handle_Bar | |
case ffj_t_Foono_such_key: | |
err = fs.SkipField(tok) | |
if err != nil { | |
return fs.WrapErr(err) | |
} | |
state = fflib.FFParse_after_value | |
goto mainparse | |
} | |
} else { | |
goto wantedvalue | |
} | |
} | |
} | |
handle_Bar: | |
/* handler: uj.Bar 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() | |
uj.Bar = 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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment