package synapse

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.

import (
	"github.com/Azure/go-autorest/autorest"
	"github.com/gofrs/uuid"
)

// The package's fully qualified name.
const fqdn = "home/runner/work/kermit/kermit/sdk/synapse/2020-08-01-preview/synapse"

// CheckAccessDecision check access response details
type CheckAccessDecision struct {
	// AccessDecision - Access Decision.
	AccessDecision *string `json:"accessDecision,omitempty"`
	// ActionID - Action Id.
	ActionID       *string                `json:"actionId,omitempty"`
	RoleAssignment *RoleAssignmentDetails `json:"roleAssignment,omitempty"`
}

// CheckPrincipalAccessRequest check access request details
type CheckPrincipalAccessRequest struct {
	// Subject - Subject details
	Subject *SubjectInfo `json:"subject,omitempty"`
	// Actions - List of actions.
	Actions *[]RequiredAction `json:"actions,omitempty"`
	// Scope - Scope at which the check access is done.
	Scope *string `json:"scope,omitempty"`
}

// CheckPrincipalAccessResponse check access response details
type CheckPrincipalAccessResponse struct {
	autorest.Response `json:"-"`
	// AccessDecisions - To check if the current user, group, or service principal has permission to read artifacts in the specified workspace.
	AccessDecisions *[]CheckAccessDecision `json:"AccessDecisions,omitempty"`
}

// ErrorContract contains details when the response code indicates an error.
type ErrorContract struct {
	// Error - The error details.
	Error *ErrorResponse `json:"error,omitempty"`
}

// ErrorDetail ...
type ErrorDetail struct {
	Code    *string `json:"code,omitempty"`
	Message *string `json:"message,omitempty"`
	Target  *string `json:"target,omitempty"`
}

// ErrorResponse ...
type ErrorResponse struct {
	Code    *string        `json:"code,omitempty"`
	Message *string        `json:"message,omitempty"`
	Target  *string        `json:"target,omitempty"`
	Details *[]ErrorDetail `json:"details,omitempty"`
}

// ListRoleDefinition ...
type ListRoleDefinition struct {
	autorest.Response `json:"-"`
	Value             *[]RoleDefinition `json:"value,omitempty"`
}

// ListString ...
type ListString struct {
	autorest.Response `json:"-"`
	Value             *[]string `json:"value,omitempty"`
}

// RbacPermission synapse role definition details
type RbacPermission struct {
	// Actions - List of actions
	Actions *[]string `json:"actions,omitempty"`
	// NotActions - List of Not actions
	NotActions *[]string `json:"notActions,omitempty"`
	// DataActions - List of data actions
	DataActions *[]string `json:"dataActions,omitempty"`
	// NotDataActions - List of Not data actions
	NotDataActions *[]string `json:"notDataActions,omitempty"`
}

// RequiredAction action Info
type RequiredAction struct {
	// ID - Action Id.
	ID *string `json:"id,omitempty"`
	// IsDataAction - Is a data action or not.
	IsDataAction *bool `json:"isDataAction,omitempty"`
}

// RoleAssignmentDetails role Assignment response details
type RoleAssignmentDetails struct {
	autorest.Response `json:"-"`
	// ID - Role Assignment ID
	ID *string `json:"id,omitempty"`
	// RoleDefinitionID - Role ID of the Synapse Built-In Role
	RoleDefinitionID *uuid.UUID `json:"roleDefinitionId,omitempty"`
	// PrincipalID - Object ID of the AAD principal or security-group
	PrincipalID *uuid.UUID `json:"principalId,omitempty"`
	// Scope - Scope at the role assignment is created
	Scope *string `json:"scope,omitempty"`
	// PrincipalType - Type of the principal Id: User, Group or ServicePrincipal
	PrincipalType *string `json:"principalType,omitempty"`
}

// RoleAssignmentDetailsList role Assignment response details
type RoleAssignmentDetailsList struct {
	autorest.Response `json:"-"`
	// Count - Number of role assignments
	Count *int32 `json:"count,omitempty"`
	// Value - A list of role assignments
	Value *[]RoleAssignmentDetails `json:"value,omitempty"`
}

// RoleAssignmentRequest role Assignment request details
type RoleAssignmentRequest struct {
	// RoleID - Role ID of the Synapse Built-In Role
	RoleID *uuid.UUID `json:"roleId,omitempty"`
	// PrincipalID - Object ID of the AAD principal or security-group
	PrincipalID *uuid.UUID `json:"principalId,omitempty"`
	// Scope - Scope at which the role assignment is created
	Scope *string `json:"scope,omitempty"`
	// PrincipalType - Type of the principal Id: User, Group or ServicePrincipal
	PrincipalType *string `json:"principalType,omitempty"`
}

// RoleDefinition synapse role definition details
type RoleDefinition struct {
	autorest.Response `json:"-"`
	// ID - Role Definition ID
	ID *uuid.UUID `json:"id,omitempty"`
	// Name - Name of the Synapse role
	Name *string `json:"name,omitempty"`
	// IsBuiltIn - Is a built-in role or not
	IsBuiltIn *bool `json:"isBuiltIn,omitempty"`
	// Description - Description for the Synapse role
	Description *string `json:"description,omitempty"`
	// Permissions - Permissions for the Synapse role
	Permissions *[]RbacPermission `json:"permissions,omitempty"`
	// Scopes - Allowed scopes for the Synapse role
	Scopes *[]string `json:"scopes,omitempty"`
	// AvailabilityStatus - Availability of the Synapse role
	AvailabilityStatus *string `json:"availabilityStatus,omitempty"`
}

// SubjectInfo subject details
type SubjectInfo struct {
	// PrincipalID - Principal Id
	PrincipalID *uuid.UUID `json:"principalId,omitempty"`
	// GroupIds - List of group Ids that the principalId is part of.
	GroupIds *[]uuid.UUID `json:"groupIds,omitempty"`
}
