// 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: config.vdl

package internal

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

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

// Config contains the attributes of the role, and the list of members who have
// access to it.
type Config struct {
	// List of role objects, relative to this role, from which to import
	// the set of members. File path notation like "." and ".." may be used.
	// The set of members who have access to this role is the union of this
	// role's members and those of all the imported roles.
	ImportMembers []string
	// Blessings that match at least one of the patterns in this set are
	// allowed to act on behalf of the role.
	Members []security.BlessingPattern
	// Indicates that the blessing name of the caller should be appended to
	// the role blessing name.
	Extend bool
	// If Audit is true, each use of the role blessing will be reported to
	// an auditing service and will be usable only if the report was
	// successful.
	Audit bool
	// The amount of time for which the role blessing will be valid. It is a
	// string representation of a time.Duration, e.g. "24h". An empty string
	// indicates that the role blessing will not expire.
	Expiry string
	// The blessings issued for this role will only be valid for
	// communicating with peers that match at least one of these patterns.
	// If the list is empty, all peers are allowed.
	Peers []security.BlessingPattern
}

func (Config) __VDLReflect(struct {
	Name string "v.io/x/ref/services/role/roled/internal.Config"
}) {
}

func init() {
	vdl.Register((*Config)(nil))
}
