code.gitea.io/gitea@v1.22.3/modules/optional/option.go (about)

     1  // Copyright 2024 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package optional
     5  
     6  type Option[T any] []T
     7  
     8  func None[T any]() Option[T] {
     9  	return nil
    10  }
    11  
    12  func Some[T any](v T) Option[T] {
    13  	return Option[T]{v}
    14  }
    15  
    16  func FromPtr[T any](v *T) Option[T] {
    17  	if v == nil {
    18  		return None[T]()
    19  	}
    20  	return Some(*v)
    21  }
    22  
    23  func FromNonDefault[T comparable](v T) Option[T] {
    24  	var zero T
    25  	if v == zero {
    26  		return None[T]()
    27  	}
    28  	return Some(v)
    29  }
    30  
    31  func (o Option[T]) Has() bool {
    32  	return o != nil
    33  }
    34  
    35  func (o Option[T]) Value() T {
    36  	var zero T
    37  	return o.ValueOrDefault(zero)
    38  }
    39  
    40  func (o Option[T]) ValueOrDefault(v T) T {
    41  	if o.Has() {
    42  		return o[0]
    43  	}
    44  	return v
    45  }