예제 #1
0
        /// <summary>
        /// Returns all registered <code>FileWriter</code>s that can write the object and satisfy both the filter and format preference.
        /// Writers are sorted by descending relevance as determined by the <code>FormatPreference</code>.
        /// </summary>
        /// <param name="obj">Object for the <code>FileReader.CanRead</code> check</param>
        /// <param name="pref">A format preference used to filter and rank writers</param>
        /// <param name="filter">A filter to select only some writers</param>
        /// <returns>All registered <code>FileWriter</code>s that can write the object and satisfy both the filter and format preference</returns>
        public static List <FileWriter> FindWriters(object obj, FormatPreference pref, Predicate <FileWriter> filter = null)
        {
            var writers = FindWriters(obj, fw => (filter?.Invoke(fw) ?? true) && (pref ?? FormatPreference.Default).Allows(fw)).ToList();

            writers.Sort(pref ?? FormatPreference.Default);
            return(writers);
        }
예제 #2
0
        public static void Encode <T>(T obj, string baseName, FileSystem fs, FormatPreference pref, FileList files) where T : class
        {
            pref = pref ?? FormatPreference.Default;
            var writers = FindWriters <T>(obj, pref).ToList();

            if (!writers.Any())
            {
                throw new InvalidOperationException("No writer found for type " + typeof(T).Name);
            }

            writers.First().Write(obj, baseName, fs, files);
        }
예제 #3
0
        public static void EncodeObject(object obj, string baseName, FileSystem fs, FormatPreference pref, FileList files)
        {
            pref = pref ?? FormatPreference.Default;
            var writers = FindWriters(obj, pref);

            if (!writers.Any())
            {
                throw new InvalidOperationException("No writer found for object");
            }

            writers.First().WriteObject(obj, baseName, fs, files);
        }
예제 #4
0
        public static Format EncodeObject(object obj, Stream s, FormatPreference pref)
        {
            pref = pref ?? FormatPreference.Default;
            var writers = FindWriters(obj, pref);

            if (!writers.Any())
            {
                throw new InvalidOperationException("No writer found for object");
            }

            var fileWriter = writers.First();

            fileWriter.WriteObject(obj, s);
            return(fileWriter.Format);
        }
예제 #5
0
 /// <summary>
 /// Returns all registered <code>FileWriter&lt;T&gt;</code>s with that can write the object and satisfy the format preference.
 /// </summary>
 /// <param name="obj">Object for the <code>FileReader.CanRead</code> check</param>
 /// <param name="pref">A format preference used to filter and rank writers</param>
 /// <returns>All registered <code>FileWriter</code>s that can write the object and satisfy the format preference</returns>
 public static IEnumerable <FileWriter <T> > FindWriters <T>(object obj, FormatPreference pref) where T : class
 {
     return(FindWriters(obj, pref, fw => fw is FileWriter <T>).Cast <FileWriter <T> >());
 }