File: System\Security\Cryptography\PemEnumerator.cs
Web Access
Project: src\src\libraries\System.Security.Cryptography\src\System.Security.Cryptography.csproj (System.Security.Cryptography)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Diagnostics;
using System.Security.Cryptography;
 
namespace System.Security.Cryptography
{
    internal readonly ref struct PemEnumerator
    {
        private readonly ReadOnlySpan<char> _contents;
 
        public PemEnumerator(ReadOnlySpan<char> contents)
        {
            _contents = contents;
        }
 
        public Enumerator GetEnumerator() => new Enumerator(_contents);
 
        internal ref struct Enumerator
        {
            private ReadOnlySpan<char> _contents;
            private PemFields _pemFields;
 
            public Enumerator(ReadOnlySpan<char> contents)
            {
                _contents = contents;
                _pemFields = default;
            }
 
            public PemFieldItem Current => new PemFieldItem(_contents, _pemFields);
 
            public bool MoveNext()
            {
                _contents = _contents[_pemFields.Location.End..];
                return PemEncoding.TryFind(_contents, out _pemFields);
            }
 
            internal readonly ref struct PemFieldItem
            {
                private readonly ReadOnlySpan<char> _contents;
                private readonly PemFields _pemFields;
 
                public PemFieldItem(ReadOnlySpan<char> contents, PemFields pemFields)
                {
                    _contents = contents;
                    _pemFields = pemFields;
                }
 
                public void Deconstruct(out ReadOnlySpan<char> contents, out PemFields pemFields)
                {
                    contents = _contents;
                    pemFields = _pemFields;
                }
            }
        }
    }
}