66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package debug
 | |
| 
 | |
| import (
 | |
| 	"encoding/binary"
 | |
| 	"fmt"
 | |
| 
 | |
| 	visedb "git.defalsify.org/vise.git/db"
 | |
| 	storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	dbTypStr map[storedb.DataTyp]string = make(map[storedb.DataTyp]string)
 | |
| )
 | |
| 
 | |
| type KeyInfo struct {
 | |
| 	SessionId   string
 | |
| 	Typ         uint8
 | |
| 	SubTyp      storedb.DataTyp
 | |
| 	Label       string
 | |
| 	Description string
 | |
| }
 | |
| 
 | |
| func (k KeyInfo) String() string {
 | |
| 	v := uint16(k.SubTyp)
 | |
| 	s := subTypToString(k.SubTyp)
 | |
| 	if s == "" {
 | |
| 		v = uint16(k.Typ)
 | |
| 		s = typToString(k.Typ)
 | |
| 	}
 | |
| 	return fmt.Sprintf("Session Id: %s\nTyp: %s (%d)\n", k.SessionId, s, v)
 | |
| }
 | |
| 
 | |
| func ToKeyInfo(k []byte, sessionId string) (KeyInfo, error) {
 | |
| 	o := KeyInfo{}
 | |
| 
 | |
| 	o.SessionId = sessionId
 | |
| 	o.Typ = uint8(k[0])
 | |
| 	k = k[1:]
 | |
| 
 | |
| 	if o.Typ == visedb.DATATYPE_USERDATA {
 | |
| 		if len(k) == 0 {
 | |
| 			return o, fmt.Errorf("missing subtype key")
 | |
| 		}
 | |
| 		v := binary.BigEndian.Uint16(k[:2])
 | |
| 		o.SubTyp = storedb.DataTyp(v)
 | |
| 		o.Label = subTypToString(o.SubTyp)
 | |
| 		k = k[2:]
 | |
| 		if len(k) != 0 {
 | |
| 			return o, fmt.Errorf("excess key information: %x", k)
 | |
| 		}
 | |
| 	} else {
 | |
| 		o.Label = typToString(o.Typ)
 | |
| 		k = k[2:]
 | |
| 	}
 | |
| 
 | |
| 	return o, nil
 | |
| }
 | |
| 
 | |
| func subTypToString(v storedb.DataTyp) string {
 | |
| 	return dbTypStr[v+visedb.DATATYPE_USERDATA+1]
 | |
| }
 | |
| 
 | |
| func typToString(v uint8) string {
 | |
| 	return dbTypStr[storedb.DataTyp(uint16(v))]
 | |
| }
 |