// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using System.Text; namespace System.Net.Http.HPack { internal static partial class StatusCodes { // This uses C# compiler's ability to refer to static data directly. For more information see https://vcsjones.dev/2019/02/01/csharp-readonly-span-bytes-static private static ReadOnlySpan BytesStatus100 => new byte[] { (byte)'1', (byte)'0', (byte)'0' }; private static ReadOnlySpan BytesStatus101 => new byte[] { (byte)'1', (byte)'0', (byte)'1' }; private static ReadOnlySpan BytesStatus102 => new byte[] { (byte)'1', (byte)'0', (byte)'2' }; private static ReadOnlySpan BytesStatus200 => new byte[] { (byte)'2', (byte)'0', (byte)'0' }; private static ReadOnlySpan BytesStatus201 => new byte[] { (byte)'2', (byte)'0', (byte)'1' }; private static ReadOnlySpan BytesStatus202 => new byte[] { (byte)'2', (byte)'0', (byte)'2' }; private static ReadOnlySpan BytesStatus203 => new byte[] { (byte)'2', (byte)'0', (byte)'3' }; private static ReadOnlySpan BytesStatus204 => new byte[] { (byte)'2', (byte)'0', (byte)'4' }; private static ReadOnlySpan BytesStatus205 => new byte[] { (byte)'2', (byte)'0', (byte)'5' }; private static ReadOnlySpan BytesStatus206 => new byte[] { (byte)'2', (byte)'0', (byte)'6' }; private static ReadOnlySpan BytesStatus207 => new byte[] { (byte)'2', (byte)'0', (byte)'7' }; private static ReadOnlySpan BytesStatus208 => new byte[] { (byte)'2', (byte)'0', (byte)'8' }; private static ReadOnlySpan BytesStatus226 => new byte[] { (byte)'2', (byte)'2', (byte)'6' }; private static ReadOnlySpan BytesStatus300 => new byte[] { (byte)'3', (byte)'0', (byte)'0' }; private static ReadOnlySpan BytesStatus301 => new byte[] { (byte)'3', (byte)'0', (byte)'1' }; private static ReadOnlySpan BytesStatus302 => new byte[] { (byte)'3', (byte)'0', (byte)'2' }; private static ReadOnlySpan BytesStatus303 => new byte[] { (byte)'3', (byte)'0', (byte)'3' }; private static ReadOnlySpan BytesStatus304 => new byte[] { (byte)'3', (byte)'0', (byte)'4' }; private static ReadOnlySpan BytesStatus305 => new byte[] { (byte)'3', (byte)'0', (byte)'5' }; private static ReadOnlySpan BytesStatus306 => new byte[] { (byte)'3', (byte)'0', (byte)'6' }; private static ReadOnlySpan BytesStatus307 => new byte[] { (byte)'3', (byte)'0', (byte)'7' }; private static ReadOnlySpan BytesStatus308 => new byte[] { (byte)'3', (byte)'0', (byte)'8' }; private static ReadOnlySpan BytesStatus400 => new byte[] { (byte)'4', (byte)'0', (byte)'0' }; private static ReadOnlySpan BytesStatus401 => new byte[] { (byte)'4', (byte)'0', (byte)'1' }; private static ReadOnlySpan BytesStatus402 => new byte[] { (byte)'4', (byte)'0', (byte)'2' }; private static ReadOnlySpan BytesStatus403 => new byte[] { (byte)'4', (byte)'0', (byte)'3' }; private static ReadOnlySpan BytesStatus404 => new byte[] { (byte)'4', (byte)'0', (byte)'4' }; private static ReadOnlySpan BytesStatus405 => new byte[] { (byte)'4', (byte)'0', (byte)'5' }; private static ReadOnlySpan BytesStatus406 => new byte[] { (byte)'4', (byte)'0', (byte)'6' }; private static ReadOnlySpan BytesStatus407 => new byte[] { (byte)'4', (byte)'0', (byte)'7' }; private static ReadOnlySpan BytesStatus408 => new byte[] { (byte)'4', (byte)'0', (byte)'8' }; private static ReadOnlySpan BytesStatus409 => new byte[] { (byte)'4', (byte)'0', (byte)'9' }; private static ReadOnlySpan BytesStatus410 => new byte[] { (byte)'4', (byte)'1', (byte)'0' }; private static ReadOnlySpan BytesStatus411 => new byte[] { (byte)'4', (byte)'1', (byte)'1' }; private static ReadOnlySpan BytesStatus412 => new byte[] { (byte)'4', (byte)'1', (byte)'2' }; private static ReadOnlySpan BytesStatus413 => new byte[] { (byte)'4', (byte)'1', (byte)'3' }; private static ReadOnlySpan BytesStatus414 => new byte[] { (byte)'4', (byte)'1', (byte)'4' }; private static ReadOnlySpan BytesStatus415 => new byte[] { (byte)'4', (byte)'1', (byte)'5' }; private static ReadOnlySpan BytesStatus416 => new byte[] { (byte)'4', (byte)'1', (byte)'6' }; private static ReadOnlySpan BytesStatus417 => new byte[] { (byte)'4', (byte)'1', (byte)'7' }; private static ReadOnlySpan BytesStatus418 => new byte[] { (byte)'4', (byte)'1', (byte)'8' }; private static ReadOnlySpan BytesStatus419 => new byte[] { (byte)'4', (byte)'1', (byte)'9' }; private static ReadOnlySpan BytesStatus421 => new byte[] { (byte)'4', (byte)'2', (byte)'1' }; private static ReadOnlySpan BytesStatus422 => new byte[] { (byte)'4', (byte)'2', (byte)'2' }; private static ReadOnlySpan BytesStatus423 => new byte[] { (byte)'4', (byte)'2', (byte)'3' }; private static ReadOnlySpan BytesStatus424 => new byte[] { (byte)'4', (byte)'2', (byte)'4' }; private static ReadOnlySpan BytesStatus426 => new byte[] { (byte)'4', (byte)'2', (byte)'6' }; private static ReadOnlySpan BytesStatus428 => new byte[] { (byte)'4', (byte)'2', (byte)'8' }; private static ReadOnlySpan BytesStatus429 => new byte[] { (byte)'4', (byte)'2', (byte)'9' }; private static ReadOnlySpan BytesStatus431 => new byte[] { (byte)'4', (byte)'3', (byte)'1' }; private static ReadOnlySpan BytesStatus451 => new byte[] { (byte)'4', (byte)'5', (byte)'1' }; private static ReadOnlySpan BytesStatus500 => new byte[] { (byte)'5', (byte)'0', (byte)'0' }; private static ReadOnlySpan BytesStatus501 => new byte[] { (byte)'5', (byte)'0', (byte)'1' }; private static ReadOnlySpan BytesStatus502 => new byte[] { (byte)'5', (byte)'0', (byte)'2' }; private static ReadOnlySpan BytesStatus503 => new byte[] { (byte)'5', (byte)'0', (byte)'3' }; private static ReadOnlySpan BytesStatus504 => new byte[] { (byte)'5', (byte)'0', (byte)'4' }; private static ReadOnlySpan BytesStatus505 => new byte[] { (byte)'5', (byte)'0', (byte)'5' }; private static ReadOnlySpan BytesStatus506 => new byte[] { (byte)'5', (byte)'0', (byte)'6' }; private static ReadOnlySpan BytesStatus507 => new byte[] { (byte)'5', (byte)'0', (byte)'7' }; private static ReadOnlySpan BytesStatus508 => new byte[] { (byte)'5', (byte)'0', (byte)'8' }; private static ReadOnlySpan BytesStatus510 => new byte[] { (byte)'5', (byte)'1', (byte)'0' }; private static ReadOnlySpan BytesStatus511 => new byte[] { (byte)'5', (byte)'1', (byte)'1' }; public static ReadOnlySpan ToStatusBytes(int statusCode) { switch (statusCode) { case (int)HttpStatusCode.Continue: return BytesStatus100; case (int)HttpStatusCode.SwitchingProtocols: return BytesStatus101; case (int)HttpStatusCode.Processing: return BytesStatus102; case (int)HttpStatusCode.OK: return BytesStatus200; case (int)HttpStatusCode.Created: return BytesStatus201; case (int)HttpStatusCode.Accepted: return BytesStatus202; case (int)HttpStatusCode.NonAuthoritativeInformation: return BytesStatus203; case (int)HttpStatusCode.NoContent: return BytesStatus204; case (int)HttpStatusCode.ResetContent: return BytesStatus205; case (int)HttpStatusCode.PartialContent: return BytesStatus206; case (int)HttpStatusCode.MultiStatus: return BytesStatus207; case (int)HttpStatusCode.AlreadyReported: return BytesStatus208; case (int)HttpStatusCode.IMUsed: return BytesStatus226; case (int)HttpStatusCode.MultipleChoices: return BytesStatus300; case (int)HttpStatusCode.MovedPermanently: return BytesStatus301; case (int)HttpStatusCode.Found: return BytesStatus302; case (int)HttpStatusCode.SeeOther: return BytesStatus303; case (int)HttpStatusCode.NotModified: return BytesStatus304; case (int)HttpStatusCode.UseProxy: return BytesStatus305; case (int)HttpStatusCode.Unused: return BytesStatus306; case (int)HttpStatusCode.TemporaryRedirect: return BytesStatus307; case (int)HttpStatusCode.PermanentRedirect: return BytesStatus308; case (int)HttpStatusCode.BadRequest: return BytesStatus400; case (int)HttpStatusCode.Unauthorized: return BytesStatus401; case (int)HttpStatusCode.PaymentRequired: return BytesStatus402; case (int)HttpStatusCode.Forbidden: return BytesStatus403; case (int)HttpStatusCode.NotFound: return BytesStatus404; case (int)HttpStatusCode.MethodNotAllowed: return BytesStatus405; case (int)HttpStatusCode.NotAcceptable: return BytesStatus406; case (int)HttpStatusCode.ProxyAuthenticationRequired: return BytesStatus407; case (int)HttpStatusCode.RequestTimeout: return BytesStatus408; case (int)HttpStatusCode.Conflict: return BytesStatus409; case (int)HttpStatusCode.Gone: return BytesStatus410; case (int)HttpStatusCode.LengthRequired: return BytesStatus411; case (int)HttpStatusCode.PreconditionFailed: return BytesStatus412; case (int)HttpStatusCode.RequestEntityTooLarge: return BytesStatus413; case (int)HttpStatusCode.RequestUriTooLong: return BytesStatus414; case (int)HttpStatusCode.UnsupportedMediaType: return BytesStatus415; case (int)HttpStatusCode.RequestedRangeNotSatisfiable: return BytesStatus416; case (int)HttpStatusCode.ExpectationFailed: return BytesStatus417; case (int)418: return BytesStatus418; case (int)419: return BytesStatus419; case (int)HttpStatusCode.MisdirectedRequest: return BytesStatus421; case (int)HttpStatusCode.UnprocessableEntity: return BytesStatus422; case (int)HttpStatusCode.Locked: return BytesStatus423; case (int)HttpStatusCode.FailedDependency: return BytesStatus424; case (int)HttpStatusCode.UpgradeRequired: return BytesStatus426; case (int)HttpStatusCode.PreconditionRequired: return BytesStatus428; case (int)HttpStatusCode.TooManyRequests: return BytesStatus429; case (int)HttpStatusCode.RequestHeaderFieldsTooLarge: return BytesStatus431; case (int)HttpStatusCode.UnavailableForLegalReasons: return BytesStatus451; case (int)HttpStatusCode.InternalServerError: return BytesStatus500; case (int)HttpStatusCode.NotImplemented: return BytesStatus501; case (int)HttpStatusCode.BadGateway: return BytesStatus502; case (int)HttpStatusCode.ServiceUnavailable: return BytesStatus503; case (int)HttpStatusCode.GatewayTimeout: return BytesStatus504; case (int)HttpStatusCode.HttpVersionNotSupported: return BytesStatus505; case (int)HttpStatusCode.VariantAlsoNegotiates: return BytesStatus506; case (int)HttpStatusCode.InsufficientStorage: return BytesStatus507; case (int)HttpStatusCode.LoopDetected: return BytesStatus508; case (int)HttpStatusCode.NotExtended: return BytesStatus510; case (int)HttpStatusCode.NetworkAuthenticationRequired: return BytesStatus511; default: return Encoding.ASCII.GetBytes(statusCode.ToString(CultureInfo.InvariantCulture)); } } } }