initial partial sketch
[scpubgit/DX.git] / lib / DX / Value / Dict.pm
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) = @_;
19   $self->members->{$at->string_value};
20 }
21
22 sub with_member_at {
23   my ($self, $at, $value) = @_;
24   $self->but(
25     members => { %{$self->members}, $at->string_value => $value }
26   );
27 }
28
29 sub without_member_at {
30   my ($self, $at) = @_;
31   my %members = %{$self->members};
32   delete $members{$at};
33   $self->but(members => \%members);
34 }
35
36 1;