package BotConfig; use TOML qw/from_toml/; use MooseX::Singleton; use FindBin; use BotConfig::Server; use BotConfig::Database; use Data::Dumper; has env => ( is => 'ro', default => 'dev', ); has conf => ( is => 'ro', default => sub { my $dir = $FindBin::Bin; $dir =~ s{/(bin|lib|etc)/?$}{}g; open(my $fh, "<", $dir . "/etc/" . $_[0]->env . ".toml") or die "Couldn't open config: " . $dir . "/etc/" . $_[0]->env . ".toml" . " $!"; my $raw = do { local $/; <$fh> }; close($fh); my ($data, $error) = from_toml($raw); die "Config error: \n$error" if $error; my $server = BotConfig::Server->new($data->{server}); my $database = BotConfig::Database->new($data->{database}); return { server => $server, db => $database }; }, lazy => 1, ); sub server { my $self = $_[0]; return $self->conf->{server}; } sub db { return $_[0]->conf->{db}; } BEGIN { } 1;