package authorization

// Copyright (c) Microsoft and contributors.  All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// 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/Azure/go-autorest/autorest/to"
	"net/http"
)

// ClassicAdministrator is classic Administrators
type ClassicAdministrator struct {
	ID         *string                         `json:"id,omitempty"`
	Name       *string                         `json:"name,omitempty"`
	Type       *string                         `json:"type,omitempty"`
	Properties *ClassicAdministratorProperties `json:"properties,omitempty"`
}

// ClassicAdministratorListResult is classicAdministrator list result information.
type ClassicAdministratorListResult struct {
	autorest.Response `json:"-"`
	Value             *[]ClassicAdministrator `json:"value,omitempty"`
	NextLink          *string                 `json:"nextLink,omitempty"`
}

// ClassicAdministratorListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client ClassicAdministratorListResult) ClassicAdministratorListResultPreparer() (*http.Request, error) {
	if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
		return nil, nil
	}
	return autorest.Prepare(&http.Request{},
		autorest.AsJSON(),
		autorest.AsGet(),
		autorest.WithBaseURL(to.String(client.NextLink)))
}

// ClassicAdministratorProperties is classic Administrator properties.
type ClassicAdministratorProperties struct {
	EmailAddress *string `json:"emailAddress,omitempty"`
	Role         *string `json:"role,omitempty"`
}

// Permission is role definition permissions.
type Permission struct {
	Actions    *[]string `json:"actions,omitempty"`
	NotActions *[]string `json:"notActions,omitempty"`
}

// PermissionGetResult is permissions information.
type PermissionGetResult struct {
	autorest.Response `json:"-"`
	Value             *[]Permission `json:"value,omitempty"`
	NextLink          *string       `json:"nextLink,omitempty"`
}

// PermissionGetResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client PermissionGetResult) PermissionGetResultPreparer() (*http.Request, error) {
	if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
		return nil, nil
	}
	return autorest.Prepare(&http.Request{},
		autorest.AsJSON(),
		autorest.AsGet(),
		autorest.WithBaseURL(to.String(client.NextLink)))
}

// ProviderOperation is operation
type ProviderOperation struct {
	Name        *string                 `json:"name,omitempty"`
	DisplayName *string                 `json:"displayName,omitempty"`
	Description *string                 `json:"description,omitempty"`
	Origin      *string                 `json:"origin,omitempty"`
	Properties  *map[string]interface{} `json:"properties,omitempty"`
}

// ProviderOperationsMetadata is provider Operations metadata
type ProviderOperationsMetadata struct {
	autorest.Response `json:"-"`
	ID                *string              `json:"id,omitempty"`
	Name              *string              `json:"name,omitempty"`
	Type              *string              `json:"type,omitempty"`
	DisplayName       *string              `json:"displayName,omitempty"`
	ResourceTypes     *[]ResourceType      `json:"resourceTypes,omitempty"`
	Operations        *[]ProviderOperation `json:"operations,omitempty"`
}

// ProviderOperationsMetadataListResult is provider operations metadata list
type ProviderOperationsMetadataListResult struct {
	autorest.Response `json:"-"`
	Value             *[]ProviderOperationsMetadata `json:"value,omitempty"`
	NextLink          *string                       `json:"nextLink,omitempty"`
}

// ProviderOperationsMetadataListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client ProviderOperationsMetadataListResult) ProviderOperationsMetadataListResultPreparer() (*http.Request, error) {
	if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
		return nil, nil
	}
	return autorest.Prepare(&http.Request{},
		autorest.AsJSON(),
		autorest.AsGet(),
		autorest.WithBaseURL(to.String(client.NextLink)))
}

// ResourceType is resource Type
type ResourceType struct {
	Name        *string              `json:"name,omitempty"`
	DisplayName *string              `json:"displayName,omitempty"`
	Operations  *[]ProviderOperation `json:"operations,omitempty"`
}

// RoleAssignment is role Assignments
type RoleAssignment struct {
	autorest.Response `json:"-"`
	ID                *string                            `json:"id,omitempty"`
	Name              *string                            `json:"name,omitempty"`
	Type              *string                            `json:"type,omitempty"`
	Properties        *RoleAssignmentPropertiesWithScope `json:"properties,omitempty"`
}

// RoleAssignmentCreateParameters is role assignment create parameters.
type RoleAssignmentCreateParameters struct {
	Properties *RoleAssignmentProperties `json:"properties,omitempty"`
}

// RoleAssignmentFilter is role Assignments filter
type RoleAssignmentFilter struct {
	PrincipalID *string `json:"principalId,omitempty"`
}

// RoleAssignmentListResult is role assignment list operation result.
type RoleAssignmentListResult struct {
	autorest.Response `json:"-"`
	Value             *[]RoleAssignment `json:"value,omitempty"`
	NextLink          *string           `json:"nextLink,omitempty"`
}

// RoleAssignmentListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client RoleAssignmentListResult) RoleAssignmentListResultPreparer() (*http.Request, error) {
	if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
		return nil, nil
	}
	return autorest.Prepare(&http.Request{},
		autorest.AsJSON(),
		autorest.AsGet(),
		autorest.WithBaseURL(to.String(client.NextLink)))
}

// RoleAssignmentProperties is role assignment properties.
type RoleAssignmentProperties struct {
	RoleDefinitionID *string `json:"roleDefinitionId,omitempty"`
	PrincipalID      *string `json:"principalId,omitempty"`
}

// RoleAssignmentPropertiesWithScope is role assignment properties with scope.
type RoleAssignmentPropertiesWithScope struct {
	Scope            *string `json:"scope,omitempty"`
	RoleDefinitionID *string `json:"roleDefinitionId,omitempty"`
	PrincipalID      *string `json:"principalId,omitempty"`
}

// RoleDefinition is role definition.
type RoleDefinition struct {
	autorest.Response `json:"-"`
	ID                *string                   `json:"id,omitempty"`
	Name              *string                   `json:"name,omitempty"`
	Type              *string                   `json:"type,omitempty"`
	Properties        *RoleDefinitionProperties `json:"properties,omitempty"`
}

// RoleDefinitionFilter is role Definitions filter
type RoleDefinitionFilter struct {
	RoleName *string `json:"roleName,omitempty"`
}

// RoleDefinitionListResult is role definition list operation result.
type RoleDefinitionListResult struct {
	autorest.Response `json:"-"`
	Value             *[]RoleDefinition `json:"value,omitempty"`
	NextLink          *string           `json:"nextLink,omitempty"`
}

// RoleDefinitionListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client RoleDefinitionListResult) RoleDefinitionListResultPreparer() (*http.Request, error) {
	if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
		return nil, nil
	}
	return autorest.Prepare(&http.Request{},
		autorest.AsJSON(),
		autorest.AsGet(),
		autorest.WithBaseURL(to.String(client.NextLink)))
}

// RoleDefinitionProperties is role definition properties.
type RoleDefinitionProperties struct {
	RoleName         *string       `json:"roleName,omitempty"`
	Description      *string       `json:"description,omitempty"`
	Type             *string       `json:"type,omitempty"`
	Permissions      *[]Permission `json:"permissions,omitempty"`
	AssignableScopes *[]string     `json:"assignableScopes,omitempty"`
}
