def recognizeBackends(b: EntryPoint) -> BackendDescriptor:
    if hasattr(b.__class__,
               "__slots__") and "metadata" in b.__class__.__slots__:
        metadata = b.metadata
    else:
        encoded = b.name.split("@", 1)
        b.name = encoded[0]
        if len(encoded) > 1:
            try:
                metadata = utils.json.loads(encoded[1])
            except BaseException:
                warnings.warn(
                    "Entry point " + repr(b) +
                    " is invalid. The value after @ must be must be a valid JSON!."
                )
                return BackendDescriptor(b, b.name,
                                         prio=-1)  # broken, so not using
        else:
            metadata = None

    if metadata is not None:
        if isinstance(metadata, int):
            return BackendDescriptor(b, b.name,
                                     prio=metadata)  # it is priority
        elif isinstance(metadata, dict):
            return BackendDescriptor(b, b.name, **metadata)
        else:
            warnings.warn(
                "Entry point " + repr(b) +
                " is invalid. The value after @ must be must be eithera dict, or a number!."
            )
            return BackendDescriptor(b, b.name,
                                     prio=-1)  # broken, so not using
    else:
        return BackendDescriptor(b, b.name)