From e5b35f3fcc75e6d89551505738628997e890f44b Mon Sep 17 00:00:00 2001
From: Sasha Koshka <sashakoshka@tebibyte.media>
Date: Wed, 30 Oct 2024 23:54:11 -0400
Subject: [PATCH] Improvements to Optional type

---
 container/optional.go | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/container/optional.go b/container/optional.go
index 8814358..614c522 100644
--- a/container/optional.go
+++ b/container/optional.go
@@ -1,31 +1,31 @@
 package ucontainer
 
-// Optional is an optional value.
+// Optional can either hold a value, or nothing.
 type Optional[T any] struct {
 	value T
 	exists bool
 }
 
-// Value returns the value and true if the value exists. If not, it returns the
-// last set value and false.
-func (this *Optional[T]) Value () (T, bool) {
-	return this.value, this.exists
+// O creates a new optional with the specified value.
+func O[T any] (value T) Optional[T] {
+	return Optional[T] {
+		value: value,
+		exists: true,
+	}
 }
 
-// Set sets the value.
-func (this *Optional[T]) Set (value T) {
-	this.value = value
-	this.exists = true
-}
-
-// Unset unsets the value.
-func (this *Optional[T]) Unset () {
-	var zero T
-	this.value = zero
-	this.exists = false
+// Void returns an optional with no value.
+func Void[T any] () Optional[T] {
+	return Optional[T] { }
 }
 
 // Exists returns if the value is currently set.
-func (this *Optional[T]) Exists () bool {
-	return this.exists
+func (optional Optional[T]) Exists () bool {
+	return optional.exists
+}
+
+// Value returns the value and true if the value exists. If not, it returns the
+// zero value and false.
+func (optional Optional[T]) Value () (T, bool) {
+	return optional.value, optional.exists
 }