using System.Diagnostics; using ArcaneLibs; using ArcaneLibs.Extensions; using ArcaneLibs.Extensions.Streams; using Rhea; using Rhea.Nar; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } app.UseAuthorization(); app.MapControllers(); new NarWriter().GetHeader().ToArray().HexDump(64); foreach (var srcPath in (string[])["/etc/nix/nix.conf", FileUtils.GetBinDir() + "/Rhea.runtimeconfig.json"]) { Console.WriteLine($"Original {srcPath}:"); var pe = new ProcessStartInfo("nix", ["nar", "dump-path", srcPath]) { RedirectStandardOutput = true }; var origBuf = new List(); var pr = Process.Start(pe); int b; while ((b = pr.StandardOutput.BaseStream.ReadByte()) != -1) origBuf.Add((byte)b); origBuf.ToArray().HexDump(64); Console.WriteLine($"\nNew {srcPath}:"); List tbuf = []; List buf = []; foreach (var chunk in new NarWriter().GetNarStreamContents(srcPath)) { tbuf.AddRange(chunk); buf.AddRange(chunk); while (buf.Count > 64) { byte[] data = buf[..64].ToArray(); buf = buf[64..]; data.HexDump(64); } } buf.ToArray().HexDump(64); Console.WriteLine("Is equal: " + origBuf.SequenceEqual(tbuf)); } // app.Run();