use v5.32; use Object::Pad; use strict; use warnings; #use Syntax::Keyword::Try; class MetaBot::Config { use Path::Tiny qw/path/; use TOML qw/from_toml/; has $_data; BUILD { my ($file) = @_; my $pf = path($file); my $raw_toml = $pf->slurp_utf8(); $_data = from_toml($raw_toml); } method get_list($section, %args) { # try { my @rendered = (); for my $item ($_data->{$section}->@*) { # make a shallow copy so we don't accidentally set the config data to a default for a given part of the program my $shallow = +{$item->%*}; if (defined $args{default}) { for my $def (keys $args{default}->%*) { $shallow->{$def} //= $args{default}{$def}; } } push @rendered, $shallow; } return \@rendered; # } catch($e) { # # TODO error handling # return undef; # } } # TODO make this handle sections method get_string($name, %args) { $name =~ s/^@//; # does @ mean root/general? TODO #print STDERR "GETTING $name\n"; $_data->{general}{$name} // $args{default} } } 1;