Result Methods
Results in Oxide use Rust's standard Result<T, E> methods directly. Oxide's case conversion automatically translates camelCase method calls to Rust's snake_case equivalents.
Methods
| Method | Rust Equivalent | Description |
|---|---|---|
isOk() | is_ok() | Returns true if Ok |
isErr() | is_err() | Returns true if Err |
unwrapOr(default) | unwrap_or(default) | Returns value or default |
map(f) | map(f) | Transforms Ok value |
mapErr(f) | map_err(f) | Transforms Err value |
ok() | ok() | Converts to Option, discards error |
err() | err() | Gets error as Option |
andThen(f) | and_then(f) | Chains result-returning functions |
Examples
Checking Status
let ok: Result<Int, String> = Ok(42)
let err: Result<Int, String> = Err("error")
ok.isOk() // true
ok.isErr() // false
err.isOk() // false
err.isErr() // true
Unwrap with Default
let ok: Result<Int, String> = Ok(42)
let err: Result<Int, String> = Err("failed")
// Using ?? operator
ok ?? 0 // 42
err ?? 0 // 0
// Using method
ok.unwrapOr(0) // 42
err.unwrapOr(0) // 0
Mapping Values
let result: Result<Int, String> = Ok(21)
// Transform Ok value
let doubled = result.map { it * 2 } // Ok(42)
// Chain mappings
let processed = result
.map { it * 2 }
.map { "Value: $it" } // Ok("Value: 42")
Mapping Errors
let err: Result<Int, String> = Err("not found")
// Transform error type
let mapped = err.mapErr { MyError.NotFound(it) }
Converting to Option
let ok: Result<Int, String> = Ok(42)
let err: Result<Int, String> = Err("failed")
// Get Ok value as Option
ok.ok() // Some(42)
err.ok() // None
// Get Err value as Option
ok.err() // None
err.err() // Some("failed")
Pattern Matching
let result = fetchData()
match result {
Ok(data) -> process(data)
Err(error) -> handleError(error)
}
Integration with throws
Functions That Throw
fn parseNumber(s: String) throws: Int {
if s.isEmpty() {
throw "Empty string"
}
s.parse<Int>().unwrap()
}
Using try Variants
// Propagate errors
fn process() throws: Int {
let n = try parseNumber("42")
n * 2
}
// Convert to Option
let result: Int? = try? parseNumber("42")
// Force unwrap (panics on error)
let value: Int = try! parseNumber("42")
Do-Catch Blocks
do {
let value = try parseNumber(input)
process(value)
} catch {
println!("Error: $error")
}
Comparison with Rust
| Oxide | Rust |
|---|---|
r.isOk() | r.is_ok() |
r.isErr() | r.is_err() |
r ?? default | r.unwrap_or(default) |
r.unwrapOr(d) | r.unwrap_or(d) |
r.map(f) | r.map(f) |
r.mapErr(f) | r.map_err(f) |
r.ok() | r.ok() |
r.err() | r.err() |
r.andThen(f) | r.and_then(f) |
try expr | expr? |
try? expr | expr.ok() |
try! expr | expr.unwrap() |
Common Patterns
Result Chaining
fn processFile(path: String) throws: Data {
let content = try readFile(path)
let parsed = try parseContent(content)
let validated = try validate(parsed)
validated
}
Converting Result to Option
// When you only care about success
let maybeValue = result.ok()
// Use with null coalescing
let value = result.ok() ?? defaultValue
Combining Results
fn loadConfig() throws: Config {
let file1 = try readFile("config1.toml")
let file2 = try readFile("config2.toml")
mergeConfigs(file1, file2)
}
Error Recovery
let result = fetchPrimary()
.orElse { fetchFallback() }
.orElse { Ok(defaultValue()) }
Custom Error Types
@[derive(Debug)]
enum AppError {
case network(message: String)
case parse(line: Int)
case notFound
}
fn fetchData() throws: Data {
let response = try? http.get(url)
guard let r = response else {
throw AppError.network(message = "Connection failed")
}
if r.status == 404 {
throw AppError.notFound
}
try parseResponse(r)
}
Additional Rust Methods
Since Oxide uses Rust's Result methods directly, you can use any method from Rust's standard library:
let result: Result<Int, String> = Ok(42)
// Check methods
result.isOk() // true
result.isErr() // false
// Unwrap variants
result.unwrap() // 42 (panics if Err)
result.unwrapErr() // panics (expects Err)
result.expect("failed") // 42 (panics with message if Err)
// Logical operations
let other: Result<Int, String> = Ok(100)
result.or(other) // Ok(42) - returns result if Ok
result.and(other) // Ok(100) - returns other if both Ok
// Contains
result.contains(42) // true
See Also
- Error Handling - Complete error handling guide
- Option Methods - Optional type handling
- Standard Library Overview