Hunter0x7c7
2022-08-11 a82f9cb69f63aaeba40c024960deda7d75b9fece
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package duration
 
import (
    "encoding/json"
    "fmt"
    "time"
)
 
type Duration int64
 
func (d *Duration) MarshalJSON() ([]byte, error) {
    dr := time.Duration(*d)
    return json.Marshal(dr.String())
}
 
func (d *Duration) UnmarshalJSON(b []byte) error {
    var v interface{}
    if err := json.Unmarshal(b, &v); err != nil {
        return err
    }
    switch value := v.(type) {
    case string:
        var err error
        dr, err := time.ParseDuration(value)
        if err != nil {
            return err
        }
        *d = Duration(dr)
        return nil
    default:
        return fmt.Errorf("invalid duration: %v", v)
    }
}