<?php
namespace Incoviba\Common\Define\Repository;

use Incoviba\Common\Define\Model;

interface Mapper
{
    public function setProperty(string $property): Mapper;
    public function setFunction(callable $function): Mapper;
    public function setFactory(Factory $factory): Mapper;
    public function setDefault(mixed $value): Mapper;

    public function hasProperty(): bool;
    public function hasFunction(): bool;
    public function hasFactory(): bool;
    public function hasDefault(): bool;

    public function parse(Model &$model, string $column, ?array $data): bool;
}
