github.com/Foodji/aws-lambda-go@v1.20.2/events/duration.go (about)

     1  package events
     2  
     3  import (
     4  	"encoding/json"
     5  	"math"
     6  	"time"
     7  )
     8  
     9  type DurationSeconds time.Duration
    10  
    11  // UnmarshalJSON converts a given json to a DurationSeconds
    12  func (duration *DurationSeconds) UnmarshalJSON(data []byte) error {
    13  	var seconds float64
    14  	if err := json.Unmarshal(data, &seconds); err != nil {
    15  		return err
    16  	}
    17  
    18  	*duration = DurationSeconds(time.Duration(seconds) * time.Second)
    19  	return nil
    20  }
    21  
    22  // MarshalJSON converts a given DurationSeconds to json
    23  func (duration DurationSeconds) MarshalJSON() ([]byte, error) {
    24  	seconds := time.Duration(duration).Seconds()
    25  	return json.Marshal(int64(math.Ceil(seconds)))
    26  }
    27  
    28  type DurationMinutes time.Duration
    29  
    30  // UnmarshalJSON converts a given json to a DurationMinutes
    31  func (duration *DurationMinutes) UnmarshalJSON(data []byte) error {
    32  	var minutes float64
    33  	if err := json.Unmarshal(data, &minutes); err != nil {
    34  		return err
    35  	}
    36  
    37  	*duration = DurationMinutes(time.Duration(minutes) * time.Minute)
    38  	return nil
    39  }
    40  
    41  // MarshalJSON converts a given DurationMinutes to json
    42  func (duration DurationMinutes) MarshalJSON() ([]byte, error) {
    43  	minutes := time.Duration(duration).Minutes()
    44  	return json.Marshal(int64(math.Ceil(minutes)))
    45  }