convert.go raw

   1  /*
   2  Package to provides helpers to ease working with pointer values of marshalled structures.
   3  */
   4  package to
   5  
   6  // Copyright 2017 Microsoft Corporation
   7  //
   8  //  Licensed under the Apache License, Version 2.0 (the "License");
   9  //  you may not use this file except in compliance with the License.
  10  //  You may obtain a copy of the License at
  11  //
  12  //      http://www.apache.org/licenses/LICENSE-2.0
  13  //
  14  //  Unless required by applicable law or agreed to in writing, software
  15  //  distributed under the License is distributed on an "AS IS" BASIS,
  16  //  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17  //  See the License for the specific language governing permissions and
  18  //  limitations under the License.
  19  
  20  // String returns a string value for the passed string pointer. It returns the empty string if the
  21  // pointer is nil.
  22  func String(s *string) string {
  23  	if s != nil {
  24  		return *s
  25  	}
  26  	return ""
  27  }
  28  
  29  // StringPtr returns a pointer to the passed string.
  30  func StringPtr(s string) *string {
  31  	return &s
  32  }
  33  
  34  // StringSlice returns a string slice value for the passed string slice pointer. It returns a nil
  35  // slice if the pointer is nil.
  36  func StringSlice(s *[]string) []string {
  37  	if s != nil {
  38  		return *s
  39  	}
  40  	return nil
  41  }
  42  
  43  // StringSlicePtr returns a pointer to the passed string slice.
  44  func StringSlicePtr(s []string) *[]string {
  45  	return &s
  46  }
  47  
  48  // StringMap returns a map of strings built from the map of string pointers. The empty string is
  49  // used for nil pointers.
  50  func StringMap(msp map[string]*string) map[string]string {
  51  	ms := make(map[string]string, len(msp))
  52  	for k, sp := range msp {
  53  		if sp != nil {
  54  			ms[k] = *sp
  55  		} else {
  56  			ms[k] = ""
  57  		}
  58  	}
  59  	return ms
  60  }
  61  
  62  // StringMapPtr returns a pointer to a map of string pointers built from the passed map of strings.
  63  func StringMapPtr(ms map[string]string) *map[string]*string {
  64  	msp := make(map[string]*string, len(ms))
  65  	for k, s := range ms {
  66  		msp[k] = StringPtr(s)
  67  	}
  68  	return &msp
  69  }
  70  
  71  // Bool returns a bool value for the passed bool pointer. It returns false if the pointer is nil.
  72  func Bool(b *bool) bool {
  73  	if b != nil {
  74  		return *b
  75  	}
  76  	return false
  77  }
  78  
  79  // BoolPtr returns a pointer to the passed bool.
  80  func BoolPtr(b bool) *bool {
  81  	return &b
  82  }
  83  
  84  // Int returns an int value for the passed int pointer. It returns 0 if the pointer is nil.
  85  func Int(i *int) int {
  86  	if i != nil {
  87  		return *i
  88  	}
  89  	return 0
  90  }
  91  
  92  // IntPtr returns a pointer to the passed int.
  93  func IntPtr(i int) *int {
  94  	return &i
  95  }
  96  
  97  // Int32 returns an int value for the passed int pointer. It returns 0 if the pointer is nil.
  98  func Int32(i *int32) int32 {
  99  	if i != nil {
 100  		return *i
 101  	}
 102  	return 0
 103  }
 104  
 105  // Int32Ptr returns a pointer to the passed int32.
 106  func Int32Ptr(i int32) *int32 {
 107  	return &i
 108  }
 109  
 110  // Int64 returns an int value for the passed int pointer. It returns 0 if the pointer is nil.
 111  func Int64(i *int64) int64 {
 112  	if i != nil {
 113  		return *i
 114  	}
 115  	return 0
 116  }
 117  
 118  // Int64Ptr returns a pointer to the passed int64.
 119  func Int64Ptr(i int64) *int64 {
 120  	return &i
 121  }
 122  
 123  // Float32 returns an int value for the passed int pointer. It returns 0.0 if the pointer is nil.
 124  func Float32(i *float32) float32 {
 125  	if i != nil {
 126  		return *i
 127  	}
 128  	return 0.0
 129  }
 130  
 131  // Float32Ptr returns a pointer to the passed float32.
 132  func Float32Ptr(i float32) *float32 {
 133  	return &i
 134  }
 135  
 136  // Float64 returns an int value for the passed int pointer. It returns 0.0 if the pointer is nil.
 137  func Float64(i *float64) float64 {
 138  	if i != nil {
 139  		return *i
 140  	}
 141  	return 0.0
 142  }
 143  
 144  // Float64Ptr returns a pointer to the passed float64.
 145  func Float64Ptr(i float64) *float64 {
 146  	return &i
 147  }
 148  
 149  // ByteSlicePtr returns a pointer to the passed byte slice.
 150  func ByteSlicePtr(b []byte) *[]byte {
 151  	return &b
 152  }
 153