-
-use warnings;
-use strict;
-
-use Getopt::Long;
-use GraphQL::Client;
-use Scalar::Util qw(reftype);
-
-our $VERSION = '999.999'; # VERSION
-
-my $url;
-my $transport = {};
-my $query = '-';
-my $variables = {};
-my $format = 'json:pretty';
-my $unpack = 0;
-my $outfile;
-GetOptions(
- 'url|u=s' => \$url,
- 'transport|t=s%' => \$transport,
- 'query|mutation=s' => \$query,
- 'variable|var|d=s%' => \$variables,
- 'format|f=s' => \$format,
- 'unpack!' => \$unpack,
- 'output|o=s' => \$outfile,
-) or die "Invalid options.\n";
-
-$url = shift if !$url;
-$query = shift if !$query || $query eq '-';
-
-my $client = GraphQL::Client->new(
- %$transport,
- url => $url,
-);
-$client->transport; # just make sure we can load the transport
-
-if (!$query || $query eq '-') {
- print STDERR "Interactive mode engaged! Waiting for a query on <STDIN>...\n" if -t STDIN;
- $query = do { local $/; <> };
-}
-
-my $resp = $client->request($query, $variables);
-my $err = $resp->{errors};
-my $data = !$unpack || $err ? $resp : $resp->{data};
-
-if ($outfile) {
- open(my $out, '>', $outfile) or die "Open $outfile failed: $!";
- *STDOUT = $out;
-}
-
-$format = lc($format);
-if ($format eq 'json') {
- require JSON::MaybeXS;
- print JSON::MaybeXS->new(utf8 => 1)->encode($data);
-}
-elsif ($format eq 'json:pretty') {
- require JSON::MaybeXS;
- print JSON::MaybeXS->new(utf8 => 1, pretty => 1)->encode($data);
-}
-elsif ($format eq 'yaml') {
- require YAML;
- print YAML::Dump($data);
-}
-else {
- require Data::Dumper;
- print Data::Dumper::Dumper($data);
-}
-
-exit($unpack && $err ? 1 : 0);