blob: 824192107421453a2719746d79c7923f718c4b21 [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 syncbase
import (
wire "v.io/syncbase/v23/services/syncbase"
"v.io/v23/context"
"v.io/v23/naming"
"v.io/v23/vdl"
)
type table struct {
c wire.TableClientMethods
name string
relativeName string
}
var _ Table = (*table)(nil)
// Name implements Table.Name.
func (t *table) Name() string {
return t.relativeName
}
// BindItem implements Table.BindItem.
func (t *table) BindItem(key *vdl.Value) Item {
name := naming.Join(t.name, encodeKey(key))
return &item{wire.ItemClient(name), name, key}
}
// Get implements Table.Get.
func (t *table) Get(ctx *context.T, key *vdl.Value) (*vdl.Value, error) {
return t.BindItem(key).Get(ctx)
}
// Put implements Table.Put.
func (t *table) Put(ctx *context.T, value *vdl.Value) error {
return t.BindItem(t.getPrimaryKey(value)).Put(ctx, value)
}
// Delete implements Table.Delete.
func (t *table) Delete(ctx *context.T, key *vdl.Value) error {
return t.BindItem(key).Delete(ctx)
}
// TODO(sadovsky): Implement. Perhaps for the initial prototype we should
// require there to be a string field named "primaryKey".
func (t *table) getPrimaryKey(value *vdl.Value) *vdl.Value {
return nil
}