diff --git a/lib/Client/Protocol/Command/FetchManyCommand.php b/lib/Client/Protocol/Command/FetchManyCommand.php index eb7d658..1c52ced 100644 --- a/lib/Client/Protocol/Command/FetchManyCommand.php +++ b/lib/Client/Protocol/Command/FetchManyCommand.php @@ -6,7 +6,7 @@ namespace KTXM\ProviderImap\Client\Protocol\Command; use KTXM\ProviderImap\Client\Protocol\IdentifierMode; -use KTXM\ProviderImap\Client\Protocol\Parser\FetchResponseParser; +use KTXM\ProviderImap\Client\Protocol\FetchResultReader; use Generator; use KTXM\ProviderImap\Client\Protocol\Command\Argument\MessageTarget; use KTXM\ProviderImap\Client\Protocol\Command\Argument\FetchOptions; @@ -65,6 +65,6 @@ final class FetchManyCommand implements CommandInterface throw new ImapException('FETCH requires a selected mailbox.'); } - return (new FetchResponseParser())->parseMany($responses); + return (new FetchResultReader())->readMany($responses); } } \ No newline at end of file diff --git a/lib/Client/Protocol/Command/FetchOneCommand.php b/lib/Client/Protocol/Command/FetchOneCommand.php index 38edd7b..5000ac4 100644 --- a/lib/Client/Protocol/Command/FetchOneCommand.php +++ b/lib/Client/Protocol/Command/FetchOneCommand.php @@ -6,7 +6,7 @@ namespace KTXM\ProviderImap\Client\Protocol\Command; use KTXM\ProviderImap\Client\Protocol\IdentifierMode; -use KTXM\ProviderImap\Client\Protocol\Parser\FetchResponseParser; +use KTXM\ProviderImap\Client\Protocol\FetchResultReader; use KTXM\ProviderImap\Client\Protocol\Command\Argument\MessageTarget; use KTXM\ProviderImap\Client\Protocol\Command\Argument\FetchOptions; use KTXM\ProviderImap\Client\ImapException; @@ -60,6 +60,6 @@ final class FetchOneCommand implements CommandInterface throw new ImapException('FETCH requires a selected mailbox.'); } - return (new FetchResponseParser())->parseOne($responses); + return (new FetchResultReader())->readOne($responses); } } \ No newline at end of file diff --git a/lib/Client/Protocol/Parser/FetchResponseParser.php b/lib/Client/Protocol/FetchResultReader.php similarity index 62% rename from lib/Client/Protocol/Parser/FetchResponseParser.php rename to lib/Client/Protocol/FetchResultReader.php index 79936e5..4aca8c5 100644 --- a/lib/Client/Protocol/Parser/FetchResponseParser.php +++ b/lib/Client/Protocol/FetchResultReader.php @@ -2,23 +2,25 @@ declare(strict_types=1); -namespace KTXM\ProviderImap\Client\Protocol\Parser; +namespace KTXM\ProviderImap\Client\Protocol; use Generator; use KTXM\ProviderImap\Client\ImapException; use KTXM\ProviderImap\Client\Message; -use KTXM\ProviderImap\Client\Protocol\Parser\MessageParser; +use KTXM\ProviderImap\Client\Protocol\Parser\FetchMessageParser; use KTXM\ProviderImap\Client\Protocol\Response\TaggedResponse; use KTXM\ProviderImap\Client\Protocol\Response\UntaggedResponse; -use KTXM\ProviderImap\Client\Protocol\ResponseStream; -final class FetchResponseParser +/** + * Reads FETCH messages from a response stream and validates command completion. + */ +final class FetchResultReader { - public function parseOne(ResponseStream $responses): Message + public function readOne(ResponseStream $responses): Message { $message = null; - foreach ($this->parseMany($responses) as $summary) { + foreach ($this->readMany($responses) as $summary) { if ($message !== null) { throw new ImapException('FETCH returned multiple messages for a single-message request.'); } @@ -34,13 +36,15 @@ final class FetchResponseParser } /** + * Consume the generator fully to reach and validate the tagged completion. + * * @return Generator */ - public function parseMany(ResponseStream $responses): Generator + public function readMany(ResponseStream $responses): Generator { foreach ($responses as $response) { - if ($response instanceof UntaggedResponse && MessageParser::isFetchMessage($response->raw())) { - yield MessageParser::parse($response->raw()); + if ($response instanceof UntaggedResponse && FetchMessageParser::isFetchMessage($response->raw())) { + yield FetchMessageParser::parse($response->raw()); continue; } diff --git a/lib/Client/Protocol/Parser/MessageParser.php b/lib/Client/Protocol/Parser/FetchMessageParser.php similarity index 99% rename from lib/Client/Protocol/Parser/MessageParser.php rename to lib/Client/Protocol/Parser/FetchMessageParser.php index aa4c63d..a2381e1 100644 --- a/lib/Client/Protocol/Parser/MessageParser.php +++ b/lib/Client/Protocol/Parser/FetchMessageParser.php @@ -10,7 +10,10 @@ use KTXM\ProviderImap\Client\MessageAddress; use KTXM\ProviderImap\Client\MessagePart; use DateTimeInterface; -final class MessageParser +/** + * Decodes an individual untagged FETCH response into a message. + */ +final class FetchMessageParser { public static function isFetchMessage(string $raw): bool {