Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(documentation): add code documentation to check method definiti… #59

Merged
merged 1 commit into from
May 11, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions meiga/result.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@


class Result(Generic[TS, TF]):
"""
A discriminated union that encapsulates successful outcome with a value of type T or a failure with an arbitrary Error exception.
"""

__id__ = "__meiga_result_identifier__"
__match_args__ = ("_value_success", "_value_failure")
__slots__ = ("_value_success", "_value_failure", "_is_success")
Expand Down Expand Up @@ -94,25 +98,40 @@ def is_failure(self) -> bool:
return not self._is_success

def throw(self) -> None:
"""
Deprecated. Use `reraise`
"""
return self.reraise()

# cannot use raise as it is a reserved word
def reraise(self) -> None:
"""
Raise an exception with the failure value
"""
if not self._is_success:
raise self.value
return None

def unwrap(self) -> Union[TS, None]:
"""
Returns the encapsulated value if this instance is a success or None if it is failure.
"""
if not self._is_success:
return None
return cast(TS, self.value)

def unwrap_or(self, failure_value: TEF) -> Union[TS, TEF]:
"""
Returns the encapsulated value if this instance is a success or the selected failure_value if it is failure.
"""
if not self._is_success:
return failure_value
return self.value

def unwrap_or_return(self, return_value_on_failure: Any = None) -> TS:
"""
Returns the encapsulated value if this instance is a success or return Result as long as @early_return decorator wraps the function.
"""
if not self._is_success:
return_value = (
self if return_value_on_failure is None else return_value_on_failure
Expand All @@ -121,9 +140,15 @@ def unwrap_or_return(self, return_value_on_failure: Any = None) -> TS:
return cast(TS, self.value)

def unwrap_or_throw(self) -> TS:
"""
Deprecated. Use unwrap_or_raise instead.
"""
return self.unwrap_or_raise()

def unwrap_or_raise(self) -> TS:
"""
Returns the encapsulated value if this instance is a success or raise the encapsulated exception if it is failure.
"""
if not self._is_success:
self.reraise()
return cast(TS, self.value)
Expand All @@ -136,6 +161,9 @@ def unwrap_or_else(
failure_value: Optional[TEF] = None,
**kwargs, # Deprecated parameter [on_failure, failure_args]
) -> Union[TS, TEF]:
"""
Returns the encapsulated value if this instance is a success or execute the `on_failure_handler` when it is failure.
"""
if not self._is_success:
if on_failure_handler:
on_failure_handler.execute(self)
Expand All @@ -153,6 +181,9 @@ def unwrap_and(
] = None, # Default has to be None to be compatible with deprecated signature
**kwargs, # Deprecated parameter [on_success, success_args]
) -> Union[TS, None]:
"""
Returns the encapsulated value if this instance is a success and execute the `on_success_handler` when it is success.
"""
if self._is_success:
if on_success_handler:
on_success_handler.execute(self)
Expand All @@ -169,6 +200,9 @@ def handle(
on_failure_handler: Optional[OnFailureHandler] = None,
**kwargs, # Deprecated parameter [on_success, on_failure, success_args, failure_args]
) -> "Result":
"""
Returns itself and execute the `on_success_handler` when the instance is a success and the `on_failure_handler` when it is failure.
"""
if on_failure_handler:
self.unwrap_or_else(on_failure_handler)
else: # Deal with deprecated parameters
Expand All @@ -186,6 +220,9 @@ def handle(
return self

def map(self, transform: Callable) -> None:
"""
Returns a transformed result applying transform function applied to encapsulated value if this instance represents success or failure
"""
new_value = transform(self.value)
self.set_value(new_value)

Expand All @@ -194,6 +231,9 @@ def assert_success(
value_is_instance_of: Optional[Type] = None,
value_is_equal_to: Optional[Any] = None,
) -> None:
"""
Assert if result is a Success
"""
assert_success(
result=self,
value_is_instance_of=value_is_instance_of,
Expand All @@ -205,6 +245,9 @@ def assert_failure(
value_is_instance_of: Optional[Type] = None,
value_is_equal_to: Optional[Any] = None,
) -> None:
"""
Assert if result is a Failure
"""
assert_failure(
result=self,
value_is_instance_of=value_is_instance_of,
Expand Down