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