/// <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); }
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); }
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); }
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); }
/// <summary> /// Returns all registered <code>FileWriter<T></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> >()); }