#!/usr/bin/env perl use Data::Dumper; use Data::Dx; use Dios { accessors => 'unified' }; use Getopt::Long; use Path::Tiny; use Test::Expr; use 5.014_00; class Nada { has Int $.number is rw; }; class Yada { has Int $.number is rw; has Nada @.nadas is rw; }; # class Yada: BEGIN { # Let's confirm that Dios uses Object::InsideOut so we can "dump" and "pump" say $INC{'Object/InsideOut.pm'}; }; Getopt::Long::GetOptions( "initialize" => \my $initialize, "restore" => \my $restore, "save" => \my $save, ); say ""; Nada->new(), Yada->new(), say "initialized!" if ($initialize); sub test_our_yada { my $self=shift; ok $self->isa('Yada'); ok $self->number() == 0; ok @{$self->nadas()} == 2; Dx $self->nadas(); ok $self->nadas()->[0]->number() == 1; ok $self->nadas()->[1]->number() == 2; } if ($save) { # The "initial" Yada my $yada=Yada->new(number=>0,nadas=>[Nada->new(number=>1),Nada->new(number=>2)]); $yada->main::test_our_yada(); # $erialized and written to 'Yada.dat' Path::Tiny::path('Yada.dat')->spew_raw($yada->dump(1)); done_testing; } elsif ($restore) { # The restored from 'Yada.dat' Yada my $yada=Object::InsideOut->pump(Path::Tiny::path('Yada.dat')->slurp_raw()); $yada->main::test_our_yada(); done_testing; } else { warn "Needs a 'save' or a 'restore'."; } say ""; __END__