private void WriteProperties()

in SharpGenTools.Sdk/Tasks/SharpPropertyCacheTask.cs [73:142]


        private void WriteProperties(Stream stream)
        {
            using var writer = new BinaryWriter(stream, TextEncoding, true);

            writer.Write(CacheFormatSignature);
            writer.Write(CacheFormatVersion);
            WriteStringArray(CastXmlArguments);
            WriteTaskItem(CastXmlExecutable);
            WriteTaskItems(ConfigFiles);
            WriteString(ConsumerBindMappingConfigId);
            WriteTaskItem(DocumentationCache);
            WriteBool(DocumentationFailuresAsErrors);
            WriteTaskItems(ExtensionAssemblies);
            WriteTaskItems(ExternalDocumentation);
            WriteString(GeneratedCodeFolder);
            WriteTaskItems(GlobalNamespaceOverrides);
            WriteTaskItem(InputsCache);
            WriteStringArray(Macros);
            WriteString(OutputPath);
            WriteTaskItems(Platforms);
            WriteTaskItems(SilenceMissingDocumentationErrorIdentifierPatterns);
            WriteTaskItem(ConsumerBindMappingConfig);

            void WriteString(string s)
            {
                if (s == null)
                {
                    writer.Write(0);
                    return;
                }

                writer.Write(s);
            }

            void WriteStringArray(IReadOnlyList<string> strings)
            {
                var length = strings.Count;
                writer.Write(length);
                for (var i = 0; i < length; i++)
                {
                    WriteString(strings[i]);
                }
            }

            void WriteTaskItem(ITaskItem item)
            {
                if (item == null)
                {
                    writer.Write(0);
                    return;
                }

                writer.Write(item.ItemSpec);
                var metadata = item.CloneCustomMetadata();
                var length = metadata.Count;
                writer.Write(length);
            }

            void WriteTaskItems(IReadOnlyList<ITaskItem> items)
            {
                var length = items.Count;
                writer.Write(length);
                for (var i = 0; i < length; i++)
                {
                    WriteTaskItem(items[i]);
                }
            }

            void WriteBool(bool v) => writer.Write(v);
        }