values(); $buffer = implode($this->columnSeparator, $this->normalizer->getHeaders()); $buffer .= $this->rowSeparator; $items->each(function (object $object) use (&$buffer) { $normalized = $this->normalizer->normalize($object); $buffer .= collect($normalized) ->map([CsvEncoder::class, 'formatBoolean']) ->map([CsvEncoder::class, 'formatEmpty']) ->implode($this->columnSeparator); $buffer .= $this->rowSeparator; }); return $buffer; } public static function formatBoolean(mixed $value): mixed { if (!is_bool($value)) { return $value; } return true === $value ? 'yes' : 'no'; } public static function formatEmpty(mixed $value): mixed { return empty($value) ? '-' : $value; } }