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

package server

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

	// VDL user imports
	"v.io/v23/security/access"
)

// serviceData represents the persistent state of a Service.
type serviceData struct {
	Version uint64 // covers the fields below
	Perms   access.Permissions
}

func (serviceData) __VDLReflect(struct {
	Name string `vdl:"v.io/x/ref/services/syncbase/server.serviceData"`
}) {
}

// appData represents the persistent state of an App.
type appData struct {
	Name    string
	Version uint64 // covers the fields below
	Perms   access.Permissions
}

func (appData) __VDLReflect(struct {
	Name string `vdl:"v.io/x/ref/services/syncbase/server.appData"`
}) {
}

// dbInfo contains information about one database for an App.
// TODO(sadovsky): Track NoSQL vs. SQL.
type dbInfo struct {
	Name        string
	Initialized bool
	Deleted     bool
	// Select fields from nosql.DatabaseOptions, needed in order to open storage
	// engine on restart.
	RootDir string // interpreted by storage engine
	Engine  string // name of storage engine, e.g. "leveldb"
}

func (dbInfo) __VDLReflect(struct {
	Name string `vdl:"v.io/x/ref/services/syncbase/server.dbInfo"`
}) {
}

func init() {
	vdl.Register((*serviceData)(nil))
	vdl.Register((*appData)(nil))
	vdl.Register((*dbInfo)(nil))
}
