# Path: aiohttp_json_api/jsonpointer.py
# class JSONPointer(BaseJsonPointer):
#     def __truediv__(self,
#                     path: typing.Union['JSONPointer', str]) -> 'JSONPointer':
#         parts = self.parts.copy()
# 
#         if isinstance(path, int):
#             path = str(path)
# 
#         if isinstance(path, str):
#             if not path.startswith('/'):
#                 path = f'/{path}'
#             new_parts = JSONPointer(path).parts.pop(0)
#             parts.append(new_parts)
#         else:
#             new_parts = path.parts
#             parts.extend(new_parts)
#         return JSONPointer.from_parts(parts)


import abc
from typing import Optional
from ..jsonpointer import JSONPointer
"""
Field abstract base class
=========================
"""




class FieldABC(abc.ABC):
    @property
    @abc.abstractmethod
    def key(self) -> str:
        raise NotImplementedError

    @property
    @abc.abstractmethod

# Path: aiohttp_json_api/jsonpointer.py
# class JSONPointer(BaseJsonPointer):
#     def __truediv__(self,
#                     path: typing.Union['JSONPointer', str]) -> 'JSONPointer':
#         parts = self.parts.copy()
# 
#         if isinstance(path, int):
#             path = str(path)
# 
#         if isinstance(path, str):
#             if not path.startswith('/'):
#                 path = f'/{path}'
#             new_parts = JSONPointer(path).parts.pop(0)
#             parts.append(new_parts)
#         else:
#             new_parts = path.parts
#             parts.extend(new_parts)
#         return JSONPointer.from_parts(parts)


# Path: aiohttp_json_api/abc/field.py
import abc
from typing import Optional
from ..jsonpointer import JSONPointer

"""
Field abstract base class
=========================
"""




class FieldABC(abc.ABC):
    @property
    @abc.abstractmethod
    def key(self) -> str:
        raise NotImplementedError

    @property
    @abc.abstractmethod

    def sp(self) -> JSONPointer: