blob: dff04086ed8e8465566f5174b788871853c8b0d6 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"bytes"
"unsafe"
"v.io/v23/security/access"
wire "v.io/v23/services/syncbase"
"v.io/v23/verror"
)
// All "x.toFoo" methods free the memory associated with x.
/*
#include <stdlib.h>
#include <string.h>
#include "lib.h"
*/
import "C"
////////////////////////////////////////
// C.v23_syncbase_Bool
func (x *C.v23_syncbase_Bool) init(b bool) {
if b == false {
*x = 0
} else {
*x = 1
}
}
func (x *C.v23_syncbase_Bool) toBool() bool {
if *x == 0 {
return false
}
return true
}
////////////////////////////////////////
// C.v23_syncbase_String
func (x *C.v23_syncbase_String) init(s string) {
x.n = C.int(len(s))
x.p = C.CString(s)
}
func (x *C.v23_syncbase_String) toString() string {
if x.p == nil {
return ""
}
defer C.free(unsafe.Pointer(x.p))
return C.GoStringN(x.p, x.n)
}
////////////////////////////////////////
// C.v23_syncbase_Bytes
func init() {
if C.sizeof_uint8_t != 1 {
panic(C.sizeof_uint8_t)
}
}
func (x *C.v23_syncbase_Bytes) init(b []byte) {
x.n = C.int(len(b))
x.p = (*C.uint8_t)(C.malloc(C.size_t(len(b))))
C.memcpy(unsafe.Pointer(x.p), unsafe.Pointer(&b[0]), C.size_t(len(b)))
}
func (x *C.v23_syncbase_Bytes) toBytes() []byte {
if x.p == nil {
return nil
}
defer C.free(unsafe.Pointer(x.p))
return C.GoBytes(unsafe.Pointer(x.p), x.n)
}
////////////////////////////////////////
// C.v23_syncbase_Strings
func (x *C.v23_syncbase_Strings) at(i int) *C.v23_syncbase_String {
return (*C.v23_syncbase_String)(unsafe.Pointer(uintptr(unsafe.Pointer(x.p)) + uintptr(C.size_t(i)*C.sizeof_v23_syncbase_String)))
}
func (x *C.v23_syncbase_Strings) init(strs []string) {
x.n = C.int(len(strs))
x.p = (*C.v23_syncbase_String)(C.malloc(C.size_t(len(strs)) * C.sizeof_v23_syncbase_String))
for i, v := range strs {
x.at(i).init(v)
}
}
func (x *C.v23_syncbase_Strings) toStrings() []string {
if x.p == nil {
return nil
}
defer C.free(unsafe.Pointer(x.p))
res := make([]string, x.n)
for i := 0; i < int(x.n); i++ {
res[i] = x.at(i).toString()
}
return res
}
////////////////////////////////////////
// C.v23_syncbase_VError
func (x *C.v23_syncbase_VError) init(err error) {
if err == nil {
return
}
x.id.init(string(verror.ErrorID(err)))
x.actionCode = C.uint(verror.Action(err))
x.msg.init(err.Error())
x.stack.init(verror.Stack(err).String())
}
////////////////////////////////////////
// C.v23_syncbase_Permissions
func (x *C.v23_syncbase_Permissions) init(perms access.Permissions) {
b := new(bytes.Buffer)
if err := access.WritePermissions(b, perms); err != nil {
panic(err)
}
x.json.init(b.Bytes())
}
func (x *C.v23_syncbase_Permissions) toPermissions() access.Permissions {
b := x.json.toBytes()
if len(b) == 0 {
return nil
}
perms, err := access.ReadPermissions(bytes.NewReader(b))
if err != nil {
panic(err)
}
return perms
}
////////////////////////////////////////
// C.v23_syncbase_Id
func (x *C.v23_syncbase_Id) init(id wire.Id) {
x.blessing.init(id.Blessing)
x.name.init(id.Name)
}
func (x *C.v23_syncbase_Id) toId() wire.Id {
return wire.Id{
Blessing: x.blessing.toString(),
Name: x.name.toString(),
}
}
////////////////////////////////////////
// C.v23_syncbase_Ids
func (x *C.v23_syncbase_Ids) at(i int) *C.v23_syncbase_Id {
return (*C.v23_syncbase_Id)(unsafe.Pointer(uintptr(unsafe.Pointer(x.p)) + uintptr(C.size_t(i)*C.sizeof_v23_syncbase_Id)))
}
func (x *C.v23_syncbase_Ids) init(ids []wire.Id) {
x.n = C.int(len(ids))
x.p = (*C.v23_syncbase_Id)(C.malloc(C.size_t(len(ids)) * C.sizeof_v23_syncbase_Id))
for i, v := range ids {
x.at(i).init(v)
}
}
////////////////////////////////////////
// C.v23_syncbase_BatchOptions
func (x *C.v23_syncbase_BatchOptions) init(opts wire.BatchOptions) {
x.hint.init(opts.Hint)
x.readOnly = C.bool(opts.ReadOnly)
}
func (x *C.v23_syncbase_BatchOptions) toBatchOptions() wire.BatchOptions {
return wire.BatchOptions{
Hint: x.hint.toString(),
ReadOnly: bool(x.readOnly),
}
}
////////////////////////////////////////
// C.v23_syncbase_KeyValue
func (x *C.v23_syncbase_KeyValue) init(key string, value []byte) {
x.key.init(key)
x.value.init(value)
}
// FIXME(sadovsky): Implement stubbed-out methods below.
////////////////////////////////////////
// C.v23_syncbase_SyncgroupSpec
func (x *C.v23_syncbase_SyncgroupSpec) init(spec wire.SyncgroupSpec) {
}
func (x *C.v23_syncbase_SyncgroupSpec) toSyncgroupSpec() wire.SyncgroupSpec {
return wire.SyncgroupSpec{}
}
////////////////////////////////////////
// C.v23_syncbase_SyncgroupMemberInfo
func (x *C.v23_syncbase_SyncgroupMemberInfo) init(member wire.SyncgroupMemberInfo) {
}
func (x *C.v23_syncbase_SyncgroupMemberInfo) toSyncgroupMemberInfo() wire.SyncgroupMemberInfo {
return wire.SyncgroupMemberInfo{}
}
////////////////////////////////////////
// C.v23_syncbase_SyncgroupMemberInfoMap
func (x *C.v23_syncbase_SyncgroupMemberInfoMap) init(members map[string]wire.SyncgroupMemberInfo) {
}