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

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

	// Exists returns true only if this App exists. Insufficient permissions
	// cause Exists to return false instead of an error.
	Exists() (bool | error) {access.Read}

	// SetPermissions and GetPermissions are included from the Object interface.
	permissions.Object
}

error (
	InvalidName(name string) {"en": "invalid name: {name}"}
)
