1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
<?php
/**
* Copyright (c) 2016 Bernardo van der Wal
* MIT License
*
* Refer to the LICENSE file for the full copyright notice.
*/
namespace OneOfZero\Json\ContractResolvers;
use OneOfZero\Json\Mappers\Contract\ContractMemberMapper;
use OneOfZero\Json\Mappers\Contract\ContractObjectMapper;
use OneOfZero\Json\Mappers\MemberMapperInterface;
use OneOfZero\Json\Mappers\ObjectMapperInterface;
use OneOfZero\Json\Nodes\AbstractObjectNode;
use OneOfZero\Json\Nodes\MemberNode;
/**
* Defines the interface for a contract resolver.
*
* A contract resolver allows you to overlay your own mapper over the pipeline for each node visited by the serializer
* and deserializer. While setting up your own mapper may sound complicated, there are the ContractObjectMapper and
* ContractMemberMapper classes that allow you to handset the mapper values without needing to write your own mappers.
*
* For an example contract resolver see the PropertyNameContractResolver class.
*/
interface ContractResolverInterface
{
/**
* Should return a mapper for the provided object node.
*
* @param AbstractObjectNode $object
*
* @return ObjectMapperInterface|ContractObjectMapper|null
*/
public function createSerializingObjectContract(AbstractObjectNode $object);
/**
* Should return a mapper for the provided object node.
*
* @param AbstractObjectNode $object
*
* @return ObjectMapperInterface|ContractObjectMapper|null
*/
public function createDeserializingObjectContract(AbstractObjectNode $object);
/**
* Should return a mapper for the provided member node.
*
* @param MemberNode $member
*
* @return MemberMapperInterface|ContractMemberMapper|null
*/
public function createSerializingMemberContract(MemberNode $member);
/**
* Should return a mapper for the provided member node.
*
* @param MemberNode $member
*
* @return MemberMapperInterface|ContractMemberMapper|null
*/
public function createDeserializingMemberContract(MemberNode $member);
}