excise remaining identity_path code
[scpubgit/DX.git] / lib / DX / Value / Dict.pm
CommitLineData
9d759b64 1package DX::Value::Dict;
2
3use DX::Utils qw(string);
4use DX::Class;
5
6with 'DX::Role::StructuredValue';
7
8has '+action_builder' => (
9 handles => [ qw(
10 can_set_value action_for_set_value
0498469a 11 action_for_add_member action_for_remove_member
9d759b64 12 ) ]
13);
14
15has members => (is => 'ro', required => 1);
16
1e812b19 17sub index_list { sort keys %{$_[0]->members} }
18
9d759b64 19sub get_member_at {
20 my ($self, $at) = @_;
efad53c4 21 $self->members->{ref($at) ? $at->string_value : $at};
9d759b64 22}
23
24sub with_member_at {
25 my ($self, $at, $value) = @_;
26 $self->but(
efad53c4 27 members => {
28 %{$self->members},
29 (ref($at) ? $at->string_value : $at) => $value
30 }
9d759b64 31 );
32}
33
34sub without_member_at {
35 my ($self, $at) = @_;
36 my %members = %{$self->members};
37 delete $members{$at};
38 $self->but(members => \%members);
39}
40
9e13b86b 41sub to_data {
42 my ($self) = @_;
43 my $m = $self->members;
44 +{ map +($_ => $m->{$_}->to_data), $self->index_list };
45}
46
9d759b64 471;