github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6@v6.2.0/fake/time_rfc3339.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  	"encoding/json"
    13  	"fmt"
    14  	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
    15  	"reflect"
    16  	"regexp"
    17  	"strings"
    18  	"time"
    19  )
    20  
    21  // Azure reports time in UTC but it doesn't include the 'Z' time zone suffix in some cases.
    22  var tzOffsetRegex = regexp.MustCompile(`(?:Z|z|\+|-)(?:\d+:\d+)*"*$`)
    23  
    24  const (
    25  	utcDateTime        = "2006-01-02T15:04:05.999999999"
    26  	utcDateTimeJSON    = `"` + utcDateTime + `"`
    27  	utcDateTimeNoT     = "2006-01-02 15:04:05.999999999"
    28  	utcDateTimeJSONNoT = `"` + utcDateTimeNoT + `"`
    29  	dateTimeNoT        = `2006-01-02 15:04:05.999999999Z07:00`
    30  	dateTimeJSON       = `"` + time.RFC3339Nano + `"`
    31  	dateTimeJSONNoT    = `"` + dateTimeNoT + `"`
    32  )
    33  
    34  type dateTimeRFC3339 time.Time
    35  
    36  func (t dateTimeRFC3339) MarshalJSON() ([]byte, error) {
    37  	tt := time.Time(t)
    38  	return tt.MarshalJSON()
    39  }
    40  
    41  func (t dateTimeRFC3339) MarshalText() ([]byte, error) {
    42  	tt := time.Time(t)
    43  	return tt.MarshalText()
    44  }
    45  
    46  func (t *dateTimeRFC3339) UnmarshalJSON(data []byte) error {
    47  	tzOffset := tzOffsetRegex.Match(data)
    48  	hasT := strings.Contains(string(data), "T") || strings.Contains(string(data), "t")
    49  	var layout string
    50  	if tzOffset && hasT {
    51  		layout = dateTimeJSON
    52  	} else if tzOffset {
    53  		layout = dateTimeJSONNoT
    54  	} else if hasT {
    55  		layout = utcDateTimeJSON
    56  	} else {
    57  		layout = utcDateTimeJSONNoT
    58  	}
    59  	return t.Parse(layout, string(data))
    60  }
    61  
    62  func (t *dateTimeRFC3339) UnmarshalText(data []byte) error {
    63  	tzOffset := tzOffsetRegex.Match(data)
    64  	hasT := strings.Contains(string(data), "T") || strings.Contains(string(data), "t")
    65  	var layout string
    66  	if tzOffset && hasT {
    67  		layout = time.RFC3339Nano
    68  	} else if tzOffset {
    69  		layout = dateTimeNoT
    70  	} else if hasT {
    71  		layout = utcDateTime
    72  	} else {
    73  		layout = utcDateTimeNoT
    74  	}
    75  	return t.Parse(layout, string(data))
    76  }
    77  
    78  func (t *dateTimeRFC3339) Parse(layout, value string) error {
    79  	p, err := time.Parse(layout, strings.ToUpper(value))
    80  	*t = dateTimeRFC3339(p)
    81  	return err
    82  }
    83  
    84  func (t dateTimeRFC3339) String() string {
    85  	return time.Time(t).Format(time.RFC3339Nano)
    86  }
    87  
    88  func populateDateTimeRFC3339(m map[string]any, k string, t *time.Time) {
    89  	if t == nil {
    90  		return
    91  	} else if azcore.IsNullValue(t) {
    92  		m[k] = nil
    93  		return
    94  	} else if reflect.ValueOf(t).IsNil() {
    95  		return
    96  	}
    97  	m[k] = (*dateTimeRFC3339)(t)
    98  }
    99  
   100  func unpopulateDateTimeRFC3339(data json.RawMessage, fn string, t **time.Time) error {
   101  	if data == nil || string(data) == "null" {
   102  		return nil
   103  	}
   104  	var aux dateTimeRFC3339
   105  	if err := json.Unmarshal(data, &aux); err != nil {
   106  		return fmt.Errorf("struct field %s: %v", fn, err)
   107  	}
   108  	*t = (*time.Time)(&aux)
   109  	return nil
   110  }