33namespace ProgrammatorDev \OpenWeatherMap ;
44
55use ProgrammatorDev \OpenWeatherMap \HttpClient \HttpClientBuilder ;
6+ use ProgrammatorDev \OpenWeatherMap \HttpClient \Plugin \LoggerPlugin ;
67use ProgrammatorDev \OpenWeatherMap \Validator \BlankValidatorTrait ;
78use ProgrammatorDev \OpenWeatherMap \Validator \ChoiceValidatorTrait ;
89use Psr \Cache \CacheItemPoolInterface ;
10+ use Psr \Log \LoggerInterface ;
911use Symfony \Component \OptionsResolver \OptionsResolver ;
1012
1113class Config
@@ -19,8 +21,9 @@ public function __construct(array $options = [])
1921 {
2022 $ resolver = new OptionsResolver ();
2123 $ this ->configureOptions ($ resolver );
22-
2324 $ this ->options = $ resolver ->resolve ($ options );
25+
26+ $ this ->configureAware ();
2427 }
2528
2629 private function configureOptions (OptionsResolver $ resolver ): void
@@ -29,7 +32,8 @@ private function configureOptions(OptionsResolver $resolver): void
2932 'measurementSystem ' => MeasurementSystem::METRIC ,
3033 'language ' => Language::ENGLISH ,
3134 'httpClientBuilder ' => new HttpClientBuilder (),
32- 'cache ' => null
35+ 'cache ' => null ,
36+ 'logger ' => null
3337 ]);
3438
3539 $ resolver ->setRequired ('applicationKey ' );
@@ -39,6 +43,7 @@ private function configureOptions(OptionsResolver $resolver): void
3943 $ resolver ->setAllowedTypes ('language ' , 'string ' );
4044 $ resolver ->setAllowedTypes ('httpClientBuilder ' , HttpClientBuilder::class);
4145 $ resolver ->setAllowedTypes ('cache ' , ['null ' , CacheItemPoolInterface::class]);
46+ $ resolver ->setAllowedTypes ('logger ' , ['null ' , LoggerInterface::class]);
4247
4348 $ resolver ->setAllowedValues ('applicationKey ' , function ($ value ) {
4449 return !empty ($ value );
@@ -47,6 +52,15 @@ private function configureOptions(OptionsResolver $resolver): void
4752 $ resolver ->setAllowedValues ('language ' , Language::getList ());
4853 }
4954
55+ private function configureAware (): void
56+ {
57+ if ($ this ->getLogger () !== null ) {
58+ $ this ->getHttpClientBuilder ()->addPlugin (
59+ new LoggerPlugin ($ this ->getLogger ())
60+ );
61+ }
62+ }
63+
5064 public function getApplicationKey (): string
5165 {
5266 return $ this ->options ['applicationKey ' ];
@@ -112,4 +126,16 @@ public function setCache(?CacheItemPoolInterface $cache): self
112126
113127 return $ this ;
114128 }
129+
130+ public function getLogger (): ?LoggerInterface
131+ {
132+ return $ this ->options ['logger ' ];
133+ }
134+
135+ public function setLogger (?LoggerInterface $ logger ): self
136+ {
137+ $ this ->options ['logger ' ] = $ logger ;
138+
139+ return $ this ;
140+ }
115141}
0 commit comments