Implement basic usage of "enum" type constraints
[gitmo/Mouse.git] / lib / Mouse / Util / TypeConstraints.pm
index 44b0b38..885788a 100644 (file)
@@ -7,7 +7,7 @@ use Carp ();
 use Scalar::Util qw/blessed looks_like_number openhandle/;
 
 our @EXPORT = qw(
-    as where message from via type subtype coerce class_type role_type
+    as where message from via type subtype coerce class_type role_type enum
 );
 
 my %TYPE;
@@ -161,6 +161,15 @@ sub typecast_constraints {
     return $value;
 }
 
+sub enum {
+    my $name = shift;
+    my %is_valid = map { $_ => 1 } @_;
+
+    subtype(
+        $name => where => sub { $is_valid{$_} }
+    );
+}
+
 1;
 
 __END__