GinoPane/PHPolyglot

View on GitHub
src/API/Implementation/Translate/TranslateApiAbstract.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace GinoPane\PHPolyglot\API\Implementation\Translate;

use GinoPane\NanoRest\Request\RequestContext;
use GinoPane\NanoRest\Exceptions\TransportException;
use GinoPane\PHPolyglot\API\Implementation\ApiAbstract;
use GinoPane\NanoRest\Response\ResponseContextAbstract;
use GinoPane\PHPolyglot\Supplemental\Language\Language;
use GinoPane\NanoRest\Exceptions\ResponseContextException;
use GinoPane\PHPolyglot\Exception\BadResponseContextException;
use GinoPane\PHPolyglot\Exception\MethodDoesNotExistException;
use GinoPane\PHPolyglot\API\Response\Translate\TranslateResponse;

/**
 * Class TranslateApiAbstract
 *
 * @author Sergey <Gino Pane> Karavay
 */
abstract class TranslateApiAbstract extends ApiAbstract implements TranslateApiInterface
{
    /**
     * @param string   $text
     * @param Language $languageTo
     * @param Language $languageFrom
     *
     * @throws TransportException
     * @throws ResponseContextException
     * @throws BadResponseContextException
     * @throws MethodDoesNotExistException
     *
     * @return TranslateResponse
     */
    public function translate(string $text, Language $languageTo, Language $languageFrom): TranslateResponse
    {
        /** @var TranslateResponse $response */
        $response = $this->callApi(__FUNCTION__, func_get_args());

        return $response;
    }

    /**
     * @param array    $text
     * @param Language $languageTo
     * @param Language $languageFrom
     *
     * @throws TransportException
     * @throws ResponseContextException
     * @throws BadResponseContextException
     * @throws MethodDoesNotExistException
     *
     * @return TranslateResponse
     */
    public function translateBulk(array $text, Language $languageTo, Language $languageFrom): TranslateResponse
    {
        /** @var TranslateResponse $response */
        $response = $this->callApi(__FUNCTION__, func_get_args());

        return $response;
    }

    /**
     * Create request context for translate request
     *
     * @param string   $text
     * @param Language $languageTo
     * @param Language $languageFrom
     *
     * @return RequestContext
     */
    abstract protected function createTranslateContext(
        string $text,
        Language $languageTo,
        Language $languageFrom
    ): RequestContext;

    /**
     * Process response of translate request and prepare valid response
     *
     * @param ResponseContextAbstract $context
     *
     * @return TranslateResponse
     */
    abstract protected function prepareTranslateResponse(ResponseContextAbstract $context): TranslateResponse;

    /**
     * Create request context for bulk translate request
     *
     * @param array    $texts
     * @param Language $languageTo
     * @param Language $languageFrom
     *
     * @return RequestContext
     */
    abstract protected function createTranslateBulkContext(
        array $texts,
        Language $languageTo,
        Language $languageFrom
    ): RequestContext;

    /**
     * Process response of bulk translate request and prepare valid response
     *
     * @param ResponseContextAbstract $context
     *
     * @return TranslateResponse
     */
    abstract protected function prepareTranslateBulkResponse(ResponseContextAbstract $context): TranslateResponse;
}