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 |
11 | action_for_add_member action_for_set_member action_for_remove_member |
12 | ) ] |
13 | ); |
14 | |
15 | has members => (is => 'ro', required => 1); |
16 | |
17 | sub get_member_at { |
18 | my ($self, $at) = @_; |
efad53c4 |
19 | $self->members->{ref($at) ? $at->string_value : $at}; |
9d759b64 |
20 | } |
21 | |
22 | sub with_member_at { |
23 | my ($self, $at, $value) = @_; |
24 | $self->but( |
efad53c4 |
25 | members => { |
26 | %{$self->members}, |
27 | (ref($at) ? $at->string_value : $at) => $value |
28 | } |
9d759b64 |
29 | ); |
30 | } |
31 | |
32 | sub without_member_at { |
33 | my ($self, $at) = @_; |
34 | my %members = %{$self->members}; |
35 | delete $members{$at}; |
36 | $self->but(members => \%members); |
37 | } |
38 | |
39 | 1; |