blob: a8579c8fb28634563b69663b1029acb6a1a7215d [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.
// Implements PersistentDataKey for each K<T> type, as described in types.vdl.
package sbmodel
import (
"v.io/x/sensorlog_lite/internal/sbmodel/keyutil"
)
// PersistentDataKey is a type encapsulating data from the row key of a
// top-level value type persisted to Syncbase.
type PersistentDataKey interface {
// Table returns the name of the Syncbase table for the data type.
Table() string
// Key returns the row key for the value.
Key() string
// Parse parses the row key for the value into self. Returns an error if key
// is malformed.
Parse(key string) error
}
// devicecfg : <DevId>
func (_ KDeviceCfg) Table() string { return "devicecfg" }
func (k *KDeviceCfg) Key() string { return keyutil.Join(k.DevId) }
func (k *KDeviceCfg) Parse(key string) error {
parts, err := keyutil.Split(key, 1)
if err != nil {
return err
}
k.DevId = parts[0]
return nil
}
// streamdef : <DevId>/<StreamId>
func (_ KStreamDef) Table() string { return "streamdef" }
func (k *KStreamDef) Key() string { return keyutil.Join(k.DevId, k.StreamId) }
func (k *KStreamDef) Parse(key string) error {
parts, err := keyutil.Split(key, 2)
if err != nil {
return err
}
k.DevId, k.StreamId = parts[0], parts[1]
return nil
}
// TableSpec defines a Syncbase table, encapsulating a key prototype and
// permissions.
type TableSpec struct {
Prototype PersistentDataKey
ReadOnly bool
}
// All top-level types persisted to master device Syncbase.
var MasterTables = []TableSpec{
{Prototype: &KDeviceCfg{}},
{Prototype: &KStreamDef{}},
}
// All top-level types persisted to measured Syncbase.
var MeasuredTables = []TableSpec{
{Prototype: &KStreamDef{}, ReadOnly: true},
}