Marks the decorated class as a component implementing the given ``iface``

    :param iface: the interface to implement
    :type iface: :func:`interface`

def component(iface):
    '''
    Marks the decorated class as a component implementing the given ``iface``

    :param iface: the interface to implement
    :type iface: :func:`interface`
    '''

    def decorator(cls):
        if not cls:
            return None

        # Run custom verificator if any
        if hasattr(cls, '__verify__'):
            if not cls.__verify__():
                return None

        if not hasattr(iface, 'implementations'):
            log.error('%s is not an @interface', iface)

        log.debug(
            'Registering [%s] (implementation of [%s])' % (
                get_fqdn(cls),
                get_fqdn(iface)
            )
        )
        iface.implementations.append(cls)

        def get(cls, context):
            return context.get_component(cls)
        cls.get = get.__get__(cls)

        return cls

    return decorator