// How to specify version?
        public static string SerializeManifest(string inputfile, int version)
        {
            var outfile = Path.Combine(Directory.GetParent(inputfile).FullName, Path.GetFileNameWithoutExtension(inputfile) + @".m3m");

            using MemoryStream fs = new MemoryStream();
            fs.WriteStringLatin1(MERGEMOD_MAGIC);
            fs.WriteByte((byte)version);
            IList <string> messages = null;

            switch (version)
            {
            case 1:
                messages = MergeMod1.Serialize(fs, inputfile);
                break;

            default:
                throw new Exception(M3L.GetString(M3L.string_interp_unsupportedMergeModVersionVersionX, version));
            }

            if (messages != null)
            {
                // Will be caught higher up
                throw new Exception(M3L.GetString(M3L.string_interp_invalidMergeModManifestReason, string.Join('\n', messages)));
            }

            fs.WriteToFile(outfile);
            return(outfile);
        }
        public static IMergeMod LoadMergeMod(Stream mergeFileStream, string filename, bool loadAssets)
        {
            if (mergeFileStream.ReadStringASCII(4) != MERGEMOD_MAGIC)
            {
                throw new Exception(M3L.GetString(M3L.string_mergeModFileDoesNotHaveCorrectMagicHeader));
            }

            var version = mergeFileStream.ReadByte();

            switch (version)
            {
            case 1:
                return(MergeMod1.ReadMergeMod(mergeFileStream, filename, loadAssets));

            default:
                return(null);
            }
        }