async def METHOD_NAME(
    messenger: CanMessenger,
    write_to: TextIO,
) -> None:
    """A task that listens for can messages.
    Args:
        messenger: Messenger
        write_to: Destination to write to
    Returns: Nothing.
    """
    writer = Writer(write_to)
    label_style = "\033[0;37;40m"
    info_header_style = "\033[0;36;40m"
    info_data_style = "\033[1;36;40m"
    warn_header_style = "\033[0;33;40m"
    warn_data_style = "\033[1;33;40m"
    err_header_style = "\033[0;31;40m"
    err_data_style = "\033[1;31;40m"
    with WaitableCallback(messenger) as cb:
        async for message, arbitration_id in cb:
            try:
                msg_name = MessageId(arbitration_id.parts.message_id).name
                from_node = NodeId(arbitration_id.parts.originating_node_id).name
                to_node = NodeId(arbitration_id.parts.node_id).name
                arb_id_str = f"{msg_name} ({from_node}->{to_node})"
            except ValueError:
                arb_id_str = f"0x{arbitration_id.id:x}"
            if arbitration_id.parts.message_id == MessageId.error_message:
                err_msg = err_msg = cast(ErrorMessage, message)
                if (
                    ErrorSeverity(err_msg.payload.severity.value)
                    == ErrorSeverity.warning
                ):
                    header_style = warn_header_style
                    data_style = warn_data_style
                else:
                    header_style = err_header_style
                    data_style = err_data_style
            else:
                header_style = info_header_style
                data_style = info_data_style
            writer.write(
                [
                    StyledOutput(style=header_style, content=str(datetime.now())),
                    StyledOutput(style=data_style, content=arb_id_str + "\n"),
                ]
            )
            for name, value in (
                dict(
                    (field.name, getattr(message.payload, field.name))
                    for field in fields(message.payload)
                )
            ).items():
                writer.write(
                    [
                        StyledOutput(style=label_style, content=f"\t{name}:"),
                        StyledOutput(style=data_style, content=str(value) + "\n"),
                    ]
                )