File: UnixFileModeTypeConverter.cs
Web Access
Project: src\src\Aspire.Hosting.Docker\Aspire.Hosting.Docker.csproj (Aspire.Hosting.Docker)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
 
namespace Aspire.Hosting.Docker;
 
internal class UnixFileModeTypeConverter : IYamlTypeConverter
{
    public bool Accepts(Type type)
    {
        return type == typeof(UnixFileMode);
    }
 
    public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
    {
        if (parser.Current is not YamlDotNet.Core.Events.Scalar scalar)
        {
            throw new InvalidOperationException(parser.Current?.ToString());
        }
 
        var value = scalar.Value;
        parser.MoveNext();
 
        return Convert.ToInt32(value, 8);
    }
 
    public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
    {
        if (value is not UnixFileMode mode)
        {
            throw new InvalidOperationException($"Expected {nameof(UnixFileMode)} but got {value?.GetType()}");
        }
 
        emitter.Emit(new Scalar("0" + Convert.ToString((int)mode, 8)));
    }
}