support MouseX::Types's isa or ( isa => Str | Undef )
[gitmo/Mouse.git] / lib / MouseX / Types / TypeDecorator.pm
diff --git a/lib/MouseX/Types/TypeDecorator.pm b/lib/MouseX/Types/TypeDecorator.pm
new file mode 100644 (file)
index 0000000..244f88c
--- /dev/null
@@ -0,0 +1,41 @@
+package MouseX::Types::TypeDecorator;
+
+use strict;
+use warnings;
+
+use Mouse::Util 'blessed';
+
+use overload(
+    '""' => sub { ${ $_[0] } },
+    '|' => sub {
+        
+        ## It's kind of ugly that we need to know about Union Types, but this
+        ## is needed for syntax compatibility.  Maybe someday we'll all just do
+        ## Or[Str,Str,Int]
+        
+        my @tc = grep {blessed $_} @_;
+        use Data::Dumper;
+        my $ret;
+        if (ref($_[0])) {
+            $ret = ${ $_[0] };
+        } else {
+            $ret = $_[0];
+        }
+        $ret .= '|';
+        if (ref($_[1])) {
+            $ret .= ${ $_[1] };
+        } else {
+            $ret .= $_[1];
+        }
+        $ret;
+    },
+    fallback => 1,
+    
+);
+
+sub new {
+    my $type = $_[1];
+    bless \$type, $_[0];
+}
+
+1;