def _convert_fields(self, fields: Dict[str, Any]) -> List[GLib.LogField]: """ Convert a record fields to an list of :py:class:`GLib.LogField`. :param fields: The fields to convert. :returns: The converted fields. """ log_fields: List[GLib.LogField] = [] for key, value in fields.items(): # TODO: Convert GLib Variants if isinstance(value, str): length = -1 cvalue = ctypes.create_string_buffer(value.encode('utf-8')) else: if not isinstance(value, bytes): value = str(value).encode('utf-8') length = len(value) cvalue = ctypes.create_string_buffer(value, len(value)) log_field = GLib.LogField() log_field.key = key log_field.length = length log_field.value = ctypes.addressof(cvalue) # Keep cvalue buffer alive until after logging (using) it setattr(log_field, '_p2g_value_ctypes', cvalue) log_fields.append(log_field) return log_fields