// 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.

// This file was auto-generated by the vanadium vdl tool.
// Source: types.vdl

// Syncbase data model for Sensor Log.
//
// Every type <T> stored in Syncbase is defined as a pair of types, K<T> and
// V<T>, representing data stored in the key and value, respectively, in a
// single table. K<T> types satisfy the PersistentDataKey interface, supporting
// conversion to and from the row key.
package sbmodel

import (
	// VDL system imports
	"v.io/v23/vdl"
)

// devicecfg : <DevId>
// Measuring device handle. Master only.
type VDeviceCfg struct {
	// Human-readable, not necessarily unique description of the device.
	Desc string
	// Syncbase instance publishing the syncgroup created by the device.
	SgPublishSb string
}

func (VDeviceCfg) __VDLReflect(struct {
	Name string `vdl:"v.io/x/sensorlog_lite/internal/sbmodel.VDeviceCfg"`
}) {
}

type KDeviceCfg struct {
	DevId string
}

func (KDeviceCfg) __VDLReflect(struct {
	Name string `vdl:"v.io/x/sensorlog_lite/internal/sbmodel.KDeviceCfg"`
}) {
}

// streamdef : <DevId>/<StreamId>
// Configures a stream of data to be measured.
// TODO(ivanpi): Add actual sampling script and parameters.
type VStreamDef struct {
	// Human-readable, not necessarily unique description of the stream.
	Desc string
	// Flag to start and stop sampling.
	Enabled bool
}

func (VStreamDef) __VDLReflect(struct {
	Name string `vdl:"v.io/x/sensorlog_lite/internal/sbmodel.VStreamDef"`
}) {
}

type KStreamDef struct {
	DevId    string
	StreamId string
}

func (KStreamDef) __VDLReflect(struct {
	Name string `vdl:"v.io/x/sensorlog_lite/internal/sbmodel.KStreamDef"`
}) {
}

func init() {
	vdl.Register((*VDeviceCfg)(nil))
	vdl.Register((*KDeviceCfg)(nil))
	vdl.Register((*VStreamDef)(nil))
	vdl.Register((*KStreamDef)(nil))
}
