package DX::Predicate::Dict;

use DX::Utils qw(step dict TYPE_OF);
use DX::Class;

with 'DX::Role::Predicate';

sub _possible_resolution_list {
  my ($self, $arg, $proto) = @_;
  if ($arg->is_set) {
    die "dict called with non-dict"
      unless $arg->isa('DX::Value::Dict');
    return step(
      actions => [],
      depends_on => [ [ undef ,=> [ TYPE_OF ,=> $arg ] ] ]
    );
  }
  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 ] ] ]
  );
}

1;
