blob: c8fda62f8dbe0c46fabb843fe06eb1211a5a1619 [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 defines the wire API for a structured store that supports
// peer-to-peer synchronization.
//
// TODO(sadovsky): Write a detailed package description.
package syncbase
import (
"v.io/v23/security/access"
"v.io/v23/services/permissions"
)
// NOTE(sadovsky): Various methods below may end up needing additional options.
// Service represents a Vanadium Syncbase service.
// Service.Glob operates over App names.
type Service interface {
// SetPermissions and GetPermissions are included from the Object interface.
permissions.Object
}
// TODO(sadovsky): We may want to allow clients to rename their Apps and
// Databases (and Tables, via schema updates). Internally, this means we'd need
// to add a layer of indirection, where client-supplied names get translated
// into opaque internal identifiers.
// App represents the data for a specific app instance (possibly a combination
// of user, device, and app).
// App.Glob operates over Database names.
type App interface {
// Create creates this App.
// If perms is nil, we inherit (copy) the Service perms.
// Create requires the caller to have Write permission at the Service.
Create(perms access.Permissions) error {access.Write}
// Delete deletes this App.
Delete() error {access.Write}
// SetPermissions and GetPermissions are included from the Object interface.
permissions.Object
}
error (
InvalidName(name string) {"en": "invalid name: {name}"}
)