option_result 2.0.1 copy "option_result: ^2.0.1" to clipboard
option_result: ^2.0.1 copied to clipboard

A lightweight Dart library for Rust-like Option/Result types. Supports exhaustive pattern matching and provides helpers for None()/Err() propagation

example/option_result_example.dart

import 'dart:math';

import 'package:option_result/option_result.dart';

Random random = Random();

void main() async {
	// Get a user object from the database
	Result<User, String> user = await getUser(id: 12345);

	// If it's an Err type value, display the unwrapped error value and return
	if (user case Err(value: String error)) {
		print('Error retrieving user: $error');
		return;
	}

	// Try getting the user's email address
	Option<String> email = user.unwrap().email;

	// If the user has an email address, print it
	if (email case Some(value: String address)) {
		print('User email: $address');
	} else {
		print('User has no email set');
	}

	// Alternative to the above using a switch expression for pattern matching
	String message = switch (email) {
		Some(value: String address) => 'User email: $address',
		None() => 'User has no email set'
	};

	print(message);
}

/// Represents a user in a database
class User {
	int id;
	Option<String> email;
	User(this.id, this.email);
}

/// Simulate pulling a user from a database
Future<Result<User, String>> getUser({required int id}) async {
	await Future.delayed(Duration(milliseconds: 100));

	int randInt = random.nextInt(3);

	return switch (randInt) {
		0 => Ok(User(id, Some('foo$id@bar.com'))),
		1 => Ok(User(id, None())),
		2 => Err('User $id not found'),
		_ => Err('Something went wrong')
	};
}
13
likes
0
pub points
58%
popularity

Publisher

unverified uploader

A lightweight Dart library for Rust-like Option/Result types. Supports exhaustive pattern matching and provides helpers for None()/Err() propagation

Repository (GitHub)
View/report issues

Topics

#option #result #pattern-matching

License

unknown (license)

More

Packages that depend on option_result