/// <summary> /// Main entry point. Convert a CodeGeneratorRequest to a list of EsiTypes. /// </summary> /// <param name="cgr"></param> /// <returns></returns> protected EsiSystem Read(CodeGeneratorRequest.READER cgr) { ulong CapnpSchemaID = cgr.RequestedFiles.FirstOrDefault().Id; // First pass: get all the filenames var IDtoFile = new Dictionary <ulong, string>(); cgr.RequestedFiles.Iterate(file => IDtoFile[file.Id] = file.Filename); // Second pass: get all the node names cgr.Nodes .SelectMany(fileNode => fileNode.NestedNodes.Select(nested => (nested, fileNode))) .ForEach(n => IDtoNames[n.nested.Id] = new EsiCapnpLocation { Id = n.nested.Id, NodeName = n.nested.Name, File = IDtoFile.GetValueOrDefault(n.fileNode.Id) }); // Third pass: get references to each node cgr.Nodes.ForEach(n => { var loc = GetLocation(n.Id); loc.Node = n; loc.DisplayName = n.DisplayName; }); // Fourth pass: Do the actual conversion var esiObjects = cgr.Nodes.Select( node => ConvertNode(node) switch { _ when(ESIAnnotations.Contains(node.Id)) => null, EsiReferenceType stRef => stRef.Reference, EsiObject o => o, null => null, }).Where(t => t != null).ToList();
// ######## // Various entry points // public static EsiSystem Convert(EsiContext ctxt, CodeGeneratorRequest.READER request) { var convert = new EsiCapnpReader(ctxt); return(convert.Read(request)); }