rename is_dict to dict, add proto argument
[scpubgit/DX.git] / lib / DX / Predicate / Dict.pm
similarity index 60%
rename from lib/DX/Predicate/IsDict.pm
rename to lib/DX/Predicate/Dict.pm
index ce2278d..4a5628a 100644 (file)
@@ -1,4 +1,4 @@
-package DX::Predicate::IsDict;
+package DX::Predicate::Dict;
 
 use DX::Utils qw(step dict TYPE_OF);
 use DX::Class;
@@ -6,16 +6,19 @@ use DX::Class;
 with 'DX::Role::Predicate';
 
 sub _possible_resolution_list {
-  my ($self, $arg) = @_;
+  my ($self, $arg, $proto) = @_;
   if ($arg->is_set) {
-    die "is_dict called with non-dict"
+    die "dict called with non-dict"
       unless $arg->isa('DX::Value::Dict');
     return step(
       actions => [],
       depends_on => [ [ undef ,=> [ TYPE_OF ,=> $arg ] ] ]
     );
   }
-  my $set = $arg->action_for_set_value(dict());
+  if ($proto and not $proto->isa('DX::Value::Dict')) {
+    die "dict called with non-dict prototype";
+  }
+  my $set = $arg->action_for_set_value($proto||dict());
   return step(
     actions => [ $set ],
     depends_on => [ [ undef ,=> [ TYPE_OF ,=> $arg ] ] ]