Commit | Line | Data |
9d759b64 |
1 | package DX::Value::Dict; |
2 | |
3 | use DX::Utils qw(string); |
4 | use DX::Class; |
5 | |
6 | with 'DX::Role::StructuredValue'; |
7 | |
8 | has '+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 | |
15 | has members => (is => 'ro', required => 1); |
16 | |
1e812b19 |
17 | sub index_list { sort keys %{$_[0]->members} } |
18 | |
9d759b64 |
19 | sub get_member_at { |
20 | my ($self, $at) = @_; |
efad53c4 |
21 | $self->members->{ref($at) ? $at->string_value : $at}; |
9d759b64 |
22 | } |
23 | |
24 | sub 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 | |
34 | sub without_member_at { |
35 | my ($self, $at) = @_; |
36 | my %members = %{$self->members}; |
37 | delete $members{$at}; |
38 | $self->but(members => \%members); |
39 | } |
40 | |
41 | 1; |