use Term::ReadLine;
use Moo;
-has world => (is => 'ro', required => 1);
-
-has remote => (is => 'lazy');
-
-sub _build_remote { shift->world->remote_for('EVAL') }
+has client => (is => 'ro', required => 1);
sub run {
- my $remote = $_[0]->remote;
+ my $client = $_[0]->client;
my $read = Term::ReadLine->new('REPL');
while (1) {
my $line = $read->readline('re.pl$ ');
last unless defined $line;
next unless length $line;
- my @reply = $remote->blocking_request(eval => $line);
- if ($reply[0] eq 'MISTAKE') {
- die "Botch: ".join(': ', @reply[1,2]);
+ my $result = $client->do(eval => $line);
+ print exists($result->{return})
+ ? $result->{return}
+ : "Error: ".$result->{exception};
+ if ($result->{stdout}) {
+ chomp($result->{stdout});
+ print "STDOUT:\n${\$result->{stdout}}\n";
}
- my $ret = $reply[1];
- print $ret->{return};
- if ($ret->{stdout}) {
- chomp($ret->{stdout});
- print "STDOUT:\n${\$ret->{stdout}}\n";
- }
- if ($ret->{stderr}) {
- chomp($ret->{stderr});
- print "STDERR:\n${\$ret->{stderr}}\n";
+ if ($result->{stderr}) {
+ chomp($result->{stderr});
+ print "STDERR:\n${\$result->{stderr}}\n";
}
}
}
+
+1;