1package aws
2
3import "time"
4
5// String returns a pointer to the string value passed in.
6func String(v string) *string {
7	return &v
8}
9
10// StringValue returns the value of the string pointer passed in or
11// "" if the pointer is nil.
12func StringValue(v *string) string {
13	if v != nil {
14		return *v
15	}
16	return ""
17}
18
19// StringSlice converts a slice of string values into a slice of
20// string pointers
21func StringSlice(src []string) []*string {
22	dst := make([]*string, len(src))
23	for i := 0; i < len(src); i++ {
24		dst[i] = &(src[i])
25	}
26	return dst
27}
28
29// StringValueSlice converts a slice of string pointers into a slice of
30// string values
31func StringValueSlice(src []*string) []string {
32	dst := make([]string, len(src))
33	for i := 0; i < len(src); i++ {
34		if src[i] != nil {
35			dst[i] = *(src[i])
36		}
37	}
38	return dst
39}
40
41// StringMap converts a string map of string values into a string
42// map of string pointers
43func StringMap(src map[string]string) map[string]*string {
44	dst := make(map[string]*string)
45	for k, val := range src {
46		v := val
47		dst[k] = &v
48	}
49	return dst
50}
51
52// StringValueMap converts a string map of string pointers into a string
53// map of string values
54func StringValueMap(src map[string]*string) map[string]string {
55	dst := make(map[string]string)
56	for k, val := range src {
57		if val != nil {
58			dst[k] = *val
59		}
60	}
61	return dst
62}
63
64// Bool returns a pointer to the bool value passed in.
65func Bool(v bool) *bool {
66	return &v
67}
68
69// BoolValue returns the value of the bool pointer passed in or
70// false if the pointer is nil.
71func BoolValue(v *bool) bool {
72	if v != nil {
73		return *v
74	}
75	return false
76}
77
78// BoolSlice converts a slice of bool values into a slice of
79// bool pointers
80func BoolSlice(src []bool) []*bool {
81	dst := make([]*bool, len(src))
82	for i := 0; i < len(src); i++ {
83		dst[i] = &(src[i])
84	}
85	return dst
86}
87
88// BoolValueSlice converts a slice of bool pointers into a slice of
89// bool values
90func BoolValueSlice(src []*bool) []bool {
91	dst := make([]bool, len(src))
92	for i := 0; i < len(src); i++ {
93		if src[i] != nil {
94			dst[i] = *(src[i])
95		}
96	}
97	return dst
98}
99
100// BoolMap converts a string map of bool values into a string
101// map of bool pointers
102func BoolMap(src map[string]bool) map[string]*bool {
103	dst := make(map[string]*bool)
104	for k, val := range src {
105		v := val
106		dst[k] = &v
107	}
108	return dst
109}
110
111// BoolValueMap converts a string map of bool pointers into a string
112// map of bool values
113func BoolValueMap(src map[string]*bool) map[string]bool {
114	dst := make(map[string]bool)
115	for k, val := range src {
116		if val != nil {
117			dst[k] = *val
118		}
119	}
120	return dst
121}
122
123// Int returns a pointer to the int value passed in.
124func Int(v int) *int {
125	return &v
126}
127
128// IntValue returns the value of the int pointer passed in or
129// 0 if the pointer is nil.
130func IntValue(v *int) int {
131	if v != nil {
132		return *v
133	}
134	return 0
135}
136
137// IntSlice converts a slice of int values into a slice of
138// int pointers
139func IntSlice(src []int) []*int {
140	dst := make([]*int, len(src))
141	for i := 0; i < len(src); i++ {
142		dst[i] = &(src[i])
143	}
144	return dst
145}
146
147// IntValueSlice converts a slice of int pointers into a slice of
148// int values
149func IntValueSlice(src []*int) []int {
150	dst := make([]int, len(src))
151	for i := 0; i < len(src); i++ {
152		if src[i] != nil {
153			dst[i] = *(src[i])
154		}
155	}
156	return dst
157}
158
159// IntMap converts a string map of int values into a string
160// map of int pointers
161func IntMap(src map[string]int) map[string]*int {
162	dst := make(map[string]*int)
163	for k, val := range src {
164		v := val
165		dst[k] = &v
166	}
167	return dst
168}
169
170// IntValueMap converts a string map of int pointers into a string
171// map of int values
172func IntValueMap(src map[string]*int) map[string]int {
173	dst := make(map[string]int)
174	for k, val := range src {
175		if val != nil {
176			dst[k] = *val
177		}
178	}
179	return dst
180}
181
182// Uint returns a pointer to the uint value passed in.
183func Uint(v uint) *uint {
184	return &v
185}
186
187// UintValue returns the value of the uint pointer passed in or
188// 0 if the pointer is nil.
189func UintValue(v *uint) uint {
190	if v != nil {
191		return *v
192	}
193	return 0
194}
195
196// UintSlice converts a slice of uint values uinto a slice of
197// uint pointers
198func UintSlice(src []uint) []*uint {
199	dst := make([]*uint, len(src))
200	for i := 0; i < len(src); i++ {
201		dst[i] = &(src[i])
202	}
203	return dst
204}
205
206// UintValueSlice converts a slice of uint pointers uinto a slice of
207// uint values
208func UintValueSlice(src []*uint) []uint {
209	dst := make([]uint, len(src))
210	for i := 0; i < len(src); i++ {
211		if src[i] != nil {
212			dst[i] = *(src[i])
213		}
214	}
215	return dst
216}
217
218// UintMap converts a string map of uint values uinto a string
219// map of uint pointers
220func UintMap(src map[string]uint) map[string]*uint {
221	dst := make(map[string]*uint)
222	for k, val := range src {
223		v := val
224		dst[k] = &v
225	}
226	return dst
227}
228
229// UintValueMap converts a string map of uint pointers uinto a string
230// map of uint values
231func UintValueMap(src map[string]*uint) map[string]uint {
232	dst := make(map[string]uint)
233	for k, val := range src {
234		if val != nil {
235			dst[k] = *val
236		}
237	}
238	return dst
239}
240
241// Int8 returns a pointer to the int8 value passed in.
242func Int8(v int8) *int8 {
243	return &v
244}
245
246// Int8Value returns the value of the int8 pointer passed in or
247// 0 if the pointer is nil.
248func Int8Value(v *int8) int8 {
249	if v != nil {
250		return *v
251	}
252	return 0
253}
254
255// Int8Slice converts a slice of int8 values into a slice of
256// int8 pointers
257func Int8Slice(src []int8) []*int8 {
258	dst := make([]*int8, len(src))
259	for i := 0; i < len(src); i++ {
260		dst[i] = &(src[i])
261	}
262	return dst
263}
264
265// Int8ValueSlice converts a slice of int8 pointers into a slice of
266// int8 values
267func Int8ValueSlice(src []*int8) []int8 {
268	dst := make([]int8, len(src))
269	for i := 0; i < len(src); i++ {
270		if src[i] != nil {
271			dst[i] = *(src[i])
272		}
273	}
274	return dst
275}
276
277// Int8Map converts a string map of int8 values into a string
278// map of int8 pointers
279func Int8Map(src map[string]int8) map[string]*int8 {
280	dst := make(map[string]*int8)
281	for k, val := range src {
282		v := val
283		dst[k] = &v
284	}
285	return dst
286}
287
288// Int8ValueMap converts a string map of int8 pointers into a string
289// map of int8 values
290func Int8ValueMap(src map[string]*int8) map[string]int8 {
291	dst := make(map[string]int8)
292	for k, val := range src {
293		if val != nil {
294			dst[k] = *val
295		}
296	}
297	return dst
298}
299
300// Int16 returns a pointer to the int16 value passed in.
301func Int16(v int16) *int16 {
302	return &v
303}
304
305// Int16Value returns the value of the int16 pointer passed in or
306// 0 if the pointer is nil.
307func Int16Value(v *int16) int16 {
308	if v != nil {
309		return *v
310	}
311	return 0
312}
313
314// Int16Slice converts a slice of int16 values into a slice of
315// int16 pointers
316func Int16Slice(src []int16) []*int16 {
317	dst := make([]*int16, len(src))
318	for i := 0; i < len(src); i++ {
319		dst[i] = &(src[i])
320	}
321	return dst
322}
323
324// Int16ValueSlice converts a slice of int16 pointers into a slice of
325// int16 values
326func Int16ValueSlice(src []*int16) []int16 {
327	dst := make([]int16, len(src))
328	for i := 0; i < len(src); i++ {
329		if src[i] != nil {
330			dst[i] = *(src[i])
331		}
332	}
333	return dst
334}
335
336// Int16Map converts a string map of int16 values into a string
337// map of int16 pointers
338func Int16Map(src map[string]int16) map[string]*int16 {
339	dst := make(map[string]*int16)
340	for k, val := range src {
341		v := val
342		dst[k] = &v
343	}
344	return dst
345}
346
347// Int16ValueMap converts a string map of int16 pointers into a string
348// map of int16 values
349func Int16ValueMap(src map[string]*int16) map[string]int16 {
350	dst := make(map[string]int16)
351	for k, val := range src {
352		if val != nil {
353			dst[k] = *val
354		}
355	}
356	return dst
357}
358
359// Int32 returns a pointer to the int32 value passed in.
360func Int32(v int32) *int32 {
361	return &v
362}
363
364// Int32Value returns the value of the int32 pointer passed in or
365// 0 if the pointer is nil.
366func Int32Value(v *int32) int32 {
367	if v != nil {
368		return *v
369	}
370	return 0
371}
372
373// Int32Slice converts a slice of int32 values into a slice of
374// int32 pointers
375func Int32Slice(src []int32) []*int32 {
376	dst := make([]*int32, len(src))
377	for i := 0; i < len(src); i++ {
378		dst[i] = &(src[i])
379	}
380	return dst
381}
382
383// Int32ValueSlice converts a slice of int32 pointers into a slice of
384// int32 values
385func Int32ValueSlice(src []*int32) []int32 {
386	dst := make([]int32, len(src))
387	for i := 0; i < len(src); i++ {
388		if src[i] != nil {
389			dst[i] = *(src[i])
390		}
391	}
392	return dst
393}
394
395// Int32Map converts a string map of int32 values into a string
396// map of int32 pointers
397func Int32Map(src map[string]int32) map[string]*int32 {
398	dst := make(map[string]*int32)
399	for k, val := range src {
400		v := val
401		dst[k] = &v
402	}
403	return dst
404}
405
406// Int32ValueMap converts a string map of int32 pointers into a string
407// map of int32 values
408func Int32ValueMap(src map[string]*int32) map[string]int32 {
409	dst := make(map[string]int32)
410	for k, val := range src {
411		if val != nil {
412			dst[k] = *val
413		}
414	}
415	return dst
416}
417
418// Int64 returns a pointer to the int64 value passed in.
419func Int64(v int64) *int64 {
420	return &v
421}
422
423// Int64Value returns the value of the int64 pointer passed in or
424// 0 if the pointer is nil.
425func Int64Value(v *int64) int64 {
426	if v != nil {
427		return *v
428	}
429	return 0
430}
431
432// Int64Slice converts a slice of int64 values into a slice of
433// int64 pointers
434func Int64Slice(src []int64) []*int64 {
435	dst := make([]*int64, len(src))
436	for i := 0; i < len(src); i++ {
437		dst[i] = &(src[i])
438	}
439	return dst
440}
441
442// Int64ValueSlice converts a slice of int64 pointers into a slice of
443// int64 values
444func Int64ValueSlice(src []*int64) []int64 {
445	dst := make([]int64, len(src))
446	for i := 0; i < len(src); i++ {
447		if src[i] != nil {
448			dst[i] = *(src[i])
449		}
450	}
451	return dst
452}
453
454// Int64Map converts a string map of int64 values into a string
455// map of int64 pointers
456func Int64Map(src map[string]int64) map[string]*int64 {
457	dst := make(map[string]*int64)
458	for k, val := range src {
459		v := val
460		dst[k] = &v
461	}
462	return dst
463}
464
465// Int64ValueMap converts a string map of int64 pointers into a string
466// map of int64 values
467func Int64ValueMap(src map[string]*int64) map[string]int64 {
468	dst := make(map[string]int64)
469	for k, val := range src {
470		if val != nil {
471			dst[k] = *val
472		}
473	}
474	return dst
475}
476
477// Uint8 returns a pointer to the uint8 value passed in.
478func Uint8(v uint8) *uint8 {
479	return &v
480}
481
482// Uint8Value returns the value of the uint8 pointer passed in or
483// 0 if the pointer is nil.
484func Uint8Value(v *uint8) uint8 {
485	if v != nil {
486		return *v
487	}
488	return 0
489}
490
491// Uint8Slice converts a slice of uint8 values into a slice of
492// uint8 pointers
493func Uint8Slice(src []uint8) []*uint8 {
494	dst := make([]*uint8, len(src))
495	for i := 0; i < len(src); i++ {
496		dst[i] = &(src[i])
497	}
498	return dst
499}
500
501// Uint8ValueSlice converts a slice of uint8 pointers into a slice of
502// uint8 values
503func Uint8ValueSlice(src []*uint8) []uint8 {
504	dst := make([]uint8, len(src))
505	for i := 0; i < len(src); i++ {
506		if src[i] != nil {
507			dst[i] = *(src[i])
508		}
509	}
510	return dst
511}
512
513// Uint8Map converts a string map of uint8 values into a string
514// map of uint8 pointers
515func Uint8Map(src map[string]uint8) map[string]*uint8 {
516	dst := make(map[string]*uint8)
517	for k, val := range src {
518		v := val
519		dst[k] = &v
520	}
521	return dst
522}
523
524// Uint8ValueMap converts a string map of uint8 pointers into a string
525// map of uint8 values
526func Uint8ValueMap(src map[string]*uint8) map[string]uint8 {
527	dst := make(map[string]uint8)
528	for k, val := range src {
529		if val != nil {
530			dst[k] = *val
531		}
532	}
533	return dst
534}
535
536// Uint16 returns a pointer to the uint16 value passed in.
537func Uint16(v uint16) *uint16 {
538	return &v
539}
540
541// Uint16Value returns the value of the uint16 pointer passed in or
542// 0 if the pointer is nil.
543func Uint16Value(v *uint16) uint16 {
544	if v != nil {
545		return *v
546	}
547	return 0
548}
549
550// Uint16Slice converts a slice of uint16 values into a slice of
551// uint16 pointers
552func Uint16Slice(src []uint16) []*uint16 {
553	dst := make([]*uint16, len(src))
554	for i := 0; i < len(src); i++ {
555		dst[i] = &(src[i])
556	}
557	return dst
558}
559
560// Uint16ValueSlice converts a slice of uint16 pointers into a slice of
561// uint16 values
562func Uint16ValueSlice(src []*uint16) []uint16 {
563	dst := make([]uint16, len(src))
564	for i := 0; i < len(src); i++ {
565		if src[i] != nil {
566			dst[i] = *(src[i])
567		}
568	}
569	return dst
570}
571
572// Uint16Map converts a string map of uint16 values into a string
573// map of uint16 pointers
574func Uint16Map(src map[string]uint16) map[string]*uint16 {
575	dst := make(map[string]*uint16)
576	for k, val := range src {
577		v := val
578		dst[k] = &v
579	}
580	return dst
581}
582
583// Uint16ValueMap converts a string map of uint16 pointers into a string
584// map of uint16 values
585func Uint16ValueMap(src map[string]*uint16) map[string]uint16 {
586	dst := make(map[string]uint16)
587	for k, val := range src {
588		if val != nil {
589			dst[k] = *val
590		}
591	}
592	return dst
593}
594
595// Uint32 returns a pointer to the uint32 value passed in.
596func Uint32(v uint32) *uint32 {
597	return &v
598}
599
600// Uint32Value returns the value of the uint32 pointer passed in or
601// 0 if the pointer is nil.
602func Uint32Value(v *uint32) uint32 {
603	if v != nil {
604		return *v
605	}
606	return 0
607}
608
609// Uint32Slice converts a slice of uint32 values into a slice of
610// uint32 pointers
611func Uint32Slice(src []uint32) []*uint32 {
612	dst := make([]*uint32, len(src))
613	for i := 0; i < len(src); i++ {
614		dst[i] = &(src[i])
615	}
616	return dst
617}
618
619// Uint32ValueSlice converts a slice of uint32 pointers into a slice of
620// uint32 values
621func Uint32ValueSlice(src []*uint32) []uint32 {
622	dst := make([]uint32, len(src))
623	for i := 0; i < len(src); i++ {
624		if src[i] != nil {
625			dst[i] = *(src[i])
626		}
627	}
628	return dst
629}
630
631// Uint32Map converts a string map of uint32 values into a string
632// map of uint32 pointers
633func Uint32Map(src map[string]uint32) map[string]*uint32 {
634	dst := make(map[string]*uint32)
635	for k, val := range src {
636		v := val
637		dst[k] = &v
638	}
639	return dst
640}
641
642// Uint32ValueMap converts a string map of uint32 pointers into a string
643// map of uint32 values
644func Uint32ValueMap(src map[string]*uint32) map[string]uint32 {
645	dst := make(map[string]uint32)
646	for k, val := range src {
647		if val != nil {
648			dst[k] = *val
649		}
650	}
651	return dst
652}
653
654// Uint64 returns a pointer to the uint64 value passed in.
655func Uint64(v uint64) *uint64 {
656	return &v
657}
658
659// Uint64Value returns the value of the uint64 pointer passed in or
660// 0 if the pointer is nil.
661func Uint64Value(v *uint64) uint64 {
662	if v != nil {
663		return *v
664	}
665	return 0
666}
667
668// Uint64Slice converts a slice of uint64 values into a slice of
669// uint64 pointers
670func Uint64Slice(src []uint64) []*uint64 {
671	dst := make([]*uint64, len(src))
672	for i := 0; i < len(src); i++ {
673		dst[i] = &(src[i])
674	}
675	return dst
676}
677
678// Uint64ValueSlice converts a slice of uint64 pointers into a slice of
679// uint64 values
680func Uint64ValueSlice(src []*uint64) []uint64 {
681	dst := make([]uint64, len(src))
682	for i := 0; i < len(src); i++ {
683		if src[i] != nil {
684			dst[i] = *(src[i])
685		}
686	}
687	return dst
688}
689
690// Uint64Map converts a string map of uint64 values into a string
691// map of uint64 pointers
692func Uint64Map(src map[string]uint64) map[string]*uint64 {
693	dst := make(map[string]*uint64)
694	for k, val := range src {
695		v := val
696		dst[k] = &v
697	}
698	return dst
699}
700
701// Uint64ValueMap converts a string map of uint64 pointers into a string
702// map of uint64 values
703func Uint64ValueMap(src map[string]*uint64) map[string]uint64 {
704	dst := make(map[string]uint64)
705	for k, val := range src {
706		if val != nil {
707			dst[k] = *val
708		}
709	}
710	return dst
711}
712
713// Float32 returns a pointer to the float32 value passed in.
714func Float32(v float32) *float32 {
715	return &v
716}
717
718// Float32Value returns the value of the float32 pointer passed in or
719// 0 if the pointer is nil.
720func Float32Value(v *float32) float32 {
721	if v != nil {
722		return *v
723	}
724	return 0
725}
726
727// Float32Slice converts a slice of float32 values into a slice of
728// float32 pointers
729func Float32Slice(src []float32) []*float32 {
730	dst := make([]*float32, len(src))
731	for i := 0; i < len(src); i++ {
732		dst[i] = &(src[i])
733	}
734	return dst
735}
736
737// Float32ValueSlice converts a slice of float32 pointers into a slice of
738// float32 values
739func Float32ValueSlice(src []*float32) []float32 {
740	dst := make([]float32, len(src))
741	for i := 0; i < len(src); i++ {
742		if src[i] != nil {
743			dst[i] = *(src[i])
744		}
745	}
746	return dst
747}
748
749// Float32Map converts a string map of float32 values into a string
750// map of float32 pointers
751func Float32Map(src map[string]float32) map[string]*float32 {
752	dst := make(map[string]*float32)
753	for k, val := range src {
754		v := val
755		dst[k] = &v
756	}
757	return dst
758}
759
760// Float32ValueMap converts a string map of float32 pointers into a string
761// map of float32 values
762func Float32ValueMap(src map[string]*float32) map[string]float32 {
763	dst := make(map[string]float32)
764	for k, val := range src {
765		if val != nil {
766			dst[k] = *val
767		}
768	}
769	return dst
770}
771
772// Float64 returns a pointer to the float64 value passed in.
773func Float64(v float64) *float64 {
774	return &v
775}
776
777// Float64Value returns the value of the float64 pointer passed in or
778// 0 if the pointer is nil.
779func Float64Value(v *float64) float64 {
780	if v != nil {
781		return *v
782	}
783	return 0
784}
785
786// Float64Slice converts a slice of float64 values into a slice of
787// float64 pointers
788func Float64Slice(src []float64) []*float64 {
789	dst := make([]*float64, len(src))
790	for i := 0; i < len(src); i++ {
791		dst[i] = &(src[i])
792	}
793	return dst
794}
795
796// Float64ValueSlice converts a slice of float64 pointers into a slice of
797// float64 values
798func Float64ValueSlice(src []*float64) []float64 {
799	dst := make([]float64, len(src))
800	for i := 0; i < len(src); i++ {
801		if src[i] != nil {
802			dst[i] = *(src[i])
803		}
804	}
805	return dst
806}
807
808// Float64Map converts a string map of float64 values into a string
809// map of float64 pointers
810func Float64Map(src map[string]float64) map[string]*float64 {
811	dst := make(map[string]*float64)
812	for k, val := range src {
813		v := val
814		dst[k] = &v
815	}
816	return dst
817}
818
819// Float64ValueMap converts a string map of float64 pointers into a string
820// map of float64 values
821func Float64ValueMap(src map[string]*float64) map[string]float64 {
822	dst := make(map[string]float64)
823	for k, val := range src {
824		if val != nil {
825			dst[k] = *val
826		}
827	}
828	return dst
829}
830
831// Time returns a pointer to the time.Time value passed in.
832func Time(v time.Time) *time.Time {
833	return &v
834}
835
836// TimeValue returns the value of the time.Time pointer passed in or
837// time.Time{} if the pointer is nil.
838func TimeValue(v *time.Time) time.Time {
839	if v != nil {
840		return *v
841	}
842	return time.Time{}
843}
844
845// SecondsTimeValue converts an int64 pointer to a time.Time value
846// representing seconds since Epoch or time.Time{} if the pointer is nil.
847func SecondsTimeValue(v *int64) time.Time {
848	if v != nil {
849		return time.Unix((*v / 1000), 0)
850	}
851	return time.Time{}
852}
853
854// MillisecondsTimeValue converts an int64 pointer to a time.Time value
855// representing milliseconds sinch Epoch or time.Time{} if the pointer is nil.
856func MillisecondsTimeValue(v *int64) time.Time {
857	if v != nil {
858		return time.Unix(0, (*v * 1000000))
859	}
860	return time.Time{}
861}
862
863// TimeUnixMilli returns a Unix timestamp in milliseconds from "January 1, 1970 UTC".
864// The result is undefined if the Unix time cannot be represented by an int64.
865// Which includes calling TimeUnixMilli on a zero Time is undefined.
866//
867// This utility is useful for service API's such as CloudWatch Logs which require
868// their unix time values to be in milliseconds.
869//
870// See Go stdlib https://golang.org/pkg/time/#Time.UnixNano for more information.
871func TimeUnixMilli(t time.Time) int64 {
872	return t.UnixNano() / int64(time.Millisecond/time.Nanosecond)
873}
874
875// TimeSlice converts a slice of time.Time values into a slice of
876// time.Time pointers
877func TimeSlice(src []time.Time) []*time.Time {
878	dst := make([]*time.Time, len(src))
879	for i := 0; i < len(src); i++ {
880		dst[i] = &(src[i])
881	}
882	return dst
883}
884
885// TimeValueSlice converts a slice of time.Time pointers into a slice of
886// time.Time values
887func TimeValueSlice(src []*time.Time) []time.Time {
888	dst := make([]time.Time, len(src))
889	for i := 0; i < len(src); i++ {
890		if src[i] != nil {
891			dst[i] = *(src[i])
892		}
893	}
894	return dst
895}
896
897// TimeMap converts a string map of time.Time values into a string
898// map of time.Time pointers
899func TimeMap(src map[string]time.Time) map[string]*time.Time {
900	dst := make(map[string]*time.Time)
901	for k, val := range src {
902		v := val
903		dst[k] = &v
904	}
905	return dst
906}
907
908// TimeValueMap converts a string map of time.Time pointers into a string
909// map of time.Time values
910func TimeValueMap(src map[string]*time.Time) map[string]time.Time {
911	dst := make(map[string]time.Time)
912	for k, val := range src {
913		if val != nil {
914			dst[k] = *val
915		}
916	}
917	return dst
918}
919