File: ToolManifest\JsonElementExtension.cs
Web Access
Project: ..\..\..\src\Cli\dotnet\dotnet.csproj (dotnet)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
using System.Text.Json;
 
namespace Microsoft.DotNet.Cli.ToolManifest;
 
internal static class JsonElementExtension
{
    // this is needed due to https://github.com/dotnet/corefx/issues/36109
 
    internal static bool TryGetStringValue(this JsonElement element, string name, out string value)
    {
        value = null;
        if (element.TryGetProperty(name, out JsonElement jsonValue))
        {
            if (jsonValue.ValueKind != JsonValueKind.String)
            {
                throw new ToolManifestException(
                    string.Format(
                        CliStrings.UnexpectedTypeInJson,
                        JsonValueKind.String.ToString(),
                        name));
            }
            value = jsonValue.GetString();
            return true;
        }
 
        return false;
    }
 
    internal static bool TryGetInt32Value(this JsonElement element, string name, out int value)
    {
        value = default;
        if (element.TryGetProperty(name, out JsonElement jsonValue))
        {
            if (jsonValue.ValueKind != JsonValueKind.Number)
            {
                throw new ToolManifestException(
                    string.Format(
                        CliStrings.UnexpectedTypeInJson,
                        JsonValueKind.Number.ToString(),
                        name));
            }
            value = jsonValue.GetInt32();
            return true;
        }
 
        return false;
    }
 
    internal static bool TryGetBooleanValue(this JsonElement element, string name, out bool value)
    {
        value = default;
        if (element.TryGetProperty(name, out JsonElement jsonValue))
        {
            if (!(jsonValue.ValueKind == JsonValueKind.True || jsonValue.ValueKind == JsonValueKind.False))
            {
                throw new ToolManifestException(
                    string.Format(
                        CliStrings.UnexpectedTypeInJson,
                        JsonValueKind.True.ToString() + "|" + JsonValueKind.False.ToString(),
                        name));
            }
            value = jsonValue.GetBoolean();
            return true;
        }
 
        return false;
    }
}