code.gitea.io/gitea@v1.22.3/modules/optional/serialization.go (about) 1 // Copyright 2024 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package optional 5 6 import ( 7 "code.gitea.io/gitea/modules/json" 8 9 "gopkg.in/yaml.v3" 10 ) 11 12 func (o *Option[T]) UnmarshalJSON(data []byte) error { 13 var v *T 14 if err := json.Unmarshal(data, &v); err != nil { 15 return err 16 } 17 *o = FromPtr(v) 18 return nil 19 } 20 21 func (o Option[T]) MarshalJSON() ([]byte, error) { 22 if !o.Has() { 23 return []byte("null"), nil 24 } 25 26 return json.Marshal(o.Value()) 27 } 28 29 func (o *Option[T]) UnmarshalYAML(value *yaml.Node) error { 30 var v *T 31 if err := value.Decode(&v); err != nil { 32 return err 33 } 34 *o = FromPtr(v) 35 return nil 36 } 37 38 func (o Option[T]) MarshalYAML() (any, error) { 39 if !o.Has() { 40 return nil, nil 41 } 42 43 value := new(yaml.Node) 44 err := value.Encode(o.Value()) 45 return value, err 46 }