<?php
namespace ZBateson\MailMimeParser\Header\Part;
use Psr\Log\LoggerInterface;
use ZBateson\MailMimeParser\Header\IHeaderPart;
use ZBateson\MbWrapper\MbWrapper;
class HeaderPartFactory
{
protected MbWrapper $charsetConverter;
protected LoggerInterface $logger;
public function __construct(LoggerInterface $logger, MbWrapper $charsetConverter)
{
$this->logger = $logger;
$this->charsetConverter = $charsetConverter;
}
public function newInstance(string $value) : IHeaderPart
{
return $this->newToken($value);
}
public function newToken(string $value, bool $isLiteral = false, bool $preserveSpaces = false) : Token
{
return new Token($this->logger, $this->charsetConverter, $value, $isLiteral, $preserveSpaces);
}
public function newSubjectToken(string $value) : SubjectToken
{
return new SubjectToken($this->logger, $this->charsetConverter, $value);
}
public function newMimeToken(string $value) : MimeToken
{
return new MimeToken($this->logger, $this->charsetConverter, $value);
}
public function newContainerPart(array $children) : ContainerPart
{
return new ContainerPart($this->logger, $this->charsetConverter, $children);
}
public function newSplitParameterPart(array $children) : SplitParameterPart
{
return new SplitParameterPart($this->logger, $this->charsetConverter, $this, $children);
}
public function newQuotedLiteralPart(array $parts) : QuotedLiteralPart
{
return new QuotedLiteralPart($this->logger, $this->charsetConverter, $parts);
}
public function newCommentPart(array $children) : CommentPart
{
return new CommentPart($this->logger, $this->charsetConverter, $this, $children);
}
public function newAddress(array $nameParts, array $emailParts) : AddressPart
{
return new AddressPart($this->logger, $this->charsetConverter, $nameParts, $emailParts);
}
public function newAddressGroupPart(array $nameParts, array $addressesAndGroups) : AddressGroupPart
{
return new AddressGroupPart($this->logger, $this->charsetConverter, $nameParts, $addressesAndGroups);
}
public function newDatePart(array $children) : DatePart
{
return new DatePart($this->logger, $this->charsetConverter, $children);
}
public function newParameterPart(array $nameParts, ContainerPart $valuePart) : ParameterPart
{
return new ParameterPart($this->logger, $this->charsetConverter, $nameParts, $valuePart);
}
public function newReceivedPart(string $name, array $children) : ReceivedPart
{
return new ReceivedPart($this->logger, $this->charsetConverter, $name, $children);
}
public function newReceivedDomainPart(string $name, array $children) : ReceivedDomainPart
{
return new ReceivedDomainPart(
$this->logger,
$this->charsetConverter,
$name,
$children
);
}
}