def serialize_srg(mappings: AbstractMappings) -> Iterator[str]:
    """
    A generator that serializes the lines

    I'm not sure if this documentation is correct, since i'm not quite used to thinking of methods as object

    :param mappings: the mappings to serialize
    :return: a generator that serializes the mappings
    :raises ValueError: if the mappings are invalid
    """
    for original, renamed in mappings.classes():
        yield " ".join(["CL:", original.get_internal_name(), renamed.get_internal_name()])
    for original, renamed in mappings.fields():
        yield " ".join(["FD:", original.get_internal_name(), renamed.get_internal_name()])
    for original, renamed in mappings.methods():
        yield " ".join(
            [
                "MD:",
                # Original method
                original.get_internal_name(),
                original.get_method_signature(),
                # Renamed method
                renamed.get_internal_name(),
                renamed.get_method_signature(),
            ]
        )
def strip_duplicates(mappings: AbstractMappings) -> ImmutableMappings:
    classes = dict()  # type: Dict[Type, Type]
    fields = dict()  # type: Dict[FieldData, FieldData]
    methods = dict()  # type: Dict[MethodData, MethodData]
    for original, renamed in mappings.classes():
        if original == renamed: continue
        classes[original] = renamed
    for original, renamed in mappings.fields():
        if original.name == renamed.name: continue
        fields[original] = renamed
    for original, renamed in mappings.methods():
        if original.name == renamed.name: continue
        methods[original] = renamed
    return ImmutableMappings(classes, fields, methods)