51 lines
No EOL
1.1 KiB
Perl
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; |