mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
798 B
46 lines
798 B
// Copyright 2024 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package optional |
|
|
|
import ( |
|
"code.gitea.io/gitea/modules/json" |
|
|
|
"gopkg.in/yaml.v3" |
|
) |
|
|
|
func (o *Option[T]) UnmarshalJSON(data []byte) error { |
|
var v *T |
|
if err := json.Unmarshal(data, &v); err != nil { |
|
return err |
|
} |
|
*o = FromPtr(v) |
|
return nil |
|
} |
|
|
|
func (o Option[T]) MarshalJSON() ([]byte, error) { |
|
if !o.Has() { |
|
return []byte("null"), nil |
|
} |
|
|
|
return json.Marshal(o.Value()) |
|
} |
|
|
|
func (o *Option[T]) UnmarshalYAML(value *yaml.Node) error { |
|
var v *T |
|
if err := value.Decode(&v); err != nil { |
|
return err |
|
} |
|
*o = FromPtr(v) |
|
return nil |
|
} |
|
|
|
func (o Option[T]) MarshalYAML() (any, error) { |
|
if !o.Has() { |
|
return nil, nil |
|
} |
|
|
|
value := new(yaml.Node) |
|
err := value.Encode(o.Value()) |
|
return value, err |
|
}
|
|
|