tagged 0.1.0 copy "tagged: ^0.1.0" to clipboard
tagged: ^0.1.0 copied to clipboard

A Newtype Pattern, a Safe & Type-Restricted Wrapper for Dart.

example/main.dart

// ignore_for_file: unused_element, unused_local_variable

import 'package:tagged/tagged.dart';

void main() {
  final subscription = const Subscription(id: SubscriptionId('1'));

  final user = User(
    subscription.id,
    id: const UserId('1'),
    address: const Address('address'),
    email: const Email('email@email.com'),
  );

  final subscriptions = <Subscription>[];

  Subscription getSubscription(SubscriptionId id) =>
      subscriptions.firstWhere((element) => element.id == id);

  // ❌ The argument type 'Tagged<User, String>' can't be assigned
  // to the parameter type 'Tagged<Subscription, String>'.
  // final subscription = getSubscription(user.id);

  void sendEmail(Email email) {}

  // ❌ The argument type 'Tagged<({String address, User user}), String>'
  // can't be assigned to the parameter type
  //'Tagged<({String email, User user}), String>'.
  // sendEmail(user.address);
}

typedef UserId = Tagged<User, String>;
typedef Email = Tagged<({User user, String email}), String>;
typedef Address = Tagged<({User user, String address}), String>;

class User {
  final UserId id;
  final Address address;
  final Email email;
  final SubscriptionId? subscriptionId;

  const User(
    this.subscriptionId, {
    required this.id,
    required this.address,
    required this.email,
  });
}

typedef SubscriptionId = Tagged<Subscription, String>;

class Subscription {
  final SubscriptionId id;

  const Subscription({
    required this.id,
  });
}
2
likes
130
pub points
45%
popularity

Publisher

verified publisherminikin.me

A Newtype Pattern, a Safe & Type-Restricted Wrapper for Dart.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

meta

More

Packages that depend on tagged