// <auto-generated/>
#pragma warning disable CS0618
using Microsoft.Kiota.Abstractions.Extensions;
using Microsoft.Kiota.Abstractions.Serialization;
using System.Collections.Generic;
using System.IO;
using System;
namespace Marechai.App.Models
{
    [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
    #pragma warning disable CS1591
    public partial class ProcessorDto : IAdditionalDataHolder, IParsable
    #pragma warning restore CS1591
    {
        /// <summary>Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.</summary>
        public IDictionary<string, object> AdditionalData { get; set; }
        /// <summary>The address_bus property</summary>
        public int? AddressBus { get; set; }
        /// <summary>The company property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public string? Company { get; set; }
#nullable restore
#else
        public string Company { get; set; }
#endif
        /// <summary>The company_id property</summary>
        public int? CompanyId { get; set; }
        /// <summary>The cores property</summary>
        public int? Cores { get; set; }
        /// <summary>The data_bus property</summary>
        public int? DataBus { get; set; }
        /// <summary>The die_size property</summary>
        public float? DieSize { get; set; }
        /// <summary>The fprs property</summary>
        public int? Fprs { get; set; }
        /// <summary>The fpr_size property</summary>
        public int? FprSize { get; set; }
        /// <summary>The gprs property</summary>
        public int? Gprs { get; set; }
        /// <summary>The gpr_size property</summary>
        public int? GprSize { get; set; }
        /// <summary>The id property</summary>
        public int? Id { get; set; }
        /// <summary>The instruction_set property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public string? InstructionSet { get; set; }
#nullable restore
#else
        public string InstructionSet { get; set; }
#endif
        /// <summary>The instruction_set_extensions property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public List<string>? InstructionSetExtensions { get; set; }
#nullable restore
#else
        public List<string> InstructionSetExtensions { get; set; }
#endif
        /// <summary>The instruction_set_id property</summary>
        public int? InstructionSetId { get; set; }
        /// <summary>The introduced property</summary>
        public DateTimeOffset? Introduced { get; set; }
        /// <summary>The l1_data property</summary>
        public float? L1Data { get; set; }
        /// <summary>The l1_instruction property</summary>
        public float? L1Instruction { get; set; }
        /// <summary>The l2 property</summary>
        public float? L2 { get; set; }
        /// <summary>The l3 property</summary>
        public float? L3 { get; set; }
        /// <summary>The model_code property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public string? ModelCode { get; set; }
#nullable restore
#else
        public string ModelCode { get; set; }
#endif
        /// <summary>The name property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public string? Name { get; set; }
#nullable restore
#else
        public string Name { get; set; }
#endif
        /// <summary>The package property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public string? Package { get; set; }
#nullable restore
#else
        public string Package { get; set; }
#endif
        /// <summary>The process property</summary>
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
#nullable enable
        public string? Process { get; set; }
#nullable restore
#else
        public string Process { get; set; }
#endif
        /// <summary>The process_nm property</summary>
        public float? ProcessNm { get; set; }
        /// <summary>The simd_registers property</summary>
        public int? SimdRegisters { get; set; }
        /// <summary>The simd_size property</summary>
        public int? SimdSize { get; set; }
        /// <summary>The speed property</summary>
        public double? Speed { get; set; }
        /// <summary>The threads_per_core property</summary>
        public int? ThreadsPerCore { get; set; }
        /// <summary>The transistors property</summary>
        public long? Transistors { get; set; }
        /// <summary>
        /// Instantiates a new <see cref="global::Marechai.App.Models.ProcessorDto"/> and sets the default values.
        /// </summary>
        public ProcessorDto()
        {
            AdditionalData = new Dictionary<string, object>();
        }
        /// <summary>
        /// Creates a new instance of the appropriate class based on discriminator value
        /// </summary>
        /// <returns>A <see cref="global::Marechai.App.Models.ProcessorDto"/></returns>
        /// <param name="parseNode">The parse node to use to read the discriminator value and create the object</param>
        public static global::Marechai.App.Models.ProcessorDto CreateFromDiscriminatorValue(IParseNode parseNode)
        {
            if(ReferenceEquals(parseNode, null)) throw new ArgumentNullException(nameof(parseNode));
            return new global::Marechai.App.Models.ProcessorDto();
        }
        /// <summary>
        /// The deserialization information for the current model
        /// </summary>
        /// <returns>A IDictionary&lt;string, Action&lt;IParseNode&gt;&gt;</returns>
        public virtual IDictionary<string, Action<IParseNode>> GetFieldDeserializers()
        {
            return new Dictionary<string, Action<IParseNode>>
            {
                { "address_bus", n => { AddressBus = n.GetIntValue(); } },
                { "company", n => { Company = n.GetStringValue(); } },
                { "company_id", n => { CompanyId = n.GetIntValue(); } },
                { "cores", n => { Cores = n.GetIntValue(); } },
                { "data_bus", n => { DataBus = n.GetIntValue(); } },
                { "die_size", n => { DieSize = n.GetFloatValue(); } },
                { "fpr_size", n => { FprSize = n.GetIntValue(); } },
                { "fprs", n => { Fprs = n.GetIntValue(); } },
                { "gpr_size", n => { GprSize = n.GetIntValue(); } },
                { "gprs", n => { Gprs = n.GetIntValue(); } },
                { "id", n => { Id = n.GetIntValue(); } },
                { "instruction_set", n => { InstructionSet = n.GetStringValue(); } },
                { "instruction_set_extensions", n => { InstructionSetExtensions = n.GetCollectionOfPrimitiveValues<string>()?.AsList(); } },
                { "instruction_set_id", n => { InstructionSetId = n.GetIntValue(); } },
                { "introduced", n => { Introduced = n.GetDateTimeOffsetValue(); } },
                { "l1_data", n => { L1Data = n.GetFloatValue(); } },
                { "l1_instruction", n => { L1Instruction = n.GetFloatValue(); } },
                { "l2", n => { L2 = n.GetFloatValue(); } },
                { "l3", n => { L3 = n.GetFloatValue(); } },
                { "model_code", n => { ModelCode = n.GetStringValue(); } },
                { "name", n => { Name = n.GetStringValue(); } },
                { "package", n => { Package = n.GetStringValue(); } },
                { "process", n => { Process = n.GetStringValue(); } },
                { "process_nm", n => { ProcessNm = n.GetFloatValue(); } },
                { "simd_registers", n => { SimdRegisters = n.GetIntValue(); } },
                { "simd_size", n => { SimdSize = n.GetIntValue(); } },
                { "speed", n => { Speed = n.GetDoubleValue(); } },
                { "threads_per_core", n => { ThreadsPerCore = n.GetIntValue(); } },
                { "transistors", n => { Transistors = n.GetLongValue(); } },
            };
        }
        /// <summary>
        /// Serializes information the current object
        /// </summary>
        /// <param name="writer">Serialization writer to use to serialize this model</param>
        public virtual void Serialize(ISerializationWriter writer)
        {
            if(ReferenceEquals(writer, null)) throw new ArgumentNullException(nameof(writer));
            writer.WriteIntValue("address_bus", AddressBus);
            writer.WriteStringValue("company", Company);
            writer.WriteIntValue("company_id", CompanyId);
            writer.WriteIntValue("cores", Cores);
            writer.WriteIntValue("data_bus", DataBus);
            writer.WriteFloatValue("die_size", DieSize);
            writer.WriteIntValue("fprs", Fprs);
            writer.WriteIntValue("fpr_size", FprSize);
            writer.WriteIntValue("gprs", Gprs);
            writer.WriteIntValue("gpr_size", GprSize);
            writer.WriteIntValue("id", Id);
            writer.WriteStringValue("instruction_set", InstructionSet);
            writer.WriteCollectionOfPrimitiveValues<string>("instruction_set_extensions", InstructionSetExtensions);
            writer.WriteIntValue("instruction_set_id", InstructionSetId);
            writer.WriteDateTimeOffsetValue("introduced", Introduced);
            writer.WriteFloatValue("l1_data", L1Data);
            writer.WriteFloatValue("l1_instruction", L1Instruction);
            writer.WriteFloatValue("l2", L2);
            writer.WriteFloatValue("l3", L3);
            writer.WriteStringValue("model_code", ModelCode);
            writer.WriteStringValue("name", Name);
            writer.WriteStringValue("package", Package);
            writer.WriteStringValue("process", Process);
            writer.WriteFloatValue("process_nm", ProcessNm);
            writer.WriteIntValue("simd_registers", SimdRegisters);
            writer.WriteIntValue("simd_size", SimdSize);
            writer.WriteDoubleValue("speed", Speed);
            writer.WriteIntValue("threads_per_core", ThreadsPerCore);
            writer.WriteLongValue("transistors", Transistors);
            writer.WriteAdditionalData(AdditionalData);
        }
    }
}
#pragma warning restore CS0618
