/* tslint:disable */
/* eslint-disable */
/*
 * Autogenerated by @creditkarma/thrift-typescript v3.7.2
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
*/
import * as thrift from "thrift";
import * as DataPageHeader from "./DataPageHeader";
import * as DataPageHeaderV2 from "./DataPageHeaderV2";
import * as DictionaryPageHeader from "./DictionaryPageHeader";
import * as IndexPageHeader from "./IndexPageHeader";
import * as PageType from "./PageType";
export interface IPageHeaderArgs {
  type: PageType.PageType;
  uncompressed_page_size: number;
  compressed_page_size: number;
  crc?: number;
  data_page_header?: DataPageHeader.DataPageHeader;
  index_page_header?: IndexPageHeader.IndexPageHeader;
  dictionary_page_header?: DictionaryPageHeader.DictionaryPageHeader;
  data_page_header_v2?: DataPageHeaderV2.DataPageHeaderV2;
}
export class PageHeader {
  public type: PageType.PageType;
  public uncompressed_page_size: number;
  public compressed_page_size: number;
  public crc?: number;
  public data_page_header?: DataPageHeader.DataPageHeader;
  public index_page_header?: IndexPageHeader.IndexPageHeader;
  public dictionary_page_header?: DictionaryPageHeader.DictionaryPageHeader;
  public data_page_header_v2?: DataPageHeaderV2.DataPageHeaderV2;
  constructor(args: IPageHeaderArgs) {
    if (args != null && args.type != null) {
      this.type = args.type;
    }
    else {
      throw new thrift.Thrift.TProtocolException(thrift.Thrift.TProtocolExceptionType.UNKNOWN, "Required field[type] is unset!");
    }
    if (args != null && args.uncompressed_page_size != null) {
      this.uncompressed_page_size = args.uncompressed_page_size;
    }
    else {
      throw new thrift.Thrift.TProtocolException(thrift.Thrift.TProtocolExceptionType.UNKNOWN, "Required field[uncompressed_page_size] is unset!");
    }
    if (args != null && args.compressed_page_size != null) {
      this.compressed_page_size = args.compressed_page_size;
    }
    else {
      throw new thrift.Thrift.TProtocolException(thrift.Thrift.TProtocolExceptionType.UNKNOWN, "Required field[compressed_page_size] is unset!");
    }
    if (args != null && args.crc != null) {
      this.crc = args.crc;
    }
    if (args != null && args.data_page_header != null) {
      this.data_page_header = args.data_page_header;
    }
    if (args != null && args.index_page_header != null) {
      this.index_page_header = args.index_page_header;
    }
    if (args != null && args.dictionary_page_header != null) {
      this.dictionary_page_header = args.dictionary_page_header;
    }
    if (args != null && args.data_page_header_v2 != null) {
      this.data_page_header_v2 = args.data_page_header_v2;
    }
  }
  public write(output: thrift.TProtocol): void {
    output.writeStructBegin("PageHeader");
    if (this.type != null) {
      output.writeFieldBegin("type", thrift.Thrift.Type.I32, 1);
      output.writeI32(this.type);
      output.writeFieldEnd();
    }
    if (this.uncompressed_page_size != null) {
      output.writeFieldBegin("uncompressed_page_size", thrift.Thrift.Type.I32, 2);
      output.writeI32(this.uncompressed_page_size);
      output.writeFieldEnd();
    }
    if (this.compressed_page_size != null) {
      output.writeFieldBegin("compressed_page_size", thrift.Thrift.Type.I32, 3);
      output.writeI32(this.compressed_page_size);
      output.writeFieldEnd();
    }
    if (this.crc != null) {
      output.writeFieldBegin("crc", thrift.Thrift.Type.I32, 4);
      output.writeI32(this.crc);
      output.writeFieldEnd();
    }
    if (this.data_page_header != null) {
      output.writeFieldBegin("data_page_header", thrift.Thrift.Type.STRUCT, 5);
      this.data_page_header.write(output);
      output.writeFieldEnd();
    }
    if (this.index_page_header != null) {
      output.writeFieldBegin("index_page_header", thrift.Thrift.Type.STRUCT, 6);
      this.index_page_header.write(output);
      output.writeFieldEnd();
    }
    if (this.dictionary_page_header != null) {
      output.writeFieldBegin("dictionary_page_header", thrift.Thrift.Type.STRUCT, 7);
      this.dictionary_page_header.write(output);
      output.writeFieldEnd();
    }
    if (this.data_page_header_v2 != null) {
      output.writeFieldBegin("data_page_header_v2", thrift.Thrift.Type.STRUCT, 8);
      this.data_page_header_v2.write(output);
      output.writeFieldEnd();
    }
    output.writeFieldStop();
    output.writeStructEnd();
    return;
  }
  public static read(input: thrift.TProtocol): PageHeader {
    input.readStructBegin();
    let _args: any = {};
    while (true) {
      const ret: thrift.TField = input.readFieldBegin();
      const fieldType: thrift.Thrift.Type = ret.ftype;
      const fieldId: number = ret.fid;
      if (fieldType === thrift.Thrift.Type.STOP) {
        break;
      }
      switch (fieldId) {
        case 1:
          if (fieldType === thrift.Thrift.Type.I32) {
            const value_1: PageType.PageType = input.readI32();
            _args.type = value_1;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 2:
          if (fieldType === thrift.Thrift.Type.I32) {
            const value_2: number = input.readI32();
            _args.uncompressed_page_size = value_2;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 3:
          if (fieldType === thrift.Thrift.Type.I32) {
            const value_3: number = input.readI32();
            _args.compressed_page_size = value_3;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 4:
          if (fieldType === thrift.Thrift.Type.I32) {
            const value_4: number = input.readI32();
            _args.crc = value_4;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 5:
          if (fieldType === thrift.Thrift.Type.STRUCT) {
            const value_5: DataPageHeader.DataPageHeader = DataPageHeader.DataPageHeader.read(input);
            _args.data_page_header = value_5;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 6:
          if (fieldType === thrift.Thrift.Type.STRUCT) {
            const value_6: IndexPageHeader.IndexPageHeader = IndexPageHeader.IndexPageHeader.read(input);
            _args.index_page_header = value_6;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 7:
          if (fieldType === thrift.Thrift.Type.STRUCT) {
            const value_7: DictionaryPageHeader.DictionaryPageHeader = DictionaryPageHeader.DictionaryPageHeader.read(input);
            _args.dictionary_page_header = value_7;
          }
          else {
            input.skip(fieldType);
          }
          break;
        case 8:
          if (fieldType === thrift.Thrift.Type.STRUCT) {
            const value_8: DataPageHeaderV2.DataPageHeaderV2 = DataPageHeaderV2.DataPageHeaderV2.read(input);
            _args.data_page_header_v2 = value_8;
          }
          else {
            input.skip(fieldType);
          }
          break;
        default: {
          input.skip(fieldType);
        }
      }
      input.readFieldEnd();
    }
    input.readStructEnd();
    if (_args.type !== undefined && _args.uncompressed_page_size !== undefined && _args.compressed_page_size !== undefined) {
      return new PageHeader(_args);
    }
    else {
      throw new thrift.Thrift.TProtocolException(thrift.Thrift.TProtocolExceptionType.UNKNOWN, "Unable to read PageHeader from input");
    }
  }
}
