using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tango.Protobuf
{
///
/// Represents a protobuf messages compiler.
///
public interface IProtoCompiler : IDisposable
{
///
/// Occurs when the compiler has made some progress.
///
event EventHandler CompilationProgress;
///
/// Compiles the specified .proto message file.
///
/// .proto file to compile
/// A list of compiled results.
IEnumerable CompileFile(String inputFile);
///
/// Compiles the specified .proto message file asynchronously.
///
/// .proto file to compile
/// A list of compiled results.
Task> CompileFileAsync(String inputFile);
///
/// Compiles all files in the specified folder recursively.
///
/// The source folder
/// Compilation result.
CompilerFolderResult CompileFolder(String sourceFolder, params String[] includeFolders);
///
/// Compiles all files in the specified folder recursively and asynchronously.
///
/// The source folder
/// Compilation result.
Task CompileFolderAsync(String sourceFolder);
///
/// Gets the compiler language.
///
CompilerLanguage Language { get; }
///
/// Gets the proto imports folders.
///
List ImportsFolders { get; }
///
/// Gets a value indicating whether this compiler uses the default folder structure when generating code.
///
bool UsesDefaultStructure { get; }
}
}