private WorkspaceEntry ParseEntry()

in tools/nuget2bazel/WorkspaceParser.cs [51:155]


        private WorkspaceEntry ParseEntry()
        {
            while (!IsEof() && IsWhitespace()) ++_pos;

            if (IsEof())
                return null;

            var result = new WorkspaceEntry();

            string package = null;
            string version = null;

            RequireToken(TokenCode.NUGET_PACKAGE);
            RequireToken(TokenCode.LPAR);

            var finished = false;
            while (!finished)
            {
                var (token, val) = PeekToken();
                switch (token)
                {
                    case TokenCode.NAME:
                        RequireToken(TokenCode.NAME);
                        RequireToken(TokenCode.EQUAL);
                        try
                        {
                            RequireToken(TokenCode.STRING);
                        }
                        catch (UnexpectedToken ex)
                        {
                            result.Variable = ex.Literal;
                        }
                        break;
                    case TokenCode.SOURCE:
                        RequireToken(TokenCode.SOURCE);
                        RequireToken(TokenCode.EQUAL);
                        RequireToken(TokenCode.SOURCE);
                        result.NugetSourceCustom = true;
                        break;
                    case TokenCode.CORE_FILES:
                        result.Core_Files = RequireDictionaryList(TokenCode.CORE_FILES);
                        break;
                    case TokenCode.CORE_LIB:
                        result.CoreLib = RequireDictionary(TokenCode.CORE_LIB);
                        break;
                    case TokenCode.CORE_REF:
                        result.CoreRef = RequireDictionary(TokenCode.CORE_REF);
                        break;
                    case TokenCode.MONO_DEPS:
                        result.Mono_Deps = RequireArray(TokenCode.MONO_DEPS);
                        break;
                    case TokenCode.MONO_FILES:
                        result.Mono_Files = RequireArray(TokenCode.MONO_FILES);
                        break;
                    case TokenCode.MONO_LIB:
                        result.MonoLib = RequireAssignment(TokenCode.MONO_LIB);
                        break;
                    case TokenCode.MONO_REF:
                        result.MonoRef = RequireAssignment(TokenCode.MONO_REF);
                        break;
                    case TokenCode.NET_DEPS:
                        result.Net_Deps = RequireDictionaryList(TokenCode.NET_DEPS);
                        break;
                    case TokenCode.NET_FILES:
                        result.Net_Files = RequireDictionaryList(TokenCode.NET_FILES);
                        break;
                    case TokenCode.NET_LIB:
                        result.NetLib = RequireDictionary(TokenCode.NET_LIB);
                        break;
                    case TokenCode.NET_REF:
                        result.NetRef = RequireDictionary(TokenCode.NET_REF);
                        break;
                    case TokenCode.PACKAGE:
                        package = RequireAssignment(TokenCode.PACKAGE);
                        break;
                    case TokenCode.VERSION:
                        version = RequireAssignment(TokenCode.VERSION);
                        break;
                    case TokenCode.SHA256:
                        result.Sha256 = RequireAssignment(TokenCode.SHA256);
                        break;
                    case TokenCode.CORE_TOOL:
                        result.CoreTool = RequireDictionary(TokenCode.CORE_TOOL);
                        break;
                    case TokenCode.NET_TOOL:
                        result.NetTool = RequireDictionary(TokenCode.NET_TOOL);
                        break;
                    case TokenCode.MONO_TOOL:
                        result.MonoTool = RequireAssignment(TokenCode.MONO_TOOL);
                        break;
                    case TokenCode.CORE_DEPS:
                        result.Core_Deps = RequireDictionaryList(TokenCode.CORE_DEPS);
                        break;
                    case TokenCode.RPAR:
                        finished = true;
                        GetToken();
                        break;
                }

            }

            result.PackageIdentity = new PackageIdentity(package, new NuGetVersion(version));

            return result;
        }