1: | <?php declare(strict_types=1); |
2: | |
3: | namespace Salient\Core\Concern; |
4: | |
5: | use Salient\Contract\Core\Buildable; |
6: | use Salient\Contract\Core\BuilderInterface; |
7: | |
8: | /** |
9: | * @api |
10: | * |
11: | * @template TBuilder of BuilderInterface |
12: | * |
13: | * @phpstan-require-implements Buildable<TBuilder> |
14: | */ |
15: | trait BuildableTrait |
16: | { |
17: | /** |
18: | * Get the name of a builder for the class |
19: | * |
20: | * @return class-string<TBuilder> |
21: | */ |
22: | protected static function getBuilder(): string |
23: | { |
24: | return self::class . 'Builder'; |
25: | } |
26: | |
27: | /** |
28: | * @inheritDoc |
29: | */ |
30: | public static function build(): BuilderInterface |
31: | { |
32: | return static::getBuilder()::create(); |
33: | } |
34: | |
35: | /** |
36: | * @inheritDoc |
37: | */ |
38: | public static function resolve($object) |
39: | { |
40: | /** @var static */ |
41: | return static::getBuilder()::resolve($object); |
42: | } |
43: | } |
44: |