mirror of
https://codeberg.org/scip/tablizer.git
synced 2025-12-19 05:21:03 +01:00
added
This commit is contained in:
59
vendor/github.com/glycerine/zygomys/zygo/gob.go
generated
vendored
Normal file
59
vendor/github.com/glycerine/zygomys/zygo/gob.go
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
package zygo
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func GobEncodeFunction(env *Zlisp, name string, args []Sexp) (Sexp, error) {
|
||||
if len(args) != 1 {
|
||||
return SexpNull, WrongNargs
|
||||
}
|
||||
|
||||
h, isHash := args[0].(*SexpHash)
|
||||
if !isHash {
|
||||
return SexpNull, fmt.Errorf("gob argument must be a hash or defmap")
|
||||
}
|
||||
|
||||
// fill the go shadow struct
|
||||
_, err := ToGoFunction(env, "togo", []Sexp{h})
|
||||
if err != nil {
|
||||
return SexpNull, fmt.Errorf("error converting object to Go struct: '%s'", err)
|
||||
}
|
||||
|
||||
// serialize to gob
|
||||
var gobBytes bytes.Buffer
|
||||
|
||||
enc := gob.NewEncoder(&gobBytes)
|
||||
err = enc.Encode(h.GoShadowStruct)
|
||||
if err != nil {
|
||||
return SexpNull, fmt.Errorf("gob encode error: '%s'", err)
|
||||
}
|
||||
|
||||
return &SexpRaw{Val: gobBytes.Bytes()}, nil
|
||||
}
|
||||
|
||||
func GobDecodeFunction(env *Zlisp, name string, args []Sexp) (Sexp, error) {
|
||||
if len(args) != 1 {
|
||||
return SexpNull, WrongNargs
|
||||
}
|
||||
|
||||
raw, isRaw := args[0].(*SexpRaw)
|
||||
if !isRaw {
|
||||
return SexpNull, fmt.Errorf("ungob argument must be raw []byte")
|
||||
}
|
||||
|
||||
rawBuf := bytes.NewBuffer(raw.Val)
|
||||
dec := gob.NewDecoder(rawBuf)
|
||||
var iface interface{}
|
||||
err := dec.Decode(iface)
|
||||
if err != nil {
|
||||
return SexpNull, fmt.Errorf("gob decode error: '%s'", err)
|
||||
}
|
||||
|
||||
// TODO convert to hash
|
||||
panic("not done yet!")
|
||||
|
||||
//return SexpNull, nil
|
||||
}
|
||||
Reference in New Issue
Block a user