Improve KoralQuery Import
diff --git a/lib/Krawfish/Koral/Query.pm b/lib/Krawfish/Koral/Query.pm
index 07193a5..b9b0721 100644
--- a/lib/Krawfish/Koral/Query.pm
+++ b/lib/Krawfish/Koral/Query.pm
@@ -1,12 +1,13 @@
package Krawfish::Koral::Query;
use parent 'Krawfish::Info';
use Krawfish::Koral::Query::Builder;
-use strict;
+use Krawfish::Koral::Query::Importer;
use warnings;
+use strict;
sub new {
my $class = shift;
- bless {
+ my $self = bless {
any => 0,
optional => 0,
null => 0,
@@ -15,6 +16,12 @@
extended_left => 0,
extended_right => 0
}, $class;
+
+ if ($_[0]) {
+ return $self->from_koral(shift);
+ };
+
+ $self;
};
#########################################
@@ -80,8 +87,34 @@
#############################
# Deserialization of KoralQuery
+# TODO: export this method from Importer
sub from_koral {
- ...
+ my ($class, $kq) = @_;
+ my $importer = Krawfish::Koral::Query::Importer->new;
+
+ my $type = $kq->{'@type'};
+ if ($type eq 'koral:group') {
+ my $op = $kq->{operation};
+ if ($op eq 'operation:sequence') {
+ return $importer->seq($kq);
+ }
+
+ elsif ($op eq 'operation:class') {
+ return $importer->class($kq);
+ }
+ else {
+ warn 'Operation ' . $op . ' not supported';
+ };
+ }
+
+ elsif ($type eq 'koral:token') {
+ return $importer->token($kq);
+ }
+ else {
+ warn $type . ' unknown';
+ };
+
+ return;
};
# Overwritten
@@ -98,6 +131,11 @@
return Krawfish::Koral::Query::Builder->new;
};
+# Create KoralQuery builder
+sub importer {
+ return Krawfish::Koral::Query::Importer->new;
+};
+
1;