/// <summary>
        /// Load an asset file by filename.
        /// </summary>
        /// <param name="part"></param>
        /// <param name="filename"></param>
        /// <returns>loaded asset, or null if file was not found</returns>
        /// <exception cref="Exception">on problem loading asset</exception>
        public static IAsset Load(this IAssetLoaderPart part, string filename)
        {
            var match = part.Pattern.Match(filename);

            if (!match.Success)
            {
                return(null);
            }
            return(part.Load(match));
        }
 /// <summary>
 /// Configure options, for chain calls.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="configurer">delegeate that modifies options</param>
 /// <returns>part</returns>
 public static IAssetLoaderPart ConfigureOptions(this IAssetLoaderPart part, Action <IAssetLoaderPartOptions> configurer)
 {
     configurer(part.Options);
     return(part);
 }
 /// <summary>
 /// Set options, for chain calls.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="options">new options</param>
 /// <returns>part</returns>
 public static IAssetLoaderPart SetOptions(this IAssetLoaderPart part, IAssetLoaderPartOptions options)
 {
     part.Options = options;
     return(part);
 }
 /// <summary>
 /// List filenames
 /// </summary>
 /// <param name="part"></param>
 /// <returns></returns>
 public static IEnumerable <string> ListFiles(this IAssetLoaderPart part)
 => part.ListLoadables().Select(param => part.Pattern.Print(param));
 /// <summary>
 /// Append new base path(s) top search file resources from.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="paths"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddPaths(this IAssetLoaderPart part, params String[] paths)
 {
     part.Options.AddPaths(paths);
     return(part);
 }
 /// <summary>
 /// Append new base path(s) top search file resources from.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="paths"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddPaths(this IAssetLoaderPart part, IEnumerable <String> paths)
 {
     part.Options.AddPaths(paths);
     return(part);
 }
 /// <summary>
 /// Append new base path(s) top search file resources from.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="path"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddPath(this IAssetLoaderPart part, String path)
 {
     part.Options.AddPath(path);
     return(part);
 }
 /// <summary>
 /// Append new assemblies to search embedded resources from.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="assemblies"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddAssemblies(this IAssetLoaderPart part, IEnumerable <Assembly> assemblies)
 {
     part.Options.AddAssemblies(assemblies);
     return(part);
 }
 /// <summary>
 /// Append new assemblies to search embedded resources from.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="assemblies"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddAssemblies(this IAssetLoaderPart part, params Assembly[] assemblies)
 {
     part.Options.AddAssemblies(assemblies);
     return(part);
 }
 /// <summary>
 /// Append new assemblies to search embedded resources from.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="assembly"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddAssembly(this IAssetLoaderPart part, Assembly assembly)
 {
     part.Options.AddAssemblies(assembly);
     return(part);
 }
 /// <summary>
 /// Append new parameters to match parameters property.
 /// </summary>
 /// <param name="part"></param>
 /// <param name="parameters"></param>
 /// <returns>part</returns>
 public static IAssetLoaderPart AddMatchParameters(this IAssetLoaderPart part, params string[] parameters)
 {
     part.Options.AddMatchParameters(parameters);
     return(part);
 }