def write_header()

in python/pyfury/_serializer.py [0:0]


    def write_header(self, buffer, value):
        collect_flag = COLLECTION_DEFAULT_FLAG
        elem_type = self.elem_type
        elem_typeinfo = self.elem_typeinfo
        has_null = False
        has_different_type = False
        if elem_type is None:
            collect_flag |= COLLECTION_NOT_DECL_ELEMENT_TYPE
            for s in value:
                if not has_null and s is None:
                    has_null = True
                    continue
                if elem_type is None:
                    elem_type = type(s)
                elif not has_different_type and type(s) is not elem_type:
                    collect_flag |= COLLECTION_NOT_SAME_TYPE
                    has_different_type = True
            if not has_different_type and elem_type is not None:
                elem_typeinfo = self.class_resolver.get_classinfo(elem_type)
        else:
            for s in value:
                if s is None:
                    has_null = True
                    break
        if has_null:
            collect_flag |= COLLECTION_HAS_NULL
        if self.fury.ref_tracking:
            if self.elem_tracking_ref == 1:
                collect_flag |= COLLECTION_TRACKING_REF
            elif self.elem_tracking_ref == -1:
                if has_different_type or elem_typeinfo.serializer.need_to_write_ref:
                    collect_flag |= COLLECTION_TRACKING_REF
        buffer.write_varuint32(len(value))
        buffer.write_int8(collect_flag)
        if (
            not has_different_type
            and (collect_flag & COLLECTION_NOT_DECL_ELEMENT_TYPE) != 0
        ):
            self.class_resolver.write_typeinfo(buffer, elem_typeinfo)
        return collect_flag, elem_typeinfo