github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6@v6.2.0/fake/internal.go (about)

     1  //go:build go1.18
     2  // +build go1.18
     3  
     4  // Copyright (c) Microsoft Corporation. All rights reserved.
     5  // Licensed under the MIT License. See License.txt in the project root for license information.
     6  // Code generated by Microsoft (R) AutoRest Code Generator. DO NOT EDIT.
     7  // Changes may cause incorrect behavior and will be lost if the code is regenerated.
     8  
     9  package fake
    10  
    11  import (
    12  	"github.com/Azure/azure-sdk-for-go/sdk/azcore/fake/server"
    13  	"io"
    14  	"net/http"
    15  	"reflect"
    16  	"sync"
    17  )
    18  
    19  type nonRetriableError struct {
    20  	error
    21  }
    22  
    23  func (nonRetriableError) NonRetriable() {
    24  	// marker method
    25  }
    26  
    27  func contains[T comparable](s []T, v T) bool {
    28  	for _, vv := range s {
    29  		if vv == v {
    30  			return true
    31  		}
    32  	}
    33  	return false
    34  }
    35  
    36  func getHeaderValue(h http.Header, k string) string {
    37  	v := h[k]
    38  	if len(v) == 0 {
    39  		return ""
    40  	}
    41  	return v[0]
    42  }
    43  
    44  func getOptional[T any](v T) *T {
    45  	if reflect.ValueOf(v).IsZero() {
    46  		return nil
    47  	}
    48  	return &v
    49  }
    50  
    51  func parseOptional[T any](v string, parse func(v string) (T, error)) (*T, error) {
    52  	if v == "" {
    53  		return nil, nil
    54  	}
    55  	t, err := parse(v)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	return &t, err
    60  }
    61  
    62  func readRequestBody(req *http.Request) ([]byte, error) {
    63  	if req.Body == nil {
    64  		return nil, nil
    65  	}
    66  	body, err := io.ReadAll(req.Body)
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  	req.Body.Close()
    71  	return body, nil
    72  }
    73  
    74  func newTracker[T any]() *tracker[T] {
    75  	return &tracker[T]{
    76  		items: map[string]*T{},
    77  	}
    78  }
    79  
    80  type tracker[T any] struct {
    81  	items map[string]*T
    82  	mu    sync.Mutex
    83  }
    84  
    85  func (p *tracker[T]) get(req *http.Request) *T {
    86  	p.mu.Lock()
    87  	defer p.mu.Unlock()
    88  	if item, ok := p.items[server.SanitizePagerPollerPath(req.URL.Path)]; ok {
    89  		return item
    90  	}
    91  	return nil
    92  }
    93  
    94  func (p *tracker[T]) add(req *http.Request, item *T) {
    95  	p.mu.Lock()
    96  	defer p.mu.Unlock()
    97  	p.items[server.SanitizePagerPollerPath(req.URL.Path)] = item
    98  }
    99  
   100  func (p *tracker[T]) remove(req *http.Request) {
   101  	p.mu.Lock()
   102  	defer p.mu.Unlock()
   103  	delete(p.items, server.SanitizePagerPollerPath(req.URL.Path))
   104  }