// 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/syncbase/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/syncbase/x/ref/services/syncbase/server.appData"`
}) {
}

// dbInfo contains information about one database for an App.
// TODO(sadovsky): Track NoSQL vs. SQL, storage engine config, etc.
type dbInfo struct {
	Name        string
	Initialized bool
	Deleted     bool
}

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

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