示例#1
0
        /// <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();
示例#2
0
        // ########
        // Various entry points
        //
        public static EsiSystem Convert(EsiContext ctxt, CodeGeneratorRequest.READER request)
        {
            var convert = new EsiCapnpReader(ctxt);

            return(convert.Read(request));
        }