metabot/lib/MetaBot/Config.pm

51 lines
No EOL
1.1 KiB
Perl

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;