Skip to main content

Rust-inspired Result type for Python with pattern matching and type-safe error handling

Project description

philiprehberger-result

Tests PyPI version License

Rust-inspired Result type for Python with pattern matching and type-safe error handling.

Installation

pip install philiprehberger-result

Usage

Basic Result

from philiprehberger_result import Ok, Err, Result

def divide(a: float, b: float) -> Result[float, str]:
    if b == 0:
        return Err("division by zero")
    return Ok(a / b)

result = divide(10, 2)
print(result.unwrap())  # 5.0

result = divide(10, 0)
print(result.unwrap_or(0.0))  # 0.0

Pattern Matching (Python 3.10+)

match divide(10, 3):
    case Ok(value):
        print(f"Result: {value}")
    case Err(error):
        print(f"Error: {error}")

Chaining

result = (
    Ok(10)
    .map(lambda x: x * 2)
    .flat_map(lambda x: Ok(x + 1) if x < 100 else Err("too large"))
)

Fallback with or_else

result = Err("not found").or_else(lambda e: Ok("default"))
# Ok("default")

Serialization

Ok(42).to_dict()    # {"ok": 42}
Err("x").to_dict()  # {"err": "x"}

Try/Catch Wrapping

from philiprehberger_result import try_catch

result = try_catch(lambda: int("not a number"))
# Err(ValueError("invalid literal..."))

Async Support

from philiprehberger_result import try_catch_async

result = await try_catch_async(fetch_data)

Collecting Results

from philiprehberger_result import all_ok

results = [Ok(1), Ok(2), Ok(3)]
combined = all_ok(results)  # Ok([1, 2, 3])

results = [Ok(1), Err("fail"), Ok(3)]
combined = all_ok(results)  # Err("fail")

API Reference

Function / Class Description
Ok(value) Success variant — wraps a value
Err(error) Error variant — wraps an error
.is_ok() / .is_err() Type check
.unwrap() Get value or raise
.unwrap_or(default) Get value or return default
.unwrap_err() Get error or raise
.map(fn) Transform Ok value
.map_err(fn) Transform Err value
.flat_map(fn) Chain Result-returning functions
.or_else(fn) Fallback on Err, pass-through on Ok
.match(ok=fn, err=fn) Pattern dispatch
.to_dict() Serialize to {"ok": v} or {"err": e}
ok(value) / err(error) Shorthand constructors
try_catch(fn) Wrap callable in Result
try_catch_async(fn) Async version
from_awaitable(aw) Wrap awaitable in Result
all_ok(results) Collect list of Results into Result of list

Development

pip install -e .
python -m pytest tests/ -v

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

philiprehberger_result-0.2.3.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

philiprehberger_result-0.2.3-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_result-0.2.3.tar.gz.

File metadata

  • Download URL: philiprehberger_result-0.2.3.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for philiprehberger_result-0.2.3.tar.gz
Algorithm Hash digest
SHA256 60437f9a0b83641bca5e5847e0639ad3614f6a546a9943f9ff0c9a4c4db8bbad
MD5 cb87660a8f1d39483f5ebf1cc598b04a
BLAKE2b-256 794a2e1d4562a635d3ca5e7300df17f6cd14ab0d314652d9636e4db004cc27be

See more details on using hashes here.

File details

Details for the file philiprehberger_result-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_result-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d8e07ebb2345146a75a8bdcc00a449042484151e0efed9a5975474ddf7d8c9e6
MD5 23e7ea5d414962cf74c8c1ab13d9289c
BLAKE2b-256 2f0c8ae8d1bb23669d878357e8d3259ce84889a4e3c0b96541c20a4c839d2f05

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page