func (client *ClientImpl) GetStorageKey(ctx context.Context, args GetStorageKeyArgs) (*GraphStorageKeyResult, error) {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	locationId, _ := uuid.Parse("eb85f8cc-f0f6-4264-a5b1-ffe2e4d4801f")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphStorageKeyResult
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
[Preview API] Resolve a descriptor to a storage key.
package graph
import (
	"bytes"
	"context"
	"encoding/json"
	"github.com/google/uuid"
	"github.com/microsoft/azure-devops-go-api/azuredevops"
	"github.com/microsoft/azure-devops-go-api/azuredevops/profile"
	"github.com/microsoft/azure-devops-go-api/azuredevops/webapi"
	"net/http"
	"net/url"
	"strconv"
	"strings"
)
var ResourceAreaId, _ = uuid.Parse("bb1e7ec9-e901-4b68-999a-de7012b920f8")
type Client interface {
	AddMembership(context.Context, AddMembershipArgs) (*GraphMembership, error)
	CheckMembershipExistence(context.Context, CheckMembershipExistenceArgs) error
	CreateGroup(context.Context, CreateGroupArgs) (*GraphGroup, error)
	CreateUser(context.Context, CreateUserArgs) (*GraphUser, error)
	DeleteAvatar(context.Context, DeleteAvatarArgs) error
	DeleteGroup(context.Context, DeleteGroupArgs) error
	DeleteUser(context.Context, DeleteUserArgs) error
	GetAvatar(context.Context, GetAvatarArgs) (*profile.Avatar, error)
	GetDescriptor(context.Context, GetDescriptorArgs) (*GraphDescriptorResult, error)
	GetGroup(context.Context, GetGroupArgs) (*GraphGroup, error)
	GetMembership(context.Context, GetMembershipArgs) (*GraphMembership, error)
	GetMembershipState(context.Context, GetMembershipStateArgs) (*GraphMembershipState, error)
	GetProviderInfo(context.Context, GetProviderInfoArgs) (*GraphProviderInfo, error)
	GetStorageKey(context.Context, GetStorageKeyArgs) (*GraphStorageKeyResult, error)
	GetUser(context.Context, GetUserArgs) (*GraphUser, error)
	ListGroups(context.Context, ListGroupsArgs) (*PagedGraphGroups, error)
	ListMemberships(context.Context, ListMembershipsArgs) (*[]GraphMembership, error)
	ListUsers(context.Context, ListUsersArgs) (*PagedGraphUsers, error)
	LookupSubjects(context.Context, LookupSubjectsArgs) (*map[string]GraphSubject, error)
	RemoveMembership(context.Context, RemoveMembershipArgs) error
	RequestAccess(context.Context, RequestAccessArgs) error
	SetAvatar(context.Context, SetAvatarArgs) error
	UpdateGroup(context.Context, UpdateGroupArgs) (*GraphGroup, error)
	UpdateUser(context.Context, UpdateUserArgs) (*GraphUser, error)
}
type ClientImpl struct {
	Client azuredevops.Client
}
func NewClient(ctx context.Context, connection *azuredevops.Connection) (Client, error) {
	client, err := connection.GetClientByResourceAreaId(ctx, ResourceAreaId)
	if err != nil {
		return nil, err
	}
	return &ClientImpl{
		Client: *client,
	}, nil
}
func (client *ClientImpl) AddMembership(ctx context.Context, args AddMembershipArgs) (*GraphMembership, error) {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	if args.ContainerDescriptor == nil || *args.ContainerDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerDescriptor"}
	}
	routeValues["containerDescriptor"] = *args.ContainerDescriptor
	locationId, _ := uuid.Parse("3fd2e6ca-fb30-443a-b579-95b19ed0934c")
	resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphMembership
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type AddMembershipArgs struct {
	SubjectDescriptor *string
	ContainerDescriptor *string
}
func (client *ClientImpl) CheckMembershipExistence(ctx context.Context, args CheckMembershipExistenceArgs) error {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	if args.ContainerDescriptor == nil || *args.ContainerDescriptor == "" {
		return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerDescriptor"}
	}
	routeValues["containerDescriptor"] = *args.ContainerDescriptor
	locationId, _ := uuid.Parse("3fd2e6ca-fb30-443a-b579-95b19ed0934c")
	_, err := client.Client.Send(ctx, http.MethodHead, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return err
	}
	return nil
}
type CheckMembershipExistenceArgs struct {
	SubjectDescriptor *string
	ContainerDescriptor *string
}
func (client *ClientImpl) CreateGroup(ctx context.Context, args CreateGroupArgs) (*GraphGroup, error) {
	if args.CreationContext == nil {
		return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.CreationContext"}
	}
	queryParams := url.Values{}
	if args.ScopeDescriptor != nil {
		queryParams.Add("scopeDescriptor", *args.ScopeDescriptor)
	}
	if args.GroupDescriptors != nil {
		listAsString := strings.Join((*args.GroupDescriptors)[:], ",")
		queryParams.Add("groupDescriptors", listAsString)
	}
	body, marshalErr := json.Marshal(*args.CreationContext)
	if marshalErr != nil {
		return nil, marshalErr
	}
	locationId, _ := uuid.Parse("ebbe6af8-0b91-4c13-8cf1-777c14858188")
	resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1-preview.1", nil, queryParams, bytes.NewReader(body), "application/json", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphGroup
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type CreateGroupArgs struct {
	CreationContext *GraphGroupCreationContext
	ScopeDescriptor *string
	GroupDescriptors *[]string
}
func (client *ClientImpl) CreateUser(ctx context.Context, args CreateUserArgs) (*GraphUser, error) {
	if args.CreationContext == nil {
		return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.CreationContext"}
	}
	queryParams := url.Values{}
	if args.GroupDescriptors != nil {
		listAsString := strings.Join((*args.GroupDescriptors)[:], ",")
		queryParams.Add("groupDescriptors", listAsString)
	}
	body, marshalErr := json.Marshal(*args.CreationContext)
	if marshalErr != nil {
		return nil, marshalErr
	}
	locationId, _ := uuid.Parse("005e26ec-6b77-4e4f-a986-b3827bf241f5")
	resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1-preview.1", nil, queryParams, bytes.NewReader(body), "application/json", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphUser
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type CreateUserArgs struct {
	CreationContext *GraphUserCreationContext
	GroupDescriptors *[]string
}
func (client *ClientImpl) DeleteAvatar(ctx context.Context, args DeleteAvatarArgs) error {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	locationId, _ := uuid.Parse("801eaf9c-0585-4be8-9cdb-b0efa074de91")
	_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return err
	}
	return nil
}
type DeleteAvatarArgs struct {
	SubjectDescriptor *string
}
func (client *ClientImpl) DeleteGroup(ctx context.Context, args DeleteGroupArgs) error {
	routeValues := make(map[string]string)
	if args.GroupDescriptor == nil || *args.GroupDescriptor == "" {
		return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.GroupDescriptor"}
	}
	routeValues["groupDescriptor"] = *args.GroupDescriptor
	locationId, _ := uuid.Parse("ebbe6af8-0b91-4c13-8cf1-777c14858188")
	_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return err
	}
	return nil
}
type DeleteGroupArgs struct {
	GroupDescriptor *string
}
func (client *ClientImpl) DeleteUser(ctx context.Context, args DeleteUserArgs) error {
	routeValues := make(map[string]string)
	if args.UserDescriptor == nil || *args.UserDescriptor == "" {
		return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.UserDescriptor"}
	}
	routeValues["userDescriptor"] = *args.UserDescriptor
	locationId, _ := uuid.Parse("005e26ec-6b77-4e4f-a986-b3827bf241f5")
	_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return err
	}
	return nil
}
type DeleteUserArgs struct {
	UserDescriptor *string
}
func (client *ClientImpl) GetAvatar(ctx context.Context, args GetAvatarArgs) (*profile.Avatar, error) {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	queryParams := url.Values{}
	if args.Size != nil {
		queryParams.Add("size", string(*args.Size))
	}
	if args.Format != nil {
		queryParams.Add("format", *args.Format)
	}
	locationId, _ := uuid.Parse("801eaf9c-0585-4be8-9cdb-b0efa074de91")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue profile.Avatar
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type GetAvatarArgs struct {
	SubjectDescriptor *string
	Size *profile.AvatarSize
	Format *string
}
func (client *ClientImpl) GetDescriptor(ctx context.Context, args GetDescriptorArgs) (*GraphDescriptorResult, error) {
	routeValues := make(map[string]string)
	if args.StorageKey == nil {
		return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.StorageKey"}
	}
	routeValues["storageKey"] = (*args.StorageKey).String()
	locationId, _ := uuid.Parse("048aee0a-7072-4cde-ab73-7af77b1e0b4e")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphDescriptorResult
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type GetDescriptorArgs struct {
	StorageKey *uuid.UUID
}
func (client *ClientImpl) GetGroup(ctx context.Context, args GetGroupArgs) (*GraphGroup, error) {
	routeValues := make(map[string]string)
	if args.GroupDescriptor == nil || *args.GroupDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.GroupDescriptor"}
	}
	routeValues["groupDescriptor"] = *args.GroupDescriptor
	locationId, _ := uuid.Parse("ebbe6af8-0b91-4c13-8cf1-777c14858188")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphGroup
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type GetGroupArgs struct {
	GroupDescriptor *string
}
func (client *ClientImpl) GetMembership(ctx context.Context, args GetMembershipArgs) (*GraphMembership, error) {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	if args.ContainerDescriptor == nil || *args.ContainerDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerDescriptor"}
	}
	routeValues["containerDescriptor"] = *args.ContainerDescriptor
	locationId, _ := uuid.Parse("3fd2e6ca-fb30-443a-b579-95b19ed0934c")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphMembership
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type GetMembershipArgs struct {
	SubjectDescriptor *string
	ContainerDescriptor *string
}
func (client *ClientImpl) GetMembershipState(ctx context.Context, args GetMembershipStateArgs) (*GraphMembershipState, error) {
	routeValues := make(map[string]string)
	if args.SubjectDescriptor == nil || *args.SubjectDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.SubjectDescriptor"}
	}
	routeValues["subjectDescriptor"] = *args.SubjectDescriptor
	locationId, _ := uuid.Parse("1ffe5c94-1144-4191-907b-d0211cad36a8")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphMembershipState
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type GetMembershipStateArgs struct {
	SubjectDescriptor *string
}
func (client *ClientImpl) GetProviderInfo(ctx context.Context, args GetProviderInfoArgs) (*GraphProviderInfo, error) {
	routeValues := make(map[string]string)
	if args.UserDescriptor == nil || *args.UserDescriptor == "" {
		return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.UserDescriptor"}
	}
	routeValues["userDescriptor"] = *args.UserDescriptor
	locationId, _ := uuid.Parse("1e377995-6fa2-4588-bd64-930186abdcfa")
	resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
	if err != nil {
		return nil, err
	}
	var responseValue GraphProviderInfo
	err = client.Client.UnmarshalBody(resp, &responseValue)
	return &responseValue, err
}
type GetProviderInfoArgs struct {
	UserDescriptor *string
}