private static SerializableAssetPackConfig Serialize(AssetDeliveryConfig assetDeliveryConfig)
        {
            var config = new SerializableAssetPackConfig
            {
                DefaultTextureCompressionFormat = assetDeliveryConfig.DefaultTextureCompressionFormat,
                splitBaseModuleAssets           = assetDeliveryConfig.SplitBaseModuleAssets
            };

            foreach (var assetPack in assetDeliveryConfig.AssetBundlePacks.Values)
            {
                config.assetBundles.Add(new SerializableMultiTargetingAssetBundle
                {
                    name         = assetPack.Name,
                    DeliveryMode = assetPack.DeliveryMode,
                    assetBundles = assetPack.Variants.Select(pack => new SerializableAssetBundle
                    {
                        path = pack.Value.Path,
                        TextureCompressionFormat = pack.Key
                    }).ToList()
                });
            }

            config.assetPacks = assetDeliveryConfig.rawAssetsPacks;

            return(config);
        }
        private static AssetDeliveryConfig Deserialize(SerializableAssetPackConfig config)
        {
            var assetDeliveryConfig = new AssetDeliveryConfig
            {
                DefaultTextureCompressionFormat = config.DefaultTextureCompressionFormat,
                SplitBaseModuleAssets           = config.splitBaseModuleAssets
            };

            var paths = new HashSet <string>();

            foreach (var multiTargetingAssetBundle in config.assetBundles)
            {
                paths.UnionWith(
                    multiTargetingAssetBundle.assetBundles.Select(item => Path.GetDirectoryName(item.path)));
                assetDeliveryConfig.AssetBundlePacks.Add(multiTargetingAssetBundle.name,
                                                         new AssetBundlePack(multiTargetingAssetBundle.name,
                                                                             multiTargetingAssetBundle.DeliveryMode));
            }

            paths.ToList().ForEach(path => assetDeliveryConfig.Folders.Add(path, new AssetBundleFolder(path)));

            assetDeliveryConfig.rawAssetsPacks = config.assetPacks;

            return(assetDeliveryConfig);
        }
        /// <summary>
        /// Returns an AssetDeliveryConfig loaded from disk.
        /// </summary>
        public static AssetDeliveryConfig LoadConfig()
        {
            Debug.LogFormat("Loading {0}", SerializationHelper.ConfigurationFilePath);
            SerializableAssetPackConfig config;

            if (File.Exists(SerializationHelper.ConfigurationFilePath))
            {
                var jsonText = File.ReadAllText(SerializationHelper.ConfigurationFilePath);
                config = JsonUtility.FromJson <SerializableAssetPackConfig>(jsonText);
            }
            else
            {
                config = new SerializableAssetPackConfig();
            }

            return(Deserialize(config));
        }