const and basic tracing
[scpubgit/DX.git] / lib / DX / ShellState.pm
1 package DX::ShellState;
2
3 use DX::Utils qw(deparse);
4 use DX::Class;
5
6 has template_query_state => (
7   is => 'ro', required => 1, isa => QueryState
8 );
9
10 has current_query_state => (
11   is => 'lazy', builder => 'new_query_state'
12 );
13
14 has mode => (is => 'ro', required => 1);
15
16 sub new_query_state { $_[0]->template_query_state }
17
18 sub trace_sub {
19   sub {
20     my ($tag, $thing) = @_;
21     my $dp = deparse($thing);
22     $dp =~ s/\n$//;
23     warn "${tag}: ${dp}\n";
24   }
25 }
26
27 sub with_new_query_state {
28   my ($self) = @_;
29   $self->but(
30     current_query_state => $self->new_query_state
31   );
32 }
33
34 sub with_mode {
35   my ($self, $new_mode) = @_;
36   return (
37     $self->but(mode => $new_mode),
38     [ mode => $new_mode ],
39   );
40 }
41
42 1;