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}