in net/JetBrains.SignatureExtractor/src/SignatureOperations.cs [13:43]
public static async Task ExtractSignature(Stream inputFile, Stream output)
{
if (!inputFile.CanSeek)
throw new SignatureExtractionException("Input file must be seekable");
var fileType = FileTypeExplorer.Detect(inputFile);
inputFile.Seek(0, SeekOrigin.Begin);
var signatureContainer = fileType.FileType switch
{
FileType.MachO => ExtractMachOSignatures(inputFile),
FileType.Pe => ExtractPeSignatures(inputFile),
FileType.Dmg => ExtractDmgSignatures(inputFile),
_ => throw new SignatureExtractionException($"Unsupported file type: {fileType.FileType}.")
};
var settings = new JsonSerializerSettings()
{
Converters = { new Newtonsoft.Json.Converters.StringEnumConverter() },
Formatting = Formatting.Indented,
NullValueHandling = NullValueHandling.Ignore,
};
using (StreamWriter writer = new StreamWriter(output, Encoding.UTF8, 1024, true))
using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
{
JsonSerializer ser = JsonSerializer.Create(settings);
ser.Serialize(jsonWriter, signatureContainer);
await jsonWriter.FlushAsync();
}
}