text: # -*- coding: utf-8 -*-
  
  from __future__ import absolute_import
  
  from .types import ARCHIVE as archive_matchers
  from .types import AUDIO as audio_matchers
  from .types import APPLICATION as application_matchers
  from .types import FONT as font_matchers
  from .types import IMAGE as image_matchers
  from .types import VIDEO as video_matchers
  from .types import TYPES
  from .utils import get_bytes
  
  
  def match(obj, matchers=TYPES):
      """
      Matches the given input against the available
      file type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if type matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      buf = get_bytes(obj)
  
      for matcher in matchers:
          if matcher.match(buf):
              return matcher
  
      return None
  
  
  def image_match(obj):
      """
      Matches the given input against the available
      image type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      return match(obj, image_matchers)
  
  
  def font_match(obj):
      """
      Matches the given input against the available
      font type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      return match(obj, font_matchers)
  
  
  def video_match(obj):
      """
      Matches the given input against the available
      video type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      return match(obj, video_matchers)
  
  
  def audio_match(obj):
      """
      Matches the given input against the available
      autio type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      return match(obj, audio_matchers)
  
  
  def archive_match(obj):
      """
      Matches the given input against the available
      archive type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      return match(obj, archive_matchers)
  
  
  def application_match(obj):
      """
      Matches the given input against the available
      application type matchers.
  
      Args:
          obj: path to file, bytes or bytearray.
  
      Returns:
          Type instance if matches. Otherwise None.
  
      Raises:
          TypeError: if obj is not a supported type.
      """
      return match(obj, application_matchers)
  