fork of indigo with slightly nicer lexgen
at main 856 B view raw
1package util 2 3import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io" 8) 9 10type typeExtractor struct { 11 Type string `json:"$type" cborgen:"$type"` 12} 13 14func TypeExtract(b []byte) (string, error) { 15 var te typeExtractor 16 if err := json.Unmarshal(b, &te); err != nil { 17 return "", err 18 } 19 20 return te.Type, nil 21} 22 23type CborChecker struct { 24 Type string `json:"$type" cborgen:"$type"` 25} 26 27func CborTypeExtract(b []byte) (string, error) { 28 var tcheck CborChecker 29 if err := tcheck.UnmarshalCBOR(bytes.NewReader(b)); err != nil { 30 fmt.Printf("bad bytes: %x\n", b) 31 return "", err 32 } 33 34 return tcheck.Type, nil 35} 36 37func CborTypeExtractReader(r io.Reader) (string, []byte, error) { 38 buf := new(bytes.Buffer) 39 tr := io.TeeReader(r, buf) 40 var tcheck CborChecker 41 if err := tcheck.UnmarshalCBOR(tr); err != nil { 42 return "", nil, err 43 } 44 45 return tcheck.Type, buf.Bytes(), nil 46}