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 }