您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

serialization.go 798B

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