factor out set/stream code
[scpubgit/DKit.git] / lib / DX / SetOver.pm
1 package DX::SetOver;
2
3 use DX::ArrayStream;
4 use Moo;
5
6 has over => (is => 'ro', required => 1);
7
8 has values => (is => 'ro', default => sub { {} });
9
10 sub to_stream {
11   my ($self) = @_;
12   my $values = $self->values;
13   return DX::ArrayStream->from_array(@{$values}{sort keys %$values});
14 }
15
16 sub with_value {
17   my ($self, $value) = @_;
18   return ref($self)->new(
19     %$self,
20     values => { %{$self->values}, $value->${\$self->over} => $value }
21   );
22 }
23
24 1;