ldc-boutique-cnc-sable/app/Providers/SerialCasterServiceProvider.php

57 lines
1.6 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
namespace App\Providers;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\ServiceProvider;
use Kwaadpepper\Serial\Converters\BaseConverter;
use Kwaadpepper\Serial\Converters\BCMathBaseConverter;
use Kwaadpepper\Serial\Converters\GmpBaseConverter;
use Kwaadpepper\Serial\Converters\NativeBaseConverter;
use Kwaadpepper\Serial\SerialCasterBuilder;
use Kwaadpepper\Serial\Shufflers\FisherYatesShuffler;
use Kwaadpepper\Serial\Shufflers\Shuffler;
class SerialCasterServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
#[\Override]
public function register()
{
$this->app->singleton(
BaseConverter::class,
fn () => match (true) {
extension_loaded('bcmath') => new BCMathBaseConverter(),
extension_loaded('gmp') => new GmpBaseConverter(),
default => new NativeBaseConverter(),
}
);
$this->app->singleton(
Shuffler::class,
fn () => new FisherYatesShuffler()
);
$this->app->singleton(
SerialCasterBuilder::class,
function (Application $app) {
$converter = $app->make(BaseConverter::class);
$shuffler = $app->make(Shuffler::class);
$seed = Config::integer('serial-caster.seed');
return new SerialCasterBuilder($converter)
->withShuffler($shuffler)
->withSeed($seed);
}
);
}
}